转至: blogger.org.cn/blog/more.asp
在企业应用中,很少有人用微软的jdbc驱动,这个驱动运行一段时间,没有数据请求时,自动把connection关闭,无论在windows还是linux上。
在一次旧的系统改造中,系统报告了[Microsoft][SQLServer JDBC Driver]ResultSet can not re-read row data for column 10的错误。
为了解决这个问题,开始跟踪程序,就差没有跟踪M$的JDBC源码了,也没有查出原因。只知道在在rs.getString("bkname")的时候,肯定会出现错误。
下面的代码
建表
CREATE TABLE [book] (
[bkid] int NOT NULL,
[bkname] nvarchar(200) COLLATE Chinese_PRC_CI_AS NOT NULL,
[bkintroduction] ntext COLLATE Chinese_PRC_CI_AS,
[format] nvarchar(10) COLLATE Chinese_PRC_CI_AS,
)
ON [PRIMARY]
sql语句
select bkid,bkname,bkintroduction, formatfrom book
java代码
rs.getString("bkid");
rs.getBinaryStream("bkintroduction");
rs.getString("bkname");
这个例子,使用微软的驱动,必然会出错。
如果你跟踪的话,必然是这一行:rs.getString("bkname")抛出错误。
那么,如果你把rs.getString("bkname")和rs.getBinaryStream("bkintroduction");位置互换以下,就可以正常运行。 出现问题的原因,就是微软的驱动,在包含了blob或clob类型的字段,也就是Image和Text类型。
那么就必须按照select顺序查询,且不支持重复查询。
面对这种情况,只有更换驱动了,可以使用jtds,不会存在这种情况。
好像javaunion说过这样的问题,可惜的是,javaunion已经不存在了。
希望大家尽量不要用微软自带的sqlserver的jdbc驱动。
解决的办法,如果采用微软提供的ms sql server jdbc driver,如果查询语句中,不存在image或text类型字段,那么可以按照无序获取,
如果采用微软提供的ms sql server jdbc driver,如果查询语句中,存在image或text类型字段,那么就必须按照顺序读取,
否则就会报告Driver]ResultSet can not re-read row data for column之类的错误,如果无论查询中有没有image或text类型字段,都要不按照顺序获取,或重复获取。那么就必须更换驱动,使用jtds。
分享到:
相关推荐
mysql jdbc 驱动 适用于5.7及以上版本数据库 mysql jdbc 驱动 适用于5.7及以上版本数据库 mysql jdbc 驱动 适用于5.7及以上版本数据库 mysql jdbc 驱动 适用于5.7及以上版本数据库 mysql jdbc 驱动 适用于5.7及以上...
JDBC驱动包JDBC驱动包JDBC驱动包JDBC驱动包JDBC驱动包JDBC驱动包JDBC驱动包
mysql jdbc 驱动 适用于5.6版本及以下数据库 mysql jdbc 驱动 适用于5.6版本及以下数据库 mysql jdbc 驱动 适用于5.6版本及以下数据库 mysql jdbc 驱动 适用于5.6版本及以下数据库 mysql jdbc 驱动 适用于5.6版本及...
Oracle12C 12.2.0.1 JDBC 驱动 Oracle Database 12c Release 2 (12.2.0.1) drivers
TDengine jdbc驱动包
mariadb-java-client-1.1.1 jdbc驱动
hive-jdbc
sql server jdbc 驱动包
sqlserver2005-jdbc驱动、sqlserver2008-jdbc驱动、mysql-jdbc驱动、oracle驱动- 各种jdbc驱动打包集合,适配各种数据库!
达梦数据库JDBC驱动包,在mysql数据库导入达梦的的时候导入工具需要用到
oracle12 jdbc驱动包
~$JDBC与Java数据库程序设计
java连接saphana的jdbc驱动,驱动类:com.sap.db.jdbc.Driver,连接URL:jdbc:sap://${ip}:${port}/${example}?reconnect=true
因为Oracle的JDBC驱动 ojdbc12,ojdbc14 很古老了,是针对JDK1.2以及JDK1.4平台的。很多时候会有各种问题,所以从官网下载了最新的驱动,包括支持JDK1.5的ojdbc5.jar, 以及 支持JDK1.6的ojdbc6.jar驱动包,以及官方demo...
kingbaseV8 jdbc 驱动
sybase 数据库 jdbc 驱动下载 版本:jconn4-7.5.jar
mysql8的jdbc驱动,jdbc.driver=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/test?useSSL=false&useUnicode=true&characterEncoding=UTF8&serverTimezone=GMT jdbc.username=root jdbc.password...
MariaDB-JDBC驱动包,导入详情请见https://blog.csdn.net/qq_40922845/article/details/102762800
Oracle JDBC驱动包