3

Javadocの例と同じように、ResultSet.TYPE_SCROLL_INSENSITVEを設定したため、スクロール可能である必要があるMSSQLServer2008からレコードセットを取得するためのこの単純なコードを取得しました。

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 に答える