我正在尝试在警报中显示SQL错误如果被捕获但不确定我在哪里出错如果我添加错误处理程序什么都没有出现,尽管有一个重复的值条目在一个唯一的列。
var db = openDatabase("demo", "1.0", "demo", 200000);
db.transaction(function(tx) {
tx.executeSql( "CREATE TABLE IF NOT EXISTS test (Slno INTEGER PRIMARY KEY AUTOINCREMENT, column1 TEXT UNIQUE, column2 TEXT UNIQUE, column3 TEXT UNIQUE, column4 TEXT UNIQUE, column5 TEXT UNIQUE)");
});
插入查询:
db.transaction(function(tx) {
tx.executeSql("INSERT INTO test (column1, column2 ,column3, column4,column5) VALUES ('insert1','insert2','insert3','insert4','insert5'),
('insert1','insert2','insert3','insert4','insert5');",errorHandler);
});
错误处理程序:
function errorHandler(transaction, error) {
alert("Error : " + error.message);
}
答案 0 :(得分:1)
我阅读SQLTransaction - JavaScript API Documentation并发现此代码可能有用。
var db = openDatabase("demo", "1.0", "demo", 200000);
db.transaction(function(tx) {
tx.executeSql( "CREATE TABLE IF NOT EXISTS test (Slno INTEGER PRIMARY KEY AUTOINCREMENT, column1 TEXT UNIQUE, column2 TEXT UNIQUE, column3 TEXT UNIQUE, column4 TEXT UNIQUE, column5 TEXT UNIQUE)");
},errorHandler);
db.transaction(function(tx) {
tx.executeSql("INSERT INTO test (column1, column2 ,column3, column4,column5) VALUES ('insert1','insert2','insert3','insert4','insert5'),('insert1','insert2','insert3','insert4','insert5');");
},errorHandler);
function errorHandler(error) {
alert("Error : " + error.message);
}
errorHandler
不应传递给tx.executeSql
,而应传递给db.transaction
error
对象作为errorHandler
的第一个参数传递,而不是第二个参数。此代码适用于我的Google Chrome 45.0.2454.99 m(64位)。
答案 1 :(得分:0)
在传递null
之前,您需要将arguments
的可选callback
和errorHandler
参数传递给executeSql():
tx.executeSql("INSERT INTO ...", null, null, errorHandler);
如Web SQL working note中所指定,SQLTransaction.executeSql()方法具有以下签名:
void executeSql(in DOMString sqlStatement, in optional ObjectArray arguments, in optional SQLStatementCallback callback, in optional SQLStatementErrorCallback errorCallback);
因此,如果您不打算指定arguments
或callback
,则需要传递null
。
这是一个更新的JSFiddle:http://jsfiddle.net/ko7qun42/2/
或者,您可以将errorCallback
传递给transaction()方法:
db.transaction(function(tx) {
//...
}, errorHandler);
但是,您的errorHandler
回调需要稍微修改,因为只会将SQLError传递给回调。
这是一个更新的JSFiddle,显示了这种替代方法:http://jsfiddle.net/ko7qun42/1/