2015-09-26 2 views
0

Я пытаюсь показать ошибку SQL в предупреждении, если поймал, но не уверен, где я ошибаюсь, если я добавлю обработчик ошибок, ничего не появляется, хотя есть дублирующаяся запись значение в уникальном столбце.JavaScript show Sq lite Ошибка при вводе данных

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

Handler Ошибка:

function errorHandler(transaction, error) { 
    alert("Error : " + error.message); 
} 
+0

ли ваш браузер поддержки SQL? Мой Firefox 41.0 сказал, что в демонстрационной версии 'ReferenceError: openDatabase не определено'. – MikeCAT

+0

Я использую google chrome, который он поддерживает, и я определил открытую базу данных в первой строке 'var db = openDatabase (« demo »,« 1.0 »,« demo », 200000); – Shaik

ответ

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 м (64-разрядный).

0

Вам необходимо пройти null для факультативных arguments и callback параметров в ExecuteSQL() перед передачей errorHandler:

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 по сделке() метод:

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

Однако ваш errorHandler обратного вызова необходимо будет немного изменен, потому что только SQLError будет передан для обратного вызова.

Вот обновленный JSFiddle показывает этот альтернативный подход: http://jsfiddle.net/ko7qun42/1/

Смежные вопросы