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() {
List lista = 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