gpt4 book ai didi

java - 解析大型文本文件并将数据移动到数据库中

转载 作者:行者123 更新时间:2023-12-02 05:01:33 29 4
gpt4 key购买 nike

我有一个相当大的文本文件,大约 1.5Gb。我必须逐行解析文件并将这些行插入到 Derby 数据库中。我阅读了很多有关性能以及如何解析文件等的论坛。我的问题是,我对所有进程进行了基准测试,读取和解析一行需要 1 毫秒,但我必须确保该行我我试图插入不存在,如果存在的话我必须对其进行一些更新。这部分过程大约需要 9 毫秒。

总共 10 毫秒,对于文件包含大约 1000 万行而言,这确实是一个很大的时间。

我正在使用 PreparedStatement 进行查询。

有什么方法可以加快代码的查询部分吗?

最佳答案

您是否关闭了自动提交?

dbConnection.setAutoCommit(false);

使用批量插入而不是像这里一样逐一插入:

    Connection dbConnection = null;
PreparedStatement preparedStatement = null;

String insertTableSQL = "INSERT INTO DBUSER"
+ "(USER_ID, USERNAME, CREATED_BY, CREATED_DATE) VALUES"
+ "(?,?,?,?)";

try {
dbConnection = getDBConnection();
preparedStatement = dbConnection.prepareStatement(insertTableSQL);

dbConnection.setAutoCommit(false);

preparedStatement.setInt(1, 101);
preparedStatement.setString(2, "mkyong101");
preparedStatement.setString(3, "system");
preparedStatement.setTimestamp(4, getCurrentTimeStamp());
preparedStatement.addBatch();

preparedStatement.setInt(1, 102);
preparedStatement.setString(2, "mkyong102");
preparedStatement.setString(3, "system");
preparedStatement.setTimestamp(4, getCurrentTimeStamp());
preparedStatement.addBatch();

preparedStatement.setInt(1, 103);
preparedStatement.setString(2, "mkyong103");
preparedStatement.setString(3, "system");
preparedStatement.setTimestamp(4, getCurrentTimeStamp());
preparedStatement.addBatch();

preparedStatement.executeBatch();

dbConnection.commit();

System.out.println("Record is inserted into DBUSER table!");

} catch (SQLException e) {

System.out.println(e.getMessage());
dbConnection.rollback();

} finally {

if (preparedStatement != null) {
preparedStatement.close();
}

if (dbConnection != null) {
dbConnection.close();
}

}

看看:https://builds.apache.org/job/Derby-docs/lastSuccessfulBuild/artifact/trunk/out/tuning/tuningderby.pdf

关于java - 解析大型文本文件并将数据移动到数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28237335/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com