好了,我们开始吧...
我试图调用存储过程(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
说有一个错误,我更新了它ojdbc5.jar来源: http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html
但问题仍然存在
该数据库是一个的Oracle 11g的JavaEE 1.5在2.1的Glassfish运行
好吧,我想就是这样了,我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)
编辑
所以,大家好,要在这里把这个......告诉我,如果I'm做错了,我会删除它...
someByteArray是一个阵列,这是从获得someString.toByteArray()
该字符串正拿着的表示(编辑:常说JPEG)以Base64 PNG图像编码...
所以,我用sun.misc.BASE64Decoder的方法从someString获得someByteArray ......然后我用
oracleCallableStatement.setBinaryStream(3, new ByteArrayInputStream(someByteArray), someByteArray.length);
和它的工作就像一个魅力..
BUUUT ......在sun.misc类的用法是不推荐,阅读以获取更多信息..
工作sun.misc.BASE64Encoder /解码器用于获取字节[]
但!!!
不解开这个谜,为什么我无法把第一个字节数组的参数和神秘异常的谜“值java.sql.SQLException:数据大小比为这种类型的最大规模更大的” ...
编辑:
这个错误又出现了......这个时候一切都还好,我是正确解码的base64,但“值java.sql.SQLException:数据大小比为这种类型的最大规模更大的”保留返回...
编辑:
正是那个司机,我改变它的服务器和应用程序,并重新部署我,一切都工作得很好...