我得到了这个简单的代码来从 MSSQL Server 2008 检索记录集,由于我设置了 ResultSet.TYPE_SCROLL_INSENSITVE,该记录集必须是可滚动的,与 Javadocs 中的示例相同:
String qry = "SELECT * from tblPeople";
SQLConnection sql = new SQLConnection();
Statement stmt = sql.getConnection().createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery(qry);
不幸的是,当我想获得行数时,我仍然得到这个堆栈跟踪rs.last(); int rowCount = rs.getRow();
:
java.sql.SQLException: ResultSet may only be accessed in a forward direction.
at net.sourceforge.jtds.jdbc.JtdsResultSet.checkScrollable(JtdsResultSet.java:304)
at net.sourceforge.jtds.jdbc.JtdsResultSet.last(JtdsResultSet.java:551)
at test.personen.Main.main(Main.java:44)
为什么会这样以及如何修复它(顺便说一句,当我检查 ResultSet 的类型时,我得到 1003..)?
最有可能的组合是TYPE_SCROLL_INSENSITIVE
不兼容CONCUR_UPDATABLE
。根据 JDBC 规范,驱动程序可以自由降级ResultSet
如果它无法满足所请求的可滚动性和/或并发模式。也可以看看:http://jtds.sourceforge.net/resultSets.html http://jtds.sourceforge.net/resultSets.html :
TYPE_SCROLL_INSENSITIVE | 类型滚动不敏感静态光标|重|仅适用于只读并发(可更新已降级)。 SQL Server 会生成临时表,因此其他人所做的更改不可见。可滚动。
这确认了指定时驱动程序将降级CONCUR_UPDATABLE
.
您可能需要考虑使用TYPE_SCROLL_SENSITIVE
或者根本不将可滚动性与可更新性结合起来。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)