Javascript Web SQL插入导致崩溃

Javascript Web SQL插入导致崩溃,javascript,android,cordova,web-sql,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 Wal

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

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上,整个页面都会断开,我会得到“啊,抓拍”。在Android上,什么都不会发生。但是,当我刷新页面时,似乎钱包已成功添加

我在互联网上到处寻找解决这个问题的方法,这让我抓狂。我哪里做错了

谢谢

编辑:

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

编辑:

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

尝试

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

您将NULL作为主键传递,该主键已处于自动递增状态

您没有插入正确数量的值。您希望像在第一次插入中一样提供字段列表<代码>(名称、余额、目标、交易)值

我也尝试过。这是原始代码:_db.transaction(function(tx){tx.executeSql('INSERT INTO wallet(name,balance,target,transactions))value(?,0,0,NULL);[name],function(tx,res){cb(res);});只需检查您正在传递的参数。您正在传递5个参数(NULL,“Testing”,0,0,NULL),而方案只有4个。您是否有异常信息的堆栈跟踪?您确定可以使用“prepared statement”而不是可靠的SQL查询?尝试使用不带“?”(准备好的语句)的确定SQL查询堆栈跟踪只显示匿名函数。我的原始代码使用了一个预先准备好的语句;并将其分配给该按钮的onclick()。因为您说过项目是在崩溃后成功添加的,所以SQL查询似乎没有错误