我创建了一个数据库,一个表,并在一个方法中预先填充了初始值:
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中断。
答案 0 :(得分:0)
尝试
tx.executeSql('INSERT INTO Wallets (name, balance, target, transactions) VALUES ("Testing", 0, 0, NULL)');
您将NULL作为已经在自动增量
的主键传递答案 1 :(得分:0)
您没有插入正确数量的值。您希望像在第一次插入时一样提供字段列表。 (name, balance, target, transactions) VALUES