你这个好像不是ejb的错误,是你用jdbc有问题,ResultSet中字段是不能重复读取的。

解决方案 »

  1.   

    我知道这是JDBC Driver For SQL Server引起的。但是,我所有的步骤都是JB默认的创建的CMP,有不能像BMP一样自己写SQL语句,应该怎样避免这个问题呢?
      

  2.   

    /**
    * 标题:有关[SQLServer JDBC Driver]ResultSet can not re-read错误的解决方案
    * 作者:银狐999
    [email protected] 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上获取一个免费的,不过据说效果不是很好,而且版本偏低,可以尝试一下)
      

  3.   

    谢谢你说的JSQLConnect好难找啊,哪里有下载?
      

  4.   

    JSQLConnect.jar
    给分我给你发一个去 :)