【发布时间】:2016-08-14 23:55:38
【问题描述】:
我的应用程序使用以下配置运行 汤姆猫 - 6.0.18 数据库-Oracle 11g 企业版(11.2.0.2.0) Java 版本 - jdk 1.6 JDBC 驱动程序 - OJDBC14.jar(不确定确切的版本)
当我将 Oracle 数组类型值从 java 传递到存储过程时,我收到 Oracle-Character-set-178 错误。在下面找到错误消息。
java.sql.SQLException:不支持的字符集:oracle-character-set-178
下面是我正在执行的代码
String query = "{call DBA.SP_XXXX(?,?,?)}";
con = this.getConnection();
con=((DelegatingConnection) con).getInnermostDelegate();
oracle.sql.ArrayDescriptor descrip =oracle.sql.ArrayDescriptor.createDescriptor("DBA.ARRAY_TABLE", con);
oracle.sql.ARRAY oracArray = new oracle.sql.ARRAY(descrip, con, arrayValue);
cs = con.prepareCall(query);
cs.setString(1,ID);
cs.registerOutParameter(2, java.sql.Types.VARCHAR);
cs.setObject(3,oracArray);
cs.execute();
以下是我的 oracle 返回的字符集值
参数值
NLS_CHARACTERSET WE8MSWIN1252 NLS_NCHAR_CHARACTERSET AL16UTF16
我不确定 OJDBC14.jar 的确切版本是否在我当前的设置中运行,但是当我尝试用最新的 OJDBC14 替换并出现以下错误时 java.lang.NoSuchMethodError: oracle.i18n.text.converter.CharacterConverterOGS.getInstance(I)Loracle/sql/converter/CharacterConverters;
请告诉我什么是问题和解决方案
【问题讨论】:
-
你为什么使用旧的 ojdbc14.jar 而不是更高版本,比如 ojdbc6.jar?你的类路径中还有什么——例如,你选择了哪个 orai18n.jar?我认为您只是版本不匹配。
-
感谢亚历克斯,当我更换最新的 ojdbc6.jar 时,出现以下错误“java.lang.SecurityException:密封违规加载 oracle.jdbc.internal.ObjectData:包 oracle.jdbc.internal 已密封”
-
对不起,我忘了提,支持 oracle 11g 的最新 orai18n.jar 也添加到类路径中
标签: arrays oracle11g tomcat6 ojdbc oracle-type