2016-05-11 15 views
0

javaからOracleへのリストを送信したい。 例: 学校があり、学校には学生リストがあります。 また、学生には講義のリストがあります。 私は講義のリスト と講義のリストを持っている学生のリスト を作成し、学校には学生のリストがあります。javaからOracleへのリストを渡す方法Procedure?

The Lectures。

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

講義リスト。

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

そして、講義を持っている学生のリスト。

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

、学校

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

私は、Oracleプロシージャに "学校" を送りたいです。しかし、私は直接リストを送ることができませんでした。 Oracleライブラリは配列を送信することができますが、私はリストを送信したい。

どうすればこの操作を行うことができますか?私たちを手伝ってくれますか。

ありがとうございました。

+3

はあなたのリストを変換します'toArray'を使って配列してから渡します – Sanjeev

答えて

2

mutli次元配列にあなたのリストを変換して、あなたのような何かを行うことができます。

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); 
    } 
    } 
} 
関連する問題