Java 如何创建oracle.sql.ARRAY对象?
这个问题与我原来的问题有关,但更具体 我一直在阅读和阅读Java 如何创建oracle.sql.ARRAY对象?,java,oracle,jdbc,oracle11gr2,Java,Oracle,Jdbc,Oracle11gr2,这个问题与我原来的问题有关,但更具体 我一直在阅读和阅读 但我仍然无法编写一个使用 ARRAY array = oracle.jdbc.OracleConnection.createARRAY(sql_type_name, elements); 按照中的指示 我正在使用Oracle数据库JVM 我尝试过以下方法: 示例1 create or replace type widgets_t is table of varchar2(32767); / create or replac
ARRAY array = oracle.jdbc.OracleConnection.createARRAY(sql_type_name, elements);
按照中的指示
我正在使用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"
在以下情况下失败:
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);
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
示例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"
在以下情况下失败:
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);
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
免责声明:我还不是Java程序员。您使用#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);
仅提及Java 1.6,这是标准版。基于Affe和Chris Mazzola的回答,我成功构建了两个在Oracle 11g R2数据库中编译的示例 基于Aff回答的示例
create or replace type widgets_t is table of varchar2(32767);
/
create or replace and compile java source named "so20ja1" as
public class so20ja1 {
public void f1() throws java.sql.SQLException {
String[] elements = new String[]{"foo", "bar", "zoo"};
oracle.jdbc.OracleDriver ora = new oracle.jdbc.OracleDriver();
java.sql.Connection conn = ora.defaultConnection();
oracle.jdbc.OracleConnection oraConn = (oracle.jdbc.OracleConnection)conn;
java.sql.Array widgets = oraConn.createARRAY("widgets_t", elements);
}
};
/
show errors java source "so20ja1"
create or replace type widgets_t is table of varchar2(32767);
/
create or replace and compile java source named "so20ja2" as
public class so20ja2 {
public void f1() throws java.sql.SQLException {
String[] elements = new String[]{"foo", "bar", "zoo"};
oracle.jdbc.OracleDriver ora = new oracle.jdbc.OracleDriver();
java.sql.Connection conn = ora.defaultConnection();
oracle.sql.ArrayDescriptor desc =
oracle.sql.ArrayDescriptor.createDescriptor("widgets_t", conn);
java.sql.Array widgets = new oracle.sql.ARRAY(desc, conn, elements);
}
};
/
show errors java source "so20ja2"
基于Chris Mazzola回答的示例
create or replace type widgets_t is table of varchar2(32767);
/
create or replace and compile java source named "so20ja1" as
public class so20ja1 {
public void f1() throws java.sql.SQLException {
String[] elements = new String[]{"foo", "bar", "zoo"};
oracle.jdbc.OracleDriver ora = new oracle.jdbc.OracleDriver();
java.sql.Connection conn = ora.defaultConnection();
oracle.jdbc.OracleConnection oraConn = (oracle.jdbc.OracleConnection)conn;
java.sql.Array widgets = oraConn.createARRAY("widgets_t", elements);
}
};
/
show errors java source "so20ja1"
create or replace type widgets_t is table of varchar2(32767);
/
create or replace and compile java source named "so20ja2" as
public class so20ja2 {
public void f1() throws java.sql.SQLException {
String[] elements = new String[]{"foo", "bar", "zoo"};
oracle.jdbc.OracleDriver ora = new oracle.jdbc.OracleDriver();
java.sql.Connection conn = ora.defaultConnection();
oracle.sql.ArrayDescriptor desc =
oracle.sql.ArrayDescriptor.createDescriptor("widgets_t", conn);
java.sql.Array widgets = new oracle.sql.ARRAY(desc, conn, elements);
}
};
/
show errors java source "so20ja2"
首先,您必须“将类型元素创建为数字为(5,2);”的varray(22)”,然后在oracle.jdbc.OracleConnection.createARRAY()中使用此类型@Zaki:如果您仔细阅读这个问题,我相信您会明白这正是我正在做的。类型名称是
widgets\u t
.Hmm。。。不幸的是,在您的示例中,我遇到了一个编译错误:找不到symbol:method unwrap(java.lang.Class)
但是如果我将连接
转换为OracleConnection
,我的示例将编译为:oracle.jdbc.OracleConnection oraConn=(oracle.jdbc.OracleConnection)oral.defaultConnection()代码>+1。展开是Java 6。如果您使用的是较旧的java,则需要强制转换。对于多年后检查此问题的任何人来说,createARRAY
现在已被弃用,您应该使用createOracleArray
听起来优雅而直接,但不幸的是,我所有的努力都以:找不到符号:createArrayOf(java.lang.String,java.lang.String[])位置:接口java.sql.Connection
。无论如何谢谢你!啊!!From:服务器端嵌入式JVM使用Java开发工具包(JDK)1.5.Ah!From:Oracle JDBC不支持java.sql.Connection接口的JDBC 4.0方法createArrayOf方法。此方法仅允许匿名数组类型,而所有Oracle数组类型都已命名。改为使用Oracle特定的方法Oracle.jdbc.OracleConnection.createARRAY。然而,Oracle 11g中不再记录这种方式,但似乎是10g和更早版本的方式。