array - ejecutar stored procedure oracle desde java
¿Cómo pasar la Lista de Java al Procedimiento de Oracle? (1)
Convierta sus listas en una matriz multidimensional y luego puede hacer algo como:
Configuración de Oracle :
CREATE TYPE stringlist AS TABLE OF VARCHAR2(100);
/
CREATE TYPE stringlist_list AS TABLE OF stringlist;
/
CREATE TYPE stringlist_list_list AS TABLE OF stringlist_list;
/
CREATE PROCEDURE load_list (
in_list IN stringlist_list_list
)
AS
BEGIN
NULL; -- Do something with the list
END;
/
Java :
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.CallableStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import oracle.jdbc.OracleCallableStatement;
import oracle.sql.ARRAY;
import oracle.sql.ArrayDescriptor;
public class TestDatabase2 {
public static void main(String args[]){
try{
Class.forName("oracle.jdbc.OracleDriver");
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","username","password");
// Convert your lists to arrays using #toArray( T[] )
String[] l1 = { "Math", "Physics" };
String[] l2 = { "English", "Spanish" };
String[] l3 = { "French", "German" };
ARRAY school = new ARRAY( des, con, newString[][][]{
new String[][]{ l1, l3 },
new String[][]{ l2, l3 }
} );
ArrayDescriptor des = ArrayDescriptor.createDescriptor("STRINGLIST_LIST_LIST", con);
CallableStatement st = con.prepareCall("{ call add_school( :school )}");
// Passing an array to the procedure -
((OracleCallableStatement) st).setARRAYAtName( "school", school );
st.execute();
} catch(ClassNotFoundException | SQLException e) {
System.out.println(e);
}
}
}
Quiero enviar una lista de Java al procedimiento de Oracle. Por ejemplo, hay una escuela y la escuela tiene una lista de estudiantes. Además, los estudiantes tienen una lista de conferencias. Creo una lista de conferencias, y una lista de estudiantes que tiene la lista de conferencias, y una escuela tiene una lista de los estudiantes.
Las conferencias
ArrayList<String> lecture1 = new ArrayList<String>();
lecture1.add("Mat");
lecture1.add("physics");
ArrayList<String> lecture2 = new ArrayList<String>();
lecture2.add("English");
lecture2.add("Spanish");
ArrayList<String> lecture3 = new ArrayList<String>();
lecture3.add("Germany");
lecture3.add("French");
La lista de conferencias.
ArrayList<ArrayList<String>> lectureList1 = new ArrayList<ArrayList<String>>();
lectureList1.add(lecture1);
lectureList1.add(lecture3);
ArrayList<ArrayList<String>> lectureList2 = new ArrayList<ArrayList<String>>();
lectureList2.add(lecture2);
lectureList2.add(lecture3);
Y la lista de estudiantes que tienen conferencias.
ArrayList<ArrayList<String>> StudentList = new ArrayList<ArrayList<String>>();
StudentList.addAll(lectureList2);
StudentList.addAll(lectureList2);
ArrayList<ArrayList<String>> StudentList2 = new ArrayList<ArrayList<String>>();
StudentList2.addAll(lectureList1);
StudentList2.addAll(lectureList2);
Y la escuela
ArrayList<ArrayList<ArrayList<String>>> school = new ArrayList<ArrayList<ArrayList<String>>>();
school.add(StudentList2);
school.add(StudentList);
Quiero enviar " escuela " a un procedimiento de oráculo. Sin embargo, no pude enviar una lista directamente. La biblioteca de Oracle permite enviar una matriz, pero quiero enviar la lista.
¿Cómo puedo hacer esta operación? Usted me podría ayudar.
Gracias.