使用现有的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驱动。不管怎么样,成功了。。。。