java - 将数组传递给 oracle 过程

标签 java oracle stored-procedures

我想将两个数组从 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/

相关文章:

java - 使用 RestTemplate,如何先将请求发送到代理,以便我可以将 junit 与 JMeter 一起使用?

java - JDBCRealm 与 JPA

linux - 连接erlang客户端到oracle

c# - 如何将 asp.net 下拉选择项作为输入传递给 c# 中的存储过程?

tsql - 如何从 CTE 调用带参数的存储过程(无光标)

entity-framework - 存储过程和 EF 代码优先

java - 使用通过 LoaderManager 加载的数据动态更新 ListView

java - 根据列表值对映射进行排序

c++ - 在 Oracle OCCI/OCI 中,读取 LOB 的缓冲区是否应该大于实际数据?获取 ORA-32116

sql - 在表中查找重复项