Cómo pasar Lista de Java a Oracle Procedimiento?

Deseo 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. Yo 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 lecture1 = new ArrayList(); lecture1.add("Mat"); lecture1.add("physics"); ArrayList lecture2 = new ArrayList(); lecture2.add("English"); lecture2.add("Spanish"); ArrayList lecture3 = new ArrayList(); lecture3.add("Germany"); lecture3.add("French"); 

La lista de conferencias

 ArrayList<ArrayList> lectureList1 = new ArrayList<ArrayList>(); lectureList1.add(lecture1); lectureList1.add(lecture3); ArrayList<ArrayList> lectureList2 = new ArrayList<ArrayList>(); lectureList2.add(lecture2); lectureList2.add(lecture3); 

Y la lista de estudiantes que tienen conferencias.

  ArrayList<ArrayList> StudentList = new ArrayList<ArrayList>(); StudentList.addAll(lectureList2); StudentList.addAll(lectureList2); ArrayList<ArrayList> StudentList2 = new ArrayList<ArrayList>(); StudentList2.addAll(lectureList1); StudentList2.addAll(lectureList2); 

Y la escuela

  ArrayList<ArrayList<ArrayList>> school = new ArrayList<ArrayList<ArrayList>>(); school.add(StudentList2); school.add(StudentList); 

Quiero enviar ” escuela ” a un procedimiento de oracle. Sin embargo, no pude enviar una lista directamente. La biblioteca de Oracle permite enviar array pero quiero enviar la lista.

¿Cómo puedo hacer esta operación? Usted me podría ayudar.

Gracias.

Convierta sus listas a una matriz mutli-dimensional 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); } } }