gpt4 book ai didi

java - 使用 UCanAccess 从大文本文件插入数据非常慢

转载 作者:太空宇宙 更新时间:2023-11-04 12:35:00 25 4
gpt4 key购买 nike

我正在尝试读取每个文件超过 10.000 行的文本文件 .txt,将它们拆分并使用 Java 和 UCanAccess 将数据插入 Access 数据库中。问题是它每次都会变得越来越慢(随着数据库变得越来越大)。

现在,在读取 7 个文本文件并将其插入数据库后,项目需要花费 20 多分钟才能读取另一个文件。

我尝试只进行读取,它工作正常,所以问题是实际插入数据库。

注意:这是我第一次使用 UCanAccess 与 Java,因为我发现 JDBC-ODBC 桥不再可用。任何有关替代解决方案的建议也将不胜感激。

最佳答案

如果您当前的任务只是将文本文件中的大量数据直接导入数据库,并且不需要任何复杂的 SQL 操作,那么您可以考虑直接使用 Jackcess API。例如,要导入 CSV 文件,您可以执行以下操作:

String csvFileSpec = "C:/Users/Gord/Desktop/BookData.csv";
String dbFileSpec = "C:/Users/Public/JackcessTest.accdb";
String tableName = "Book";

try (Database db = new DatabaseBuilder()
.setFile(new File(dbFileSpec))
.setAutoSync(false)
.open()) {

new ImportUtil.Builder(db, tableName)
.setDelimiter(",")
.setUseExistingTable(true)
.setHeader(false)
.importFile(new File(csvFileSpec));

// this is a try-with-resources block,
// so db.close() happens automatically
}

或者,如果您需要手动解析每一行输入,插入一行,并检索新行的自动编号值,那么代码将更像这样:

String dbFileSpec = "C:/Users/Public/JackcessTest.accdb";
String tableName = "Book";
try (Database db = new DatabaseBuilder()
.setFile(new File(dbFileSpec))
.setAutoSync(false)
.open()) {

// sample data (e.g., from parsing of an input line)
String title = "So, Anyway";
String author = "Cleese, John";

Table tbl = db.getTable(tableName);
Object[] rowData = tbl.addRow(Column.AUTO_NUMBER, title, author);
int newId = (int)rowData[0]; // retrieve generated AutoNumber
System.out.printf("row inserted with ID = %d%n", newId);

// this is a try-with-resources block,
// so db.close() happens automatically
}

要根据主键更新现有行,代码为

Table tbl = db.getTable(tableName);
Row row = CursorBuilder.findRowByPrimaryKey(tbl, 3); // i.e., ID = 3
if (row != null) {
// Note: column names are case-sensitive
row.put("Title", "The New Title For This Book");
tbl.updateRow(row);
}

请注意,为了获得最大速度,我在打开数据库时使用了 .setAutoSync(false),但请记住,如果应用程序在执行更新时异常终止,禁用 AutoSync 确实会增加 Access 数据库文件处于损坏(并且可能无法使用)状态的可能性。

关于java - 使用 UCanAccess 从大文本文件插入数据非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37420474/

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