3

我得到了这个简单的代码来从 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 ..)?

4

2 回答 2

5

很可能与 的组合TYPE_SCROLL_INSENSITIVE不兼容CONCUR_UPDATABLE。根据 JDBC 规范,如果驱动程序ResultSet不能为请求的可滚动性和/或并发模式提供服务,它可以自由降级。另见: http: //jtds.sourceforge.net/resultSets.html

TYPE_SCROLL_INSENSITIVE | 静态光标 | 重 | 仅适用于只读并发(可更新已降级)。SQL Server 会生成一个临时表,因此其他人所做的更改是不可见的。可滚动。

这确认了驱动程序将在指定时降级CONCUR_UPDATABLE

您可能要考虑使用TYPE_SCROLL_SENSITIVE或干脆不将可滚动性与可更新性结合起来。

于 2012-11-12T12:40:14.993 回答
1

jTDS TYPE_SCROLL_INSENSITIVE 只支持只读操作。

将 ResultSet.TYPE_SCROLL_INSENSITIVE 更改为 ResultSet.TYPE_SCROLL_SENSITIVE

http://www.anyang-window.com.cn/jtds-on-the-database-connection-resultset-is-read-only/

于 2012-11-12T12:43:30.103 回答