2

我需要将大量数据插入 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 等。它不会改变任何事情。

4

0 回答 0