gpt4 book ai didi

java - 如何将 List 从 java 传递到 Oracle Procedure?

转载 作者:行者123 更新时间:2023-11-29 08:44:45 25 4
gpt4 key购买 nike

我想将一个列表从 java 发送到 Oracle 过程。例如,有一所学校,学校有学生名单。此外,学生们还有一份讲座 list 。我创建了一个讲座列表,以及拥有讲座列表的学生列表,学校有一份学生名单。

讲座。

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 库允许发送数组,但我想发送列表。

我该如何做这个操作?你能帮帮我吗。

谢谢。

最佳答案

将您的列表转换为多维数组,然后您可以执行以下操作:

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

ArrayDescriptor des = ArrayDescriptor.createDescriptor("STRINGLIST_LIST_LIST", con);

ARRAY school = new ARRAY( des, con, newString[][][]{
new String[][]{ l1, l3 },
new String[][]{ l2, l3 }
} );

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

关于java - 如何将 List 从 java 传递到 Oracle Procedure?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37160300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com