Web SQL INSERT INTO导致崩溃

时间:2016-06-10 13:15:20

标签: javascript android cordova web-sql

我创建了一个数据库,一个表,并在一个方法中预先填充了初始值:

function Setup(cb)
{
    _db = openDatabase("MoneyMan", "1.0", "Money Manager", 8 * 1024 * 1024);

    // Wallets
    _db.transaction(function(tx) {

        // Create wallet table
        tx.executeSql('CREATE TABLE Wallets (id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR, balance FLOAT, target FLOAT, transactions INTEGER)', [],
            function(tx, res) {

                // Add initial wallets
                tx.executeSql('INSERT INTO Wallets (name, balance, target, transactions) VALUES ("Main", 0, 0, NULL)');
                tx.executeSql('INSERT INTO Wallets (name, balance, target, transactions) VALUES ("Bills", 0, 0, NULL)');
                tx.executeSql('INSERT INTO Wallets (name, balance, target, transactions) VALUES ("Savings", 0, 0, NULL)');
                tx.executeSql('INSERT INTO Wallets (name, balance, target, transactions) VALUES ("Business", 0, 0, NULL)');

            });


        cb();
    });
}

这完全没问题。

我有一个按钮可以将新钱包添加到表中,但它不起作用。即使这个代码破坏了:

_db.transaction(function(tx) {
        tx.executeSql('INSERT INTO Wallets VALUES (NULL, "Testing", 0, 0, NULL)');
});

编辑:我也尝试过列出这些字段:

_db.transaction(function(tx) {
        tx.executeSql('INSERT INTO Wallets (name, balance, target, transactions) VALUES (?, 0, 0, NULL)', [name]);
    });

在Chrome上,整个页面中断,我得到“Aww,Snap”。在Android上没有任何事情发生。但是,当我刷新页面时,钱包似乎已成功添加。

我在互联网上搜索了一个解决方案,这让我很生气。我哪里错了?

由于

修改

当我在executeSQL()上设置断点时,它运行正常。只有当它试图让事务回调离开它时才会发生。

修改

我应该注意这是从另一种语言编译的Javascript。可以从第二种方法访问变量“_db”。如果我在尝试添加新钱包时执行SELECT语句,则没有问题。只有INSERT INTO中断。

2 个答案:

答案 0 :(得分:0)

尝试

tx.executeSql('INSERT INTO Wallets (name, balance, target, transactions) VALUES ("Testing", 0, 0, NULL)');

您将NULL作为已经在自动增量

的主键传递

答案 1 :(得分:0)

您没有插入正确数量的值。您希望像在第一次插入时一样提供字段列表。 (name, balance, target, transactions) VALUES