Buenos días, tardes, noches.
Este día les traigo la creacion de un nuevo desarrollo el cual se trata de el paso de informacion de java a Oracle, usando del lado de Oracle lo que se conoce como Nested Table del cual encuentran mas informacion aquí.
Dejando a un lado la estructura de la tabla en Oracle, nos vamos directo al código en el lado de Java.
He creado la siguiente estructura, una clase Pojo, una clase Dao y por ultimo una clase Library, empezando por el Pojo tenemos lo siguiente.
pasando a la clase Dao quedaria de la siguiente manera
ahora vamos a la clase library
Una vez finalizado el ejercicio no me queda mas que esperar sus comentarios, sean buenos o malos, aquí los espero... hasta pronto y buen día.
Este día les traigo la creacion de un nuevo desarrollo el cual se trata de el paso de informacion de java a Oracle, usando del lado de Oracle lo que se conoce como Nested Table del cual encuentran mas informacion aquí.
Dejando a un lado la estructura de la tabla en Oracle, nos vamos directo al código en el lado de Java.
He creado la siguiente estructura, una clase Pojo, una clase Dao y por ultimo una clase Library, empezando por el Pojo tenemos lo siguiente.
public class ObjetoPojo{ // creamos la clase que servira de estructura para los valores que se envian y reciben // con su respectivo constructor private int clave = 0; private String valor = "N/A"; public ObjetoPOJO(int clave, String valor){ this.clave = clave; this.valor = valor; } public int getClave() { return clave; } public void setClave(int clave) { this.clave = clave; } public String getValor() { return valor; } public void setValor(String valor) { this.valor = valor; } }
pasando a la clase Dao quedaria de la siguiente manera
public class conexionDao { // el metodo pasaNestedPrueba: cuenta con un parametro del tipo lista< ObjetoPOJO> public ListpasaNestedPrueba(List item) { /* * se crea una varible para el retorno */ List adds = new ArrayList<>(); try { /* * se crean los descriptores para la estructura y el arreglo que llevara la informacion a la tabla en base de datos y al final se prepara la llamada al procedimiento almacenado */ conecta(); StructDescriptor desc2 = StructDescriptor.createDescriptor("TABLA_STRUCT", conexion); ArrayDescriptor des = ArrayDescriptor.createDescriptor("TABLA_DATA", conexion); CallableStatement st = conexion.prepareCall("call schema.package.procedure( ? , ? )"); /* * se necesita de un arreglo de objetos, en este caso lo creamos a la longitud de la lista que recibimos, al igual que el arreglo que posteriormente se pasara a la base */ Object[] itemAtributes = new Object[item.size()]; STRUCT itemObject = null; STRUCT[] idsArray = new STRUCT[item.size()]; /* * recorremos la lista que pasa como parametro y llenamos instantáneamente el arreglo de tipo Objeto , para asignarlo a la estructura y agregarlo al arreglo final. */ for (int i = 0; i < item.size(); i++) { itemAtributes = new Object[]{ item.get(i).getClave(), item.get(i).getValor() }; itemObject = new STRUCT(desc2, conexion, itemAtributes); idsArray[i] = itemObject; } /* * creamos un ARRAY del tipo oracle.sql.ARRAY pasandole el arreglo de objetos estructurados */ ARRAY array_to_pass = new ARRAY(des, conexion, idsArray); /* * seteamos los parametros de la llamada */ st.setArray(1, array_to_pass); st.registerOutParameter(2, OracleTypes.CURSOR); st.executeQuery(); /* * despues de haber ejecutado el comando en oracle recorremos el set de resultados y asignamos los valores otenidos en la variable retorno */ ResultSet rs = (ResultSet) st.getObject(2); while (rs.next()) { ObjetoPOJO _consulta = new ObjetoPOJO(); _consulta.setClave(rs.getInt("clave")); _consulta.setValor(rs.getString("valor")); adds.add(_consulta); } desconecta(); } catch (SQLException e) { System.err.println("Exception in Method DAO: " + e); } finally { desconecta(); } return adds; } }
ahora vamos a la clase library
public class ConexionNestedLibrary { /* * este metodo asigna los valores a una lista que sera enviada al Dao * para su guardado en la base, * llenando 100 elementos y posteriormente recibidos */ public void estableseMatriz() { Listlista = new ArrayList<>(); for (int i = 0; i < 100; i++) { ObjetoPOJO _item = new ObjetoPOJO(i + 1, "Dato: " + i + " : con valor " + (i + 1)); lista.add(_item); } ConexionNestedDAO cnd = new ConexionNestedDAO(); List recibido = cnd.pasaNestedPrueba(lista); for (int i = 0; i < recibido.size(); i++) { System.out.println("Clavedel producto: " + recibido.get(i).getClave() + " con valor: " + recibido.get(i).getValor()); } } }
Una vez finalizado el ejercicio no me queda mas que esperar sus comentarios, sean buenos o malos, aquí los espero... hasta pronto y buen día.
No hay comentarios:
Publicar un comentario