求助:DB2 8.2 jdbc type4 插入大对象(Blob)时报错,请高人们指点。万分感谢。。。

时间:2022-06-26 14:13:56
DB2 8.2 jdbc type4 插入大对象(Blob)时报错,请高人们指点。万分感谢。。。 错误如下:
    R com.ibm.db2.jcc.b.SqlException: BigDecimal conversion exception [ibm][db2][jcc][converters] Overflow occurred during numeric data type conversion of "142764".. See attached Throwable.
    R  at com.ibm.db2.jcc.a.gb.a(gb.java:2048)
    R  at com.ibm.db2.jcc.a.jb.a(jb.java:1078)
    R  at com.ibm.db2.jcc.a.jb.a(jb.java:792)
    R  at com.ibm.db2.jcc.a.jb.a(jb.java:163)
    R  at com.ibm.db2.jcc.a.tb.a(tb.java:220)
    R  at com.ibm.db2.jcc.b.ad.a(ad.java:1625)
    R  at com.ibm.db2.jcc.b.ad.d(ad.java:2036)
    R  at com.ibm.db2.jcc.b.ad.V(ad.java:521)
    R  at com.ibm.db2.jcc.b.ad.executeUpdate(ad.java:504)
    R  at com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement.executeUpdate(WSJdbcPreparedStatement.java:469)
    R  at com.minstone.archivesedit.dao.AttachmentDAO.insertAttachment(AttachmentDAO.java:171)
    R  at com.minstone.archivesedit.helper.AttachmentCmd.saveNew(AttachmentCmd.java:281)
    R  at com.minstone.archivesedit.helper.AttachmentCmd.execute(AttachmentCmd.java:67)
    R  at com.minstone.archivesedit.servlet.MainServlet.execute(MainServlet.java:76)
    R  at com.minstone.archivesedit.servlet.MainServlet.doPost(MainServlet.java:31)
    R  at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
    R  at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
    R  at com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictServletInstance.java:110)
    R  at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLifecycleServlet.java:174)
    R  at com.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycleServlet.java:313)
    R  at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLifecycleServlet.java:116)
    R  at com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.java:283)
    R  at com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(ValidServletReferenceState.java:42)
    R  at com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(ServletInstanceReference.java:40)
    R  at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:76)
    R  at suntekweb.TransCharSvl.doFilter(TransCharSvl.java:30)
    R  at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:132)
    R  at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:71)
    R  at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispatch(WebAppRequestDispatcher.java:965)
    R  at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:555)
    R  at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:200)
    R  at com.ibm.ws.webcontainer.srt.WebAppInvoker.doForward(WebAppInvoker.java:119)
    R  at com.ibm.ws.webcontainer.srt.WebAppInvoker.handleInvocationHook(WebAppInvoker.java:276)
    R  at com.ibm.ws.webcontainer.cache.invocation.CachedInvocation.handleInvocation(CachedInvocation.java:71)
    R  at com.ibm.ws.webcontainer.cache.invocation.CacheableInvocationContext.invoke(CacheableInvocationContext.java:114)
    R  at com.ibm.ws.webcontainer.srp.ServletRequestProcessor.dispatchByURI(ServletRequestProcessor.java:186)
    R  at com.ibm.ws.webcontainer.oselistener.OSEListenerDispatcher.service(OSEListener.java:334)
    R  at com.ibm.ws.webcontainer.http.HttpConnection.handleRequest(HttpConnection.java:56)
    R  at com.ibm.ws.http.HttpConnection.readAndHandleRequest(HttpConnection.java:618)
    R  at com.ibm.ws.http.HttpConnection.run(HttpConnection.java:443)
    R  at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:593)

8 个解决方案

#1


jdbc 的版本怎么样?

#2


Database 产品名:DB2/NT
Database 产品版本:SQL08020
JDBC driver 名:IBM DB2 JDBC Universal Driver Architecture
JDBC driver 版本:2.3.63
当文件小于100k的时候,可以正常插入,文件大于100k的时候就报上述错误! 
表中字段声明为 blob(64M)类型
谢谢上面的回复!

#3


我在D:\Program Files\IBM\SQLLIB\db2cli.ini中加入了:
[ARCHIVE]
LONGDATACOMPAT=1
LOBMAXCOLUMNSIZE=64000000
DBALIAS=ARCHIVE

