这个问题可能已经回答了,但我找不到一个好的,我正在尝试从一个数据库中读取数据并执行一些操作,我的源数据库非常大,比如1亿条记录或100 if的表,所以我尝试了下面的方法一次提取几条记录,这样我就不会得到内存异常,但我得到的只是我设置为setMaxRows()的最大记录数,例如,如果我设置为100,我只得到100,我在mysql数据库上测试这个方法。
下面是我的java代码:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBCTest {
public static void main(String[] args) throws SQLException {
Connection conn=null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "root", "root");
conn.setAutoCommit(false);
Statement stmt = conn.createStatement();
stmt.setMaxRows(100);
ResultSet rs = stmt.executeQuery("select * from mydatabase.posthistory");
int i=0;
for (;;) {
System.out.println("Reading the set from: "+i);
while (rs.next()) {
i++;
System.out.println(i);
}
if ((stmt.getMoreResults() == false) && (stmt.getUpdateCount() == -1)) {
System.out.println("End of reading.");
break;
}
}
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
} finally {
conn.close();
}
}
}有人能说出我做错了什么吗?任何帮助或建议都是很棒的。我使用的是mysql jsbc驱动程序版本5.1.22。如果我正常运行它,那么java试图将整个数据放入ram中,这会抛出错误,
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space发布于 2018-06-26 21:32:19
特别是Mysql数据库的使用
stmt = connection.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY,
java.sql.ResultSet.CONCUR_READ_ONLY);
stmt.setFetchSize(Integer.MIN_VALUE);对于其他数据库
stmt.setFetchSize(1000);这不会将整个数据库提取到ResultSet对象中。
https://stackoverflow.com/questions/51031216
复制相似问题