我正在从磁盘加载一个文件,它包含9,00,000条记录。我正在逐行读取文件并处理它然后设置为java对象。对于每条记录,下面的代码正在执行(它将执行一个插入,一个更新和一个选择查询)
try
{
if(conn != null)
{
selectPrepareStatement.setString(1, someValue);
selectPrepareStatement.setMaxRows(1);
rs = selectPrepareStatement.executeQuery();
String secondaryCIF = null;
insertPreparedStatement.setInt(1, vo.getRecordType());
insertPreparedStatement.setString(2, vo.getRefType());
insertPreparedStatement.setString(3, vo.getCustOwnershipType());
insertPreparedStatement.setString(4, vo.getTin());
insertPreparedStatement.setString(5, vo.getCifId());
insertPreparedStatement.setString(6, vo.getPrimaryOrSecondary());
Statement statement = conn.createStatement();
if(vo.getPrimaryOrSecondary().equals("P"))
{
updatedCount = statement.executeUpdate("update table_name set col1='"+value1+"' where col2= '"+value2)+"'");
updatedCount = statement.executeUpdate();
}else if(vo.getPrimaryOrSecondary().equals("S"))
{
updatedCount = statement.executeUpdate("update table_name set col3='"+value3+"' where CUST_CIN = '"+value1+"'");
updatedCount = statement.executeUpdate();
}
insertPreparedStatement.setInt(8, updatedCount);
insertPreparedStatement.setString(9, null);
insertPreparedStatement.executeUpdate();
}
if(rs != null)
{
rs.close();
}
}catch(Exception e)
{
}
如果我将堆空间增加到1GB,那么在3,00,000条记录之后会收到错误。有人可以帮我解决这个问题吗?
所有预备声明和变量都声明为全局和静态。
答案 0 :(得分:2)
通常,您必须每N行刷新一次数据库会话,因为数据库执行的所有数据都将存储在您的内存中,直到您刷新或提交它为止。
但由于非常糟糕的问题(省略了最重要的部分代码),我不能给你更多建议。