首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >通过jdbc插入记录批次时内存不足

通过jdbc插入记录批次时内存不足
EN

Stack Overflow用户
提问于 2018-06-01 17:07:30
回答 2查看 1.2K关注 0票数 1

我想将originDB(sqlite3)中的一个表(1000万条记录)复制到另一个名为targetDB的数据库中。

我的方法的过程是:从原始表中读取数据,生成一个ResultSet,然后为每条记录生成对应的insert sql,当记录数达到10000条时,执行commit进行批量插入。

代码如下:

代码语言:javascript
复制
public void transfer() throws IOException, SQLException {
    targetDBOperate.setCommit(false);//batch insert
    int count = 0;
    String[] cols = parser(propertyPath);//get fields of data table
    String query = "select * from " + originTable;
    ResultSet rs = originDBOperate.executeQuery(query);//get origin table
    String base = "insert into " + targetTable;
    while(rs.next()) {
        count++;
        String insertSql = buildInsertSql(base,rs,cols);//corresponding insert sql
        targetDBOperate.executeSql(insertSql);
        if(count%10000==0) {
            targetDBOperate.commit();// batch insert
        }
    }
    targetDBOperate.closeConnection();
}

下图是内存使用的趋势,纵轴表示内存使用情况

正如我们可以说的那样,它会越来越大,直到内存耗尽。stackoverflow有一些相关的问题,比如Out of memory when inserting records in SQLite, FireDac, Delphi ,但是我没有解决我的问题,因为我们使用了不同的实现方法。

我的假设是,当记录的数量还没有达到10000条时,这些对应的insert sql将被缓存在内存中,并且在默认情况下执行commit时它们没有被删除。每一条建议都会被感谢的。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50639858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档