我一直在將不斷增長並且不斷增長的ResultSet加載到內存中,直到現在它還沒有成爲問題。現在太大而不能合理使用。我研究過創建可滾動的結果集,但是我在實現它時遇到了一些麻煩。以下是我已經試過:Java ResultSet內存不足,無法使用PreparedStatement更新
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如果流媒體?控制檯突然離開下列內容:
SQLException: Operation not supported for streaming result sets
SQLState: S1009
VendorError: 0
下面是我使用來更新數據庫已得到處理後的代碼:
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本質上是對輸入字符串的情感分析。
您的問題很可能與ResultSet無關,並且與您如何處理從ResultSet讀取的數據有關。 – jtahlborn 2012-08-16 01:25:44
我同意@jtahlborn。也許你可以發佈一個[SSCCE](http://sscce.org/)版本的代碼供我們查看。 – Sujay 2012-08-16 01:28:05
@Sujay @jthalbom我會的。我認爲我解決了獲取流的問題,現在我得到了一個'SQLException:不支持流式結果集的操作' – 2012-08-16 01:31:47