Java 如何将字符串数组插入VARRAY列?
我正在尝试使用jdbc将插入到一个具有两个VARRAY列的表中;一个是int的VARRAY,另一个是varchar2的VARRAY。第一列插入得非常完美。但是,第二个函数将所有值都插入为null 这是表格: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
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数据成员
我想,应该使用executeUpdate()而不是execute(),它返回已更新/插入的记录数。除了返回插入的行数之外,这似乎没有任何效果。另外,正在插入行,只是该列获取了不正确的数据。对我来说效果很好,顺便说一句,我以前从未见过setXxxx(I++,…