如何创建oracle.sql.ARRAY对象?

use*_*735 6 java oracle jdbc oracle11gr2

这个问题与我的原始问题有关如何将数组从Java返回到PL/SQL?,但更具体.

我一直在阅读Oracle数据库JDBC开发人员指南

但我仍然无法编写最小代码,我可以使用它来创建ARRAY

ARRAY array = oracle.jdbc.OracleConnection.createARRAY(sql_type_name, elements);
Run Code Online (Sandbox Code Playgroud)

按照创建ARRAY对象中的说明进行操作.

我正在使用Oracle数据库JVM.

我试过以下:

例1

create or replace type widgets_t is table of varchar2(32767);
/

create or replace and compile java source named "so20j1" as
public class so20j1 {
    public void f1() {
        String[] elements = new String[]{"foo", "bar", "zoo"};
        oracle.sql.ARRAY widgets =
            oracle.jdbc.OracleConnection.createARRAY("widgets_t", elements);
    }
};
/
show errors java source "so20j1"
Run Code Online (Sandbox Code Playgroud)

失败:

Errors for JAVA SOURCE "so20j1":

LINE/COL ERROR
-------- -----------------------------------------------------------------
0/0  so20j1:4: non-static method
     createARRAY(java.lang.String,java.lang.Object) cannot be
     referenced from a static context

0/0  1 error
0/0  ^
0/0  oracle.sql.ARRAY widgets =
     oracle.jdbc.OracleConnection.createARRAY("widgets_t", elements);
Run Code Online (Sandbox Code Playgroud)

例2

create or replace type widgets_t is table of varchar2(32767);
/

create or replace and compile java source named "so20j2" as

public class so20j2 {
    public void f1() {
        String[] elements = new String[]{"foo", "bar", "zoo"};
        oracle.jdbc.OracleDriver ora = new oracle.jdbc.OracleDriver();
        java.sql.Connection conn = ora.defaultConnection();
        oracle.sql.ARRAY widgets = conn.createARRAY("widgets_t", elements);
    }
};
/
show errors java source "so20j2"
Run Code Online (Sandbox Code Playgroud)

失败:

Errors for JAVA SOURCE "so20j2":

LINE/COL ERROR
-------- -----------------------------------------------------------------
0/0  so20j2:6: cannot find symbol
0/0  symbol  : method createARRAY(java.lang.String,java.lang.String[])
0/0  1 error
0/0  oracle.sql.ARRAY widgets = conn.createARRAY("widgets_t",
     elements);

0/0  ^
0/0  location: interface java.sql.Connection
Run Code Online (Sandbox Code Playgroud)

免责声明:我还不是Java程序员.

Aff*_*ffe 7

您使用#2处于正确的轨道上,但无法从类型为java.sql.Connection的连接创建oracle阵列.必须是OracleConnection才能使用这些方法.

oracle.jdbc.OracleDriver ora = new oracle.jdbc.OracleDriver();
java.sql.Connection conn = ora.defaultConnection();
OracleConnection oraConn = conn.unwrap(OracleConnection.class);
oracle.sql.ARRAY widgets = oraConn.createARRAY("widgets_t", elements);
Run Code Online (Sandbox Code Playgroud)

  • 对于多年后检查此内容的人来说,“createARRAY”现在已被弃用,您应该使用“createOracleArray”[显然](/sf/answers/2334331891/) (2认同)