我注意到以下行为。
我有一个大约3MB的文件,包含几千行。 在我拆分的行中创建预备语句(大约250 000条语句)。
我的工作是:
preparedStatement
addBatch
do for every 200 rows {
executeBatch
clearBatch().
}
最后
commit()
内存使用量将增加到70mb左右,不会出现内存不足错误。是否有可能降低内存使用率?并且具有事务行为(如果一个失败则全部失败。)。
通过使用executeBatch
和clearBatch
进行提交,我能够降低内存...但这会导致部分插入总计。
答案 0 :(得分:2)
您可以将所有行插入到具有相同结构的临时表中,如果一切正常。让数据库使用:insert into target (select * from temp)
将它们插入目标表。
如果导入临时表失败,则表示您没有更改目标表中的任何内容。
编辑:修正语法
答案 1 :(得分:-1)
您还可以使用JDBC 2.0“批处理”功能。
connection.setAutoCommit(false)
statement.addBatch(sql_text_here)
statement.executeBatch()
connection.commit()
connection.rollback()
有关回滚的异常处理的更多信息...这是一个典型的回滚异常处理程序:
catch( BatchUpdateException bue )
{
bError = true;
aiupdateCounts = bue.getUpdateCounts();
SQLException SQLe = bue;
while( SQLe != null)
{
// do exception stuff
SQLe = SQLe.getNextException();
}
} // end BatchUpdateException catch
catch( SQLException SQLe )
{
...
} // end SQLException catch
在此处阅读:http://java.sun.com/developer/onlineTraining/Database/JDBC20Intro/JDBC20.html#JDBC2015