我想将两个数组从 java 发送到 oracle 存储过程。 第一个数组是字符串数组,第二个是字符数组 我该怎么做??
最佳答案
这是一个如何做到这一点的例子。
以下脚本在数据库中设置一个表、一个类型和一个存储过程。该过程采用数组类型的参数并将数组的每一行插入到表中:
CREATE TABLE strings (s VARCHAR(4000));
CREATE TYPE t_varchar2_array AS TABLE OF VARCHAR2(4000);
/
CREATE OR REPLACE PROCEDURE p_array_test(
p_strings t_varchar2_array
)
AS
BEGIN
FOR i IN 1..p_strings.COUNT
LOOP
INSERT INTO strings (s) VALUES (p_strings(i));
END LOOP;
END;
/
然后 Java 代码演示了将一个数组传递到这个存储过程中:
import java.sql.*;
import oracle.jdbc.*;
import oracle.sql.*;
public class ArrayTest {
public static void main(String[] args) throws Exception {
DriverManager.registerDriver(new OracleDriver());
Connection conn = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:xe", "user", "pass");
CallableStatement stmt = conn.prepareCall("BEGIN p_array_test(?); END;");
// The first parameter here should be the name of the array type.
// It's been capitalised here since I created it without using
// double quotes.
ArrayDescriptor arrDesc =
ArrayDescriptor.createDescriptor("T_VARCHAR2_ARRAY", conn);
String[] data = { "one", "two", "three" };
Array array = new ARRAY(arrDesc, conn, data);
stmt.setArray(1, array);
stmt.execute();
conn.commit();
conn.close();
}
}
如果你运行 SQL 脚本,然后运行 Java 类,然后查询表 strings
,你应该会发现所有数据都已插入到表中。
当您说“字符数组”时,我猜您指的是 Java char
数组。如果我猜对了,那么我认为您最好将 char
转换为 String
,然后使用与上述相同的方法。
关于java - 将数组传递给 oracle 过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5198856/