使用JDBC将数百万条记录插入表中

问题描述

过程如下所示,读取固定长度的文件,对记录进行一些数据质量检查,创建Java对象,然后使用JDBC将对象写入表中。问题是,它运行非常缓慢。我尝试过使用大插入,通过使用saveAll方法传入java对象的ArrayList,但是它并没有节省我希望的时间。最有效的方法是什么?

try (BufferedReader reader = new BufferedReader(new FileReader(inputFile))) {
            String line = reader.readLine();
            int count = 0;
            while (line != null) {
                if (line.startsWith("5")) {
                    if (dataQuality(line)) {
                        Subscription subscription = buildSubscriptionObject(line);
                        insertList.add(subscription);
                        count++;
                        if (count == 1000) {
                            oracleService.loadToTableSubscription(insertList);
                            count = 0;
                            insertList.clear();
                        }
                    } else {
                        logger.info("Data quality check FAILED for record: " + line);
                        oracleService.revertInserts("PSTV_PAY_SRVC_SBSRB_STG",procDt.toString());
                        System.exit(111);
                    }
                }
                line = reader.readLine();
            }
            logger.info("Leftover record count is " + insertList.size());
            oracleService.loadToTableSubscription(insertList);
} catch (IOException e) {
    e.printStackTrace();
}

我的oracleService对象是一个@Service,它使用我的repo实现来调用saveAll方法。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...