我需要将大量数据插入 SQLite 数据库。我为此使用交易。不幸的是,没有这些交易,我不可能填满表格。我的代码是这样工作的:
database.transaction(function(transaction) {
for(var i = 0; i < 300; i++) {
sql = "INSERT INTO test (fielda, fieldb, fieldc) VALUES (111, 1, 23.53)";
transaction.executeSql(sql, function(result) {
});
}
}, function() {
database.transaction(function(transaction) {
for(var i = 0; i < 300; i++) {
sql = "INSERT INTO test (fielda, fieldb, fieldc) VALUES (111, 1, 23.53)";
transaction.executeSql(sql, function(result) {
});
}
}, function() {
.................and so on..............
alert("done");
}, function(error) {
alert("error");
});
}, function(error) {
alert("error");
});
它在我的 iPad 2 上运行起来既快速又简单,但在我的 Galaxy Tab 3 上崩溃的速度也一样快。似乎连续事务的数量无关紧要,但它们必须完全执行的插入数量。总是在第 900 个条目附近崩溃。这意味着它在循环 i < 300 的第 4 个事务中崩溃,但需要 10 个循环 i < 100 的事务才能崩溃。
我什至尝试通过单击一个按钮调用 3 个事务,然后等待十多分钟并通过单击另一个按钮调用第 4 个事务。它仍然崩溃。
还发生了其他奇怪的事情:当我在调用事务之前的某个时间调用“DELETE FROM test”时,应用程序会抛出错误消息“无法执行此操作,因为没有当前事务。” 就在它崩溃之前,然后在交易期间。但也只有那时。
我已经玩过所有的 PRAGMA,比如 page_size、journal_mode 等。它不会改变任何事情。