0

成長し続ける ResultSet をメモリにロードしてきましたが、今までは特に問題はありませんでした。現在は大きすぎて合理的に作業できません。スクロール可能な結果セットの作成を検討しましたが、実装に問題があります。これが私が試したことです:

    Statement stmt = con.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY);
    stmt.setFetchSize(Integer.MIN_VALUE);
    try {

        if (stmt.execute("SELECT text, value FROM " + db)) {
            rs = stmt.getResultSet();
        } else {
            System.err.println("select failed");
        }

欠落しているステートメントの他のパラメーターはありますか? または、別の場所に設定する必要がある別のオプションがありますか?

編集:

問題はストリーム自体ではなく、RS の更新方法にあったことがわかりました。RS がストリーミング中の場合、RS を更新できませんか? コンソールは次のように表示されます。

SQLException: Operation not supported for streaming result sets
SQLState: S1009
VendorError: 0

処理後に DB を更新するために使用しているコードは次のとおりです。

rs.getDouble("value");
if (rs.wasNull()) {
StringValue analysis = new StringValue(dict);
int id = rs.getRow();
String entry = rs.getString("text");
double val = analysis.analyzeString(entry);
pst.setDouble(1, val);
st.setInt(2, id);
System.out.println(id+": " + val + " : " + rs.getString(5));
pst.executeUpdate();

準備されたステートメントは次のように構成されています。

pst = conn.prepareStatement("UPDATE "+ db +" SET value=? WHERE id=?");

かなり単純な StringValue メソッドの analyzeString は、基本的に入力文字列のセンチメント分析です。

4

3 に答える 3

1

行を制限します:

"select text, value from " + db  + " limit 100"

また

"select  text,value from " + db  + " where text like 'A%'"
于 2012-08-16T01:32:02.310 に答える
0

-Xmx、-XmsなどのJVMメモリを拡張するために、JVMのいくつかのパラメータを追加することをお勧めします。詳細については、 JVMメモリ構造を参照してください。

于 2012-08-16T01:29:02.473 に答える
0

ステートメント stmt = con.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY);

Statement stmt = con.createStatement(java.sql.ResultSet.TYPE_SCROLL_SENSITIVE,java.sql.ResultSet.CONCUR_UPDATABLE); を使用する必要があります。

于 2012-08-16T02:28:56.370 に答える