Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将字符串数组插入VARRAY列?_Java_Oracle_Jdbc - Fatal编程技术网

Java 如何将字符串数组插入VARRAY列?

Java 如何将字符串数组插入VARRAY列?,java,oracle,jdbc,Java,Oracle,Jdbc,我正在尝试使用jdbc将插入到一个具有两个VARRAY列的表中;一个是int的VARRAY,另一个是varchar2的VARRAY。第一列插入得非常完美。但是,第二个函数将所有值都插入为null 这是表格: CREATE OR REPLACE TYPE ARRAY_DTBN_STRING AS VARRAY(10) OF VARCHAR2(100); CREATE OR REPLACE TYPE ARRAY_DTBN_INTEGER AS VARRAY(10) OF int; CREATE TA

我正在尝试使用jdbc将插入到一个具有两个VARRAY列的表中;一个是int的VARRAY,另一个是varchar2的VARRAY。第一列插入得非常完美。但是,第二个函数将所有值都插入为null

这是表格:

CREATE OR REPLACE TYPE ARRAY_DTBN_STRING AS VARRAY(10) OF VARCHAR2(100);
CREATE OR REPLACE TYPE ARRAY_DTBN_INTEGER AS VARRAY(10) OF int;
CREATE TABLE DTBN_DETAILS(
    ID VARCHAR2(100) PRIMARY KEY ,
    VALS ARRAY_DTBN_STRING,
    SIZES ARRAY_DTBN_INTEGER
);
这是使用JDBC插入的Java代码:

DtbnDetails det = new DtbnDetails();
det.setId("ABC");
det.setValues(new String[] {"room","house"});
det.setSizes(new int[] {3,5});

String query = "INSERT INTO DTBN_DETAILS "+ 
    "(ID, VALS, SIZES) VALUES (?, ?, ?)";

Connection conAux = Conexion.getConnection("main");                     
OracleConnection con = conAux.unwrap(OracleConnection.class);

PreparedStatement statement = con.prepareStatement(query);

int i=1;

String id = details.getId();
sentencia.setString(i++,id);

String[] values = details.getValues()==null ? new String[0] : details.getValues();
Array valuesArray = con.createOracleArray("ARRAY_DTBN_STRING", values);
statement.setArray(i++, valuesArray);

int[] sizes = details.getSizes()==null ? new int[0] : details.getSizes();
Array sizesArray = con.createOracleArray("ARRAY_DTBN_INTEGER", sizes);
statement.setArray(i++, sizesArray);

statement.execute();        
con.commit();
执行此代码后,“VAL”列有两个值,但都为空:

SELECT * FROM DTBN_DETAILS;

ABC
ARRAY_DTBN_STRING(NULL, NULL)
ARRAY_DTBN_INTEGER(3, 5)

我和你面临着同样的问题。解决方案是向类路径添加orai18n.jar

根据

如果客户端和服务器使用不同的字符集,那么驱动程序将提供支持,以执行数据库字符集和客户端字符集之间的转换

基本的ojdbc JAR文件包含所有必要的类,可为以下各项提供完整的全球化支持:

  • CHAR的Oracle字符集,VARCHAR。LONGVARCHAR或CLOB数据,该数据未作为Oracle 8对象或集合类型的数据成员进行检索或插入

  • 字符集US7ASCII、WE8DEC、WE8ISO8859P1和UTF8的对象和集合的CHAR或VARCHAR数据成员

要在对象或集合的CHAR或VARCHAR数据成员中使用任何其他字符集,必须在应用程序的类路径中包含orai18n.jar


我想,应该使用executeUpdate()而不是execute(),它返回已更新/插入的记录数。除了返回插入的行数之外,这似乎没有任何效果。另外,正在插入行,只是该列获取了不正确的数据。对我来说效果很好,顺便说一句,我以前从未见过setXxxx(I++,…