根据这个问题:使用JDBC 从dbms_output.get_lines获取输出
我使用了代码:
try (Statement s = conn1.createStatement()) {
try {
s.executeUpdate("begin dbms_output.enable(); end;");
s.executeUpdate("begin dbms_output.put_line('abc'); end;");
s.executeUpdate("begin dbms_output.put_line('hello'); end;");
s.executeUpdate("begin dbms_output.put_line('so cool'); end;");
try (CallableStatement call = conn1.prepareCall(
"declare "
+ " num integer := 1000;"
+ "begin "
+ " dbms_output.get_lines(?, num);"
+ "end;"
)) {
call.registerOutParameter(1, java.sql.Types.ARRAY, "DBMSOUTPUT_LINESARRAY");
call.execute();
Array array = null;
try {
array = call.getArray(1);
System.out.println(Arrays.asList((Object[]) array.getArray()));
}
finally {
if (array != null)
array.free();
}
}
}
finally {
s.executeUpdate("begin dbms_output.disable(); end;");
}
}
但结果收到:
[???, ???, ???, null]
当我应该得到:
[abc, hello, so cool, null]
造成这种情况的原因是什么?如何解决?
将orai18n.jar包含到项目库中解决了这个问题。。。
仅将orai18n.jar包含到项目库中就解决了这个问题。此jar具有支持Advance Data Types(Objects(中所有Oracle字符集的配置信息。