Wie übergebe ich List von Java zu Oracle Procedure?

Ich möchte eine Liste von Java an Oracle-Prozedur senden. Zum Beispiel gibt es eine Schule und die Schule hat eine Liste von Schülern. Außerdem haben die Studenten eine Liste von Vorträgen. Ich erstelle eine Liste von Vorträgen, und eine Liste von Studenten, die die Liste der Vorträge hat, und eine Schule hat eine Liste der Schüler.

Die Vorlesungen.

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"); 

Die Liste der Vorträge.

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

Und die Liste der Studenten, die Vorlesungen halten.

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

Und die Schule

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

Ich möchte ” Schule ” zu einem oracleverfahren schicken. Ich konnte jedoch keine Liste direkt senden. Oracle-Bibliothek erlauben, Array zu senden, aber ich möchte Liste senden.

Wie kann ich diesen Vorgang durchführen? Kannst du mir helfen.

Vielen Dank.

Konvertieren Sie Ihre Listen in ein mehrdimensionales Array und dann können Sie Folgendes tun:

Oracle-Setup :

 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); } } }