gpt4 book ai didi

java - 在 SQLite 数据库中按数组存储数组

转载 作者:搜寻专家 更新时间:2023-10-30 23:10:30 25 4
gpt4 key购买 nike

在我的 Java 应用程序中,我需要在硬盘上存储一个大表,因为我希望它是持久的。

我的第一次尝试是这样的:(i 和 j 可以上升到 300.000 甚至更多,所以我有一个 300.000^2 的双条目数组,这让我的系统崩溃了。)

stmt.executeUpdate("DROP TABLE IF EXISTS calculations;");
stmt.executeUpdate("CREATE TABLE calculations (factorA, factorB, result);");
double temp = 0;
for (i = 0; i < datasource.size(); i++) {
for (int j = 0; j < datasource.size(); j++) {
if (i != j) {
temp = calc(datasource.get(i),datasource.get(j));
stmt.execute("INSERT INTO calculations (factorA, factorB, result) VALUES ('"+i+"','"+j+"','"+temp+"')");
}
}
}

现在,这执行起来非常慢,可能是因为 SQL 命令是一个字符串等。

我的新猜测是,最好先计算 10.000 个 i 的结果,然后将它们作为一个单元存储到数据库中。

但在我尝试实现之前,有人有更好的主意吗?数据库使用不是强制性的,只是易于访问和快速实现。

最佳答案

尝试在一个 Transaction 中添加每个 n 左右的行(假设失败不是问题,例如如果某些行插入失败,你可以继续而不滚动回到以前的)。声明一个计数器取代循环:

int n = 1000; //commit every 1000 rows, or you can tweak
int count = 0; //counter for rows inserted

在外循环中开始事务。增加并检查内循环中的计数器

if(count % n == 0){
//commit the transaction
}
count++

(不要忘记在外循环中再次重新打开Transaction)

http://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html

关于java - 在 SQLite 数据库中按数组存储数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21076905/

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