【问题标题】:Delete statement of sqlite not working in phonegap android application删除sqlite的语句在phonegap android应用程序中不起作用
【发布时间】:2013-12-23 05:11:29
【问题描述】:

我正在尝试将用户凭据保存到内置的数据库表中,并通过在按下登录按钮时删除所有先前的记录并将最新的用户详细信息保存在表中来更新它。 这是我的代码:

//database //

//Transaction success callback
function createDB(tx) {
    tx.executeSql('CREATE TABLE IF NOT EXISTS UserInfo (username , password)'); 
}
function successCB() {
 var db = window.openDatabase("Database", "1.0", "Uinfo", 100000);
 db.transaction(queryDB, errorCB);
}

//Transaction error callback
//
function errorCB(err) {
 console.log("Error processing SQL: "+err.code);
}



//deleting previous record

function delDB(tx){
    tx.executeSql('DELETE FROM UserInfo;')
}

//Query the database

function queryDB(tx) {
 tx.executeSql('SELECT * FROM UserInfo', [], querySuccess, errorCB);
}

//Query the success callback

function querySuccess(tx, results) {
 var len = results.rows.length;
 if (len != null){
 console.log("UserInfo table: " + len + " rows found.");
 for (var i=0; i<len; i++){
     console.log("Row = " + i + " UserName = " + results.rows.item(i).username + " Password =  " + results.rows.item(i).password);
     username = results.rows.item(i).username;
     password = results.rows.item(i).password;
     document.getElementById('uNameId').value = username;
    document.getElementById('pswd').value = password;
 }
}else{

}
}


//populating table

function populateDB(tx) {
    tx.executeSql('INSERT INTO UserInfo (username, password) VALUES ('+'"'+userNameInput+'"'+', '+'"'+passwordInput+'"'+')');
}

我正在准备好这些设备:

function DeviceReady() {
    var db = window.openDatabase("Database", "1.0", "Uinfo", 100000);
    db.transaction(createDB,errorCB,successCB,delDB);

    $('#login_button').on('click', function(event) {
        userNameInput = $('#uNameId').val();
        passwordInput = $('#pswd').val();
        db.transaction(populateDB);
        window.location = "dashboard.html";     
    });
    document.addEventListener("backbutton", onBackKeyDown, false);
}

当我运行成功创建应用程序表时,最新的用户详细信息正在保存在数据库中,但问题是以前的记录没有被删除。因此,每次在数据库中保存一条新记录。 无法找出删除语句无法正常工作的原因。有什么帮助吗?

【问题讨论】:

  • 你从哪里打电话给delDB(tx)
  • 我正在设备上调用它...我已经编辑了问题并将代码放入其中..请看一下
  • db.transaction(createDB,errorCB,successCB,delDB); 调用 db 格式错误。
  • 那我该怎么写呢?
  • 检查我的编辑答案。创建全局变量var db。通过调用InitDB()deviceready 上初始化它。现在对每个操作使用事务方法。

标签: android sqlite cordova


【解决方案1】:

删除查询有两种方式:

  1. 从表名中删除 *
  2. DELETE FROM tableName WHERE 条件

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    尝试以下方法删除您以前的数据。

    function delete_data() {
    
     db.transaction(delDB, errorCB);
    }
    
    //deleting previous record
    
    function delDB(tx){
        tx.executeSql('DELETE FROM UserInfo;');
    }
    

    每当创建页面时使用 initDB()。

     var db ;
    function initDB(){
       db = window.openDatabase("Database", "1.0", "Uinfo", 100000);
    }
    

    现在您可以在 Device Ready 上调用 initDB() 后创建表、更新、删除。

    db.transaction(onSuccessMethod,onErrorMethod);
    
    \\ change onSuccessMethod as per your need
    \\ onSuccessMethod = queryDB() , populateDB() , createDB() , delDB()
    \\ onErrorMethod = errorCB()
    

    例如:

    function delete_data() {
     db.transaction(delDB, errorCB);
    }
    
    function populate_data() {
     db.transaction(populateDB, errorCB);
    }
    

    你可以直接使用:

    function delete_data() {
         db.transaction(function (tx){
                    tx.executeSql('DELETE FROM UserInfo;');}, 
                        errorCB);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-02
      • 1970-01-01
      • 1970-01-01
      • 2016-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多