/**
* 标题:有关[SQLServer JDBC Driver]ResultSet can not re-read错误的解决方案
* 作者:银狐999
* fcxiao2000@sina.com http://fcx.javaunion.org:8080
* 申明:转载请著名作者
*/
最近摆弄了一阵子MS SQL Server2000。将原有的基于Oracle和Sybase数据库的系统迁移到MS SQL Server2000,出现的大量的问题。
可能从Sybase迁移过来,要方便的多。从Oracle迁移可能就非常繁琐了,程序需要改动很多(特便与weblogic connection pool结合后)。至于迁移问题,不是本篇的主旨,暂且不说。下面就说说在weblogic7上跑MS SQL Server2000所遇到的问题。
(1)第一个问题,就是驱动问题。
虽然weblogic7自带sql server的jDriver驱动。但是由于其他原因,在weblogic7或后续版本中将不再支持。参考weblogic doc如下:
http://e-docs.bea.com/wls/docs70/mssqlserver4/install_jmsq4.html
weblogic建议采用MS自己的JDBC驱动。但是,后面将向各位谈谈,MS自己的驱动也是不太好用。支持的功能很有限。
(2)第二个问题,就是有关[Microsoft][SQLServer JDBC Driver]ResultSet can not re-read row data for column之类的错误。
具体说明如下及分类解决如下:
(2.1)如果你采用jdbc-odbc驱动。那么只能告诉你,你必须按照查询的顺序去获取顺序的字段。如果打乱顺序,或重复查询同一列,将会获取null或抛出上面的异常。
(2.2)如果你采用weblogic jdriver驱动。那么将不支持jdbc2.0 method。
(2.3)如果你采用MS自己的JDBC驱动。那么在查询语句中不包含blob或clob字段(就是Image和Text类型)的时候,查询是支持re-read方式的,可以非顺序查询。但是一旦包含的blob或clob字段。那么就必须按照顺序查询,且不支持重复查询
===============
上面说到了问题的所在了,那么如何解决呢?建议大家更换驱动,可以获取第三方的MS SQL Server驱动。比如JSQLConnect,JTurbo等等驱动。
目前为了解决ms的re-read问题,我采用了JSQLConnect驱动,效果很好。
(当然,那些不是免费的,不过可以到www.freetds.com上获取一个免费的,不过据说效果不是很好,而且版本偏低,可以尝试一下)