好的,我们开始...
我正在尝试调用存储过程 (PL/SQL),其中一个参数是 blob,但是当我执行 OracleCallableStatement 时出现此错误:
java.sql.SQLException:数据大小大于此类型的最大大小
这太令人沮丧了。。
我尝试执行以下操作但失败了...
oracleCallableStatement.setBinaryStream(3, new ByteArrayInputStream(someByteArray), someByteArray.length);
我得到同样的错误:
oracleCallableStatement.setBytes(3, someByteArray);
我还更改了 oracle 驱动程序,因为我阅读了这样的网页:
http://www.coderanch.com/t/457770/JDBC/databases/java-sql-sqlexception-data-size
说有bug,我更新到ojdbc5.jar 来自:http ://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html
但问题一直存在
数据库是 Oracle 11g JavaEE 是 1.5,在 Glassfish 2.1 中运行
好吧,我想就是这样,我的 someByteArray 不大于 4Gb!它的长度为 38678
编辑:异常在执行之前触发..当我为 OracleCallableStatement 设置属性时触发
堆栈跟踪的一部分:
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
at oracle.jdbc.ttc7.TTCItem.setArrayData(TTCItem.java:103)
at oracle.jdbc.dbaccess.DBDataSetImpl.setBytesBindItem(DBDataSetImpl.java:2484)
at oracle.jdbc.driver.OraclePreparedStatement.setItem(OraclePreparedStatement.java:1224)
at oracle.jdbc.driver.OraclePreparedStatement.setBinaryStream(OraclePreparedStatement.java:2710)
编辑
所以,你好,我要把它放在这里……告诉我我是否做错了,我会删除它……
someByteArray 是从 someString.toByteArray() 获取的数组
该字符串持有以 Base64 编码的(编辑:用于说 jpeg)PNG 图像的表示...
所以,我在 sun.misc.BASE64Decoder 中使用了一个方法从 someString 中获取 someByteArray ... 然后我使用了
oracleCallableStatement.setBinaryStream(3, new ByteArrayInputStream(someByteArray), someByteArray.length);
它就像一个魅力..
BUUUT...不建议使用 sun.misc 中的类,请阅读此内容以获取更多信息。
工作 sun.misc.BASE64Encoder/Decoder 以获取字节 []
但!!!
这并不能解决为什么我无法将第一个字节数组放入参数中的奥秘以及神秘异常“java.sql.SQLException:数据大小大于此类型的最大大小”的奥秘......
编辑:
这个错误再次出现......这次一切都很好,我正确解码了base64,但是“java.sql.SQLException:数据大小大于这种类型的最大大小”一直返回......
编辑:
它是驱动程序,我在服务器和应用程序上更改它,然后我重新部署并且一切正常......