Microsoft JDBC "ResultSet Can Not Re-Read Row Data" Error解决办法

http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=123&threadID=27318&tstart=0
先k一下M$
使用MS SQL Server 2000 SP3a做数据库服务器时,用Microsoft提供的JDBC驱动(2.2.0040),在查询时遇到一个SQLException:java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]ResultSet can not re-read row data for column #.
查询语句和JDBC代码都没有问题,怀疑是Microsoft驱动的BUG,google一下果然在Microsoft support站点发现了问题:http://support.microsoft.com/kb/824106
原因是如果该表存在TEXT, NTEXT, IMAGE等大型字段,对于ResultSet的字段读取必须按照从左向右读,如果你用:
int a = rs.getInt(2);
int b = rs.getInt(1);
则报错。
Microsoft给出的方案是不能从右往左也不能连续读2次。没办法自己改代码,严格从左向右读,结果就没有问题了。

后来用sql server 2000 sp4 + ms jdbc driver sp3测试依然有这个BUG估计Microsoft故意不肯解决这种BUG。
org.jkiss.dbeaver.model.exec.DBCException: SQL 错误 [IX000]: Blob not found at org.jkiss.dbeaver.model.impl.jdbc.data.handlers.JDBCAbstractValueHandler.fetchValueObject(JDBCAbstractValueHandler.java:55) at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchRow(ResultSetDataReceiver.java:125) at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:204) at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:118) at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:171) at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:116) at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:4796) at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:105) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) Caused by: java.sql.SQLException: Blob not found at com.informix.util.IfxErrMsg.buildExceptionWithMessage(IfxErrMsg.java:421) at com.informix.util.IfxErrMsg.buildException(IfxErrMsg.java:396) at com.informix.util.IfxErrMsg.getSQLException(IfxErrMsg.java:378) at com.informix.jdbc.IfxResultSet.blobCheck(IfxResultSet.java:1047) at com.informix.jdbc.IfxResultSet.getValue(IfxResultSet.java:530) at com.informix.jdbc.IfxResultSet.getValue(IfxResultSet.java:476) at com.informix.jdbc.IfxResultSet.getObject(IfxResultSet.java:910) at com.informix.jdbc.IfxResultSet.getObject(IfxResultSet.java:574) at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getObject(JDBCResultSetImpl.java:627) at org.jkiss.dbeaver.model.impl.jdbc.data.handlers.JDBCStringValueHandler.fetchColumnValue(JDBCStringValueHandler.java:52) at org.jkiss.dbeaver.model.impl.jdbc.data.handlers.JDBCAbstractValueHandler.fetchValueObject(JDBCAbstractValueHandler.java:49) ... 8 more Caused by: java.sql.SQLException: System or internal error at com.informix.util.IfxErrMsg.buildExceptionWithMessage(IfxErrMsg.java:421) at com.informix.util.IfxErrMsg.buildException(IfxErrMsg.java:396) at com.informix.util.IfxErrMsg.getSQLException(IfxErrMsg.java:459) at com.informix.jdbc.IfxTmpFile.<init>(IfxTmpFile.java:51) at com.informix.jdbc.IfxSqli.executeFetchBlob(IfxSqli.java:4270) at com.informix.jdbc.IfxResultSet.blobCheck(IfxResultSet.java:1043) ... 15 more Caused by: java.security.PrivilegedActionException: java.io.IOException: 拒绝访问。 at java.base/java.security.AccessController.doPrivileged(Native Method) at com.informix.jdbc.IfxTmpFile.<init>(IfxTmpFile.java:42) ... 17 more Caused by: java.io.IOException: 拒绝访问。 at java.base/java.io.WinNTFileSystem.createFileExclusively(Native Method) at java.base/java.io.File.createTempFile(Unknown Source) at com.informix.jdbc.IfxTmpFile$1.run(IfxTmpFile.java:44) at com.informix.jdbc.IfxTmpFile$1.run(IfxTmpFile.java:42) ... 19 more
最新发布
12-26
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值