1. 程式人生 > >jdbc statement.executeQuery(sql) 造成記憶體溢位的解決方法

jdbc statement.executeQuery(sql) 造成記憶體溢位的解決方法

如果你要讀取一個超大的表,使用下面的語句有可能會造成記憶體溢位:

Statement statement = conn.createStatement(
                    ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
ResultSet rs = statement.executeQuery(sql);

這是因為如果不設定statement的fetchSize的話,mysql驅動預設會將資料全部載入到記憶體中,所以就會OutOfMemoryError了。

解決的方法有兩種,在執行statement.executeQuery(sql);

新增下面兩行中的一行,即可:

statement.setFetchSize(Integer.MIN_VALUE);
 ((com.mysql.jdbc.Statement)stat).enableStreamingResults();

記憶體溢位不好查,有時候有點莫名其妙了,程式設計愉快!