我在资产文件夹中有一个包含超过10000行数据的CSV文件。我想在创建数据库时将此数据插入到SQLite数据库中。我不能包含数据库,因为它是一个非常通用的应用程序,而且模型需要CSV文件。我不想读取所有10000行数据并将其从内存中插入一段。如何有效地完成任务?
答案 0 :(得分:6)
阅读完毕后,只需立即插入 即可。所以,只是不要将行存储在内存中的某些arraylist中。
E.g。
while ((line = reader.readLine()) != null) {
insert(line);
}
您可能希望在单个事务中执行此操作,以便在中途失败时可以回滚。在JDBC方面,您可能需要考虑PreparedStatement#addBatch()
/ #executeBatch()
来批量执行插入。可以在this answer中找到一个示例。
更新:作为一种完全不同但更有效的替代方案,您也可以将Java留在故事之外并使用CSV import facility provided by SQLite。
答案 1 :(得分:3)
在这种情况下最简单和最有效的方法是从文件中一次读取20-30-50行(或者可能是100 ?!)行并插入数据库,但是您还需要运行一些测试才能看到您可以在1中读取的最佳行数是多少,然后执行: - )
答案 2 :(得分:1)
IMPORT filename tablename
(来自http://old.nabble.com/How-can-I-load-big-file-into-a-sqlite-database--td19202500.html - 类似于mysql中的LOAD DATA)。
其他: 禁用自动提交,自动刷新;读20行,提交,刷新。