oracle数组在java中填充了空数据

当我尝试将一个字符串数组抛出到oracle存储过程时:

String arrStr[] ={"val1","val2","val3"}; ArrayDescriptor descriptor = ArrayDescriptor.createDescriptor("STR_ARRAY", connection ); oracle.sql.ARRAY oracleArray = new oracle.sql.ARRAY(descriptor, connection, arrStr); 

oracleArray持有空数据,oracleArray.datumArray = {???,???,???}

在我的情况下(参见上面的评论),它是由编码问题引起的 – 但没有任何exception或调试信息。 将orai18n.jar包含在项目库中解决了这个问题……真的很难过,没有任何exception或其他东西可以指示如何解决问题

几小时后我创建了原因,真正的问题是数据库的NLS_CHARACTERSET使用客户端不支持的编码,jdbc支持其他NLS_LANG是必要的,在类路径中添加orai18n.jar。 使用此sql查看数据库设置:

SELECT * FROM NLS_DATABASE_PARAMETERS

可能你的STR_ARRAY是这样定义的:

create or replace type STR_ARRAY is table of VARCHAR2(20);

正如Tomas所说,问题在于编码。 我的解决方案 – 改为使用NVARCHAR2。

create or replace type STR_ARRAY is table of NVARCHAR2(20);