还是报上面的错误 :(

#4


也为该blob字段分配了长数据表空间, 页大小32k。 缓冲池页大小32k 还是报上面的错误。

#5


DB2的Blob字段问题
1、升级DB驱动
2、db2cli.ini中设LONGDATACOMPAT=1

查查你的JDBC驱动是不是最新的,说不定还是DB2已经修补过的BUG,升级一下驱动

#6


呵呵,谢谢 tjianliang(乡关何处)的回复!
哎! 郁闷呢。 在IBM网站上找DB2 JDBC驱动找半天也没找到。 DB2的升级包下半天也下不下来。IBM搞的东东怎么老是那么繁琐,打击编程的积极性。
我用一个java测试类,通过type2连DB2数据库中插入BLOB大对象是可以插入的!(30多M的都可以插入!)通过type4连DB2数据库中插入BLOB大对象抛出encode not support的异常。有人发帖子说是设置正确的环境变量:export LANG=en_US.iso88591 和db2字符集:db2set DB2CODEPAGE=1386 呵呵,我还没有试。。。

应用程序中用的in = new ByteArrayInputStream(attachment.getAttachContent());
              ps.setBinaryStream(9, in, in.available());
来插入的blob大对象。
小于100k的文件可以正常插入数据库。但是大于100k的就不能插入:
在weblogic+db2 jdbc type2 抛出异常: [IBM][CLI Driver] CLI0111E  数值超出范围。 SQLSTATE=22003
在webshpere+db2 jdbc type4抛出异常: com.ibm.db2.jcc.b.SqlException: BigDecimal conversion exception [ibm][db2][jcc][converters] Overflow occurred during numeric data type conversion of "142764".. See attached Throwable. 
请各位大侠帮忙!

#7


真惭愧啊! 呵呵,sorry! IBM。  我把数据类型搞错了! 
我在PowerDesigner 中把附件表的上传文件大小字段设置为了NUMERIC类型。
执行sql脚本后,在DB2 数据库中成为了:DECIMAL类型, 而该类型的最大值不超过100000。
插入大对象的时候,当然会抛出异常!
真不好意思!用DB2时间短, 基本功太差,心浮气躁。。。 测试的功底不够。。。。
谢谢各位的热心帮助!

#8


不好意思! 试了很久,没弄好给分结帖。 等忙完后好好研究。。。

#1


jdbc 的版本怎么样?

#2


Database 产品名:DB2/NT
Database 产品版本:SQL08020
JDBC driver 名:IBM DB2 JDBC Universal Driver Architecture
JDBC driver 版本:2.3.63
当文件小于100k的时候,可以正常插入,文件大于100k的时候就报上述错误! 
表中字段声明为 blob(64M)类型
谢谢上面的回复!

#3


我在D:\Program Files\IBM\SQLLIB\db2cli.ini中加入了:
[ARCHIVE]
LONGDATACOMPAT=1
LOBMAXCOLUMNSIZE=64000000
DBALIAS=ARCHIVE

还是报上面的错误 :(

#4


也为该blob字段分配了长数据表空间, 页大小32k。 缓冲池页大小32k 还是报上面的错误。

#5


DB2的Blob字段问题
1、升级DB驱动
2、db2cli.ini中设LONGDATACOMPAT=1

查查你的JDBC驱动是不是最新的,说不定还是DB2已经修补过的BUG,升级一下驱动

#6


呵呵,谢谢 tjianliang(乡关何处)的回复!
哎! 郁闷呢。 在IBM网站上找DB2 JDBC驱动找半天也没找到。 DB2的升级包下半天也下不下来。IBM搞的东东怎么老是那么繁琐,打击编程的积极性。
我用一个java测试类,通过type2连DB2数据库中插入BLOB大对象是可以插入的!(30多M的都可以插入!)通过type4连DB2数据库中插入BLOB大对象抛出encode not support的异常。有人发帖子说是设置正确的环境变量:export LANG=en_US.iso88591 和db2字符集:db2set DB2CODEPAGE=1386 呵呵,我还没有试。。。

应用程序中用的in = new ByteArrayInputStream(attachment.getAttachContent());
              ps.setBinaryStream(9, in, in.available());
来插入的blob大对象。
小于100k的文件可以正常插入数据库。但是大于100k的就不能插入:
在weblogic+db2 jdbc type2 抛出异常: [IBM][CLI Driver] CLI0111E  数值超出范围。 SQLSTATE=22003
在webshpere+db2 jdbc type4抛出异常: com.ibm.db2.jcc.b.SqlException: BigDecimal conversion exception [ibm][db2][jcc][converters] Overflow occurred during numeric data type conversion of "142764".. See attached Throwable. 
请各位大侠帮忙!

#7


真惭愧啊! 呵呵,sorry! IBM。  我把数据类型搞错了! 
我在PowerDesigner 中把附件表的上传文件大小字段设置为了NUMERIC类型。
执行sql脚本后,在DB2 数据库中成为了:DECIMAL类型, 而该类型的最大值不超过100000。
插入大对象的时候,当然会抛出异常!
真不好意思!用DB2时间短, 基本功太差,心浮气躁。。。 测试的功底不够。。。。
谢谢各位的热心帮助!

#8


不好意思! 试了很久,没弄好给分结帖。 等忙完后好好研究。。。