mssql2000升级到mssql2008出现 存储过程无法返回记录集

使用现有的jdbc1.2 for 2005做数据库驱动时,发生存储过程无法返回记录集.在详细的查询资料后,并没有发现合适的解决方案.

但是使用了Sprinta7.40 的最新数据库驱动,发现可以正常的支持mssql2005和mssql2008,但是问题是Sprinta驱动是要钱的,不然就只有2个数据连接池给你用。

建议是使用其它的数据库驱动程序,比如hibernate的,不过我还没有测试。强烈bs微软自己的数据库驱动。

囧。。。。。。。。。。。

再次做了一下,发现一个问题是ResultSet may only be accessed in a forward direction.虽然设置了 ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY参数,还是会出现 ResultSet may only be accessed in a forward direction这个问题,做专门的mssql2008跟踪以后,发现并不是过程的问题。
不过里面的错误信息提醒了我,找到答案“无法在给定的语句中打开服务器游标。请使用默认结果集或客户端游标。”

cstmt = conn.prepareCall("{call cr_OrderByTrade(?,?,?,?,?)}",ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY );
            cstmt.setInt(1, action);
            cstmt.setString(2, comCode);
            cstmt.setString(3, depCode);
            cstmt.setString(4, from);
            cstmt.setString(5, to);
            rs = cstmt.executeQuery();
            rs.last();

 改成

cstmt = conn.prepareCall("{call cr_OrderByTrade(?,?,?,?,?)}",ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY );
            cstmt.setInt(1, action);
            cstmt.setString(2, comCode);
            cstmt.setString(3, depCode);
            cstmt.setString(4, from);
            cstmt.setString(5, to);
            cstmt.executeQuery();
            rs = cstmt.getResultSet();
            //rs = cstmt.executeQuery();
            rs.last();

 改成以下后,数据库查询成功。不过,数据库驱动没有用微软的sqljdbc.jar。而是用的jtds.jar驱动。不管怎么样,成功了。。。。

你可能感兴趣的:(Hibernate)