JavaScript在数据插入时显示Sq lite Error

时间:2015-09-26 12:39:20

标签: javascript jquery

我正在尝试在警报中显示SQL错误如果被捕获但不确定我在哪里出错如果我添加错误处理程序什么都没有出现,尽管有一个重复的值条目在一个唯一的列。

JS Fiddle Demo

 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);
}

2 个答案:

答案 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的可选callbackerrorHandler参数传递给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);

因此,如果您不打算指定argumentscallback,则需要传递null

这是一个更新的JSFiddle:http://jsfiddle.net/ko7qun42/2/

或者,您可以将errorCallback传递给transaction()方法:

db.transaction(function(tx) {
  //...
}, errorHandler);

但是,您的errorHandler回调需要稍微修改,因为只会将SQLError传递给回调。

这是一个更新的JSFiddle,显示了这种替代方法:http://jsfiddle.net/ko7qun42/1/