11.06.2013

Postgres-XML y JAVA

Estoy probando esta BD para un proyecto que me encuentro realizando, he leido la documentacion de postgres y es en algunos casos incompleta, pero nada que otro ya hubiese tenido que hacer asi que como crear una columna de tipo XML en postgres ahi si es easy dado que solo se coloca como datatype el XML y listo, algo como:

Mi tabla de ejemplo:

CREATE TABLE xml_data ( c_tabla text, c_modificado text, d_modificado date, xml xml )

Como se puede verificar en el script, la columna XML se llama xml, algo creativo pero bueno eso no es lo importante.


>Ahora para la insercion de datos es necesario utilizar una utilidad de postgres llamada XMLPARSE la cual permite realizar el parseo de un documento o de una cadena, para el ejemplo se utilizara una cadena y asi realizar la insercion:

insert into xml_data values ('Departamento', 'Insercion', current_timestamp, XMLPARSE (CONTENT '<departamento><id>05</id><nmDepto>Antioquia</nmDepto></departamento>'));

Por que no le pongo los titulos a donde va la informacion, por pereza, ademas que  la informacion como se envia completa no es necesario agregar los nombres de las columnas donde va la informacion.

Explico el insert:
c_tabla = Departamento
c_modificado = Insercion
d_modificado = current_timestamp (La hora actual de la base de datos)
xml = <departamento><id>05</id><nmDepto>Antioquia</nmDepto></departamento> (Como objeto propio de postgres)


El XML queda de la siguiente forma:
<?xml version="1.0" encoding="UTF-8"?>
<Departamento>
    <id>05</id>
    <nmDepto>Antioquia</nmDepto>
</Departamento>


Asi que con esto ya se tiene una base de datos de tipo noSQL para trabajar y almacenar mucha informacion de cualquier cosa que deseemos guardar.

Ahora la parte que falta la de JAVA, como me traigo esa informacion, es sencillo dado que este objeto XML es devuelto como un Jdbc4SQLXML, esto en otras palabras es que ya es un objeto que podemos leer desde JAVA al momento de tener un resultSet, se puede reflejar en las siguientes lineas:

//Verificando que es un XML de postgres
if (resultSet.getMetaData().getColumnTypeName(i).indexOf("xml") >= 0
                        || resultSet.getMetaData().getColumnType(i) == 209) {
                    //xml 2009  postgres
                    columnXML = i;
                }


//Almacenando el valor de la columna
if (columnXML==i){
                        InputStream is = resultSet.getBinaryStream(i);
                        java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");
                        String dataXML = s.hasNext() ? s.next() : "";

                        _data.add(dataXML);
                    }else{


Con eso, ya desde JAVA se esta leyendo el XML almacenado en la base de datos.

Bueno, espero el post les sirva tanto como a mi.

Suerte