【发布时间】:2016-06-10 13:15:20
【问题描述】:
我已经创建了一个数据库、一个表,并用一种方法预先填充了初始值:
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 中断。
【问题讨论】:
-
只是一个想法,可能有用,尝试把 _db.transaction(...);在函数内部并将其分配给该按钮的 onclick()。因为你说在 crash 后添加 item 成功,所以 SQL 查询似乎没有错误
标签: javascript android cordova web-sql