`
曾经地迷茫
  • 浏览: 8325 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

SQL SERVER处理BLOB字段 BUG

阅读更多
读取SQL Server 2000 中二进制文件时抛出:
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]ResultSet can not re-read row data for column 1.


-------------------------------------------------------------------
google一下发现原因,是微软jdbc驱动包的一个BUG,
Microsoft support站点:http://support.microsoft.com/kb/824106说明如下:
(1)如果采用jdbc-odbc驱动,那么就必须按照查询顺序来一次读取(不论有没有image或text类型)

(2)如果采用微软提供的ms sql server jdbc driver,如果查询语句中,不存在image或text类型字段,那么可以按照无序获取

(3)如果采用微软提供的ms sql server jdbc driver,如果查询语句中,存在image或text类型字段,那么就必须按照顺序读取,否则就会报告Driver]ResultSet can not re-read row data for column之类的错误

(4)如果想不查询语句中有没有image或text类型字段,都可以不按照顺序获取,或重复获取。
---------------------------------------------------------------------
提供两种解决方案:
1>Microsoft给出的方案是不能从右往左也不能连续读2次。没办法自己改代码,严格从左向右读。
2>使用第三方驱动jTDS取代微软的SQLServer2000的JDBC驱动。
   要使用jTDS驱动,配置要做一些变动:

数据库URL:jdbc:jtds:sqlserver://localhost:1433;DatabaseName=XXX

驱动类:net.sourceforge.jtds.jdbc.Driver

其在sourceforge上的介绍中写到:

jTDS is an open source 100% pure Java (type 4) JDBC 3.0 driver for Microsoft SQL Server (6.5, 7, 2000 and 2005) and Sybase (10, 11, 12, 15). jTDS is based on FreeTDS and is currently the fastest production-ready JDBC driver for SQL Server and Sybase. jTDS is 100% JDBC 3.0 compatible, supporting forward-only and scrollable/updateable ResultSets, concurrent (completely independent) Statements and implementing all the DatabaseMetaData and ResultSetMetaData methods.

目前最新版本是jtds - 1.2.2

项目页:[url]http://sourceforge.net/projects/jtds/ [/url]

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics