2015-10-29 72 views
0

我正在使用下面的代碼與sqlite數據庫進行交互。從sqlite transAction中的錯誤函數返回沒有錯誤

var defferd = $q.defer(); 

     var db = openConn('test1','1.0.0' , 'test1' , 200000); 
     db.transaction(insertUserInformation, errorDB, successDB); 

     function insertUserInformation(tx) { 
      tx.executeSql('CREATE TABLE IF NOT EXISTS USERINFO (ID UNIQUE, USERNAME , FULLNAME , PROFILEPIC , ACCESS_TOKEN)'); 
     } 

    function openConn(databaseName, dbVersion, dbShowName, dbSize){ 
     return window.openDatabase(databaseName, dbVersion, dbShowName, dbSize); 
    } 

    function errorDB(tx, err) { 
     defferd.reject(err); 
    } 

    function successDB() { 
     defferd.resolve(result) 
    } 

return defferd.promise; 

運行此代碼後確定。但是當我改變查詢插入時,errorDB函數被觸發,但沒有錯誤返回,我無法弄清楚那是什麼錯誤。

我怎麼能處理到sqlite的交易

的錯誤

回答

0

所有你需要指定主鍵,所以更新制作表格查詢

tx.executeSql('CREATE TABLE IF NOT EXISTS USERINFO (ID INTEGER PRIMARY KEY ASC, USERNAME , FULLNAME , PROFILEPIC , ACCESS_TOKEN)'); 

注意第一:不要忘了刪除舊錶之前。

以後有什麼

function insertUserInformation(tx) { 
    tx.executeSql('insert into USERINFO VALUES (null, "2", "3", "4", "5");'); 
} 

很適合我。

還有一件事: 埃勒爾回調(errorDB功能)應該只有1個參數

function errorDB(err) { 
     defferd.reject(err); 
     console.log(err); 
    } 

所以在這種情況下犯錯會SQLError對象是這樣的:

{ 
    code: 6 
    message: "could not execute statement due to a constaint failure (19 UNIQUE constraint failed: USERINFO.ID)" 
}