【问题标题】:Cordova: Sqlite isnt storing my dataCordova:Sqlite 没有存储我的数据
【发布时间】:2017-04-09 09:52:49
【问题描述】:

我是混合移动应用程序开发的新手。我正在构建一个简单的应用程序,我想在其中注册用户并使用相同的凭据登录。我面临的问题是,当我在 sqlite 数据库中插入记录时,它并没有存储我的数据。如果我重新启动我的应用程序,它将不允许我使用以前插入的信息。 我使用 Cordova 进行原生包装,Graphite 作为我的 IDE,sqlite 作为我的数据库。

这是我的 register.js 文件

var db;
var dbCreated = false;

var scroll = new iScroll('wrapper', {
 vScrollbar : false,
 hScrollbar : false,
 hScroll : false
});

document.addEventListener("deviceready", onDeviceReady, false);

function onDeviceReady(){
    var fname = document.getElementById("fname").value;
    var lname = document.getElementById("lname").value;
    var age = document.getElementById("age").value;
    var username = document.getElementById("username").value;
    var password = document.getElementById("psw").value;

    db = window.openDatabase("RegistrationDB", "1.0", "Registration", 200000);

    if (dbCreated){

    } else{
        db.transaction(populateDB, transaction_error, populateDB_success);
    }

}

function populateDB(tx) {

 var sql = "CREATE TABLE IF NOT EXISTS Registration ( "
   + "firstName VARCHAR(50), " + "lastName VARCHAR(50), "
   + "age INTEGER, " + "username VARCHAR(50), "
   + "password VARCHAR(200))";
 tx.executeSql(sql);
 var fname = document.getElementById("fname").value;
 var lname =  document.getElementById("lname").value;
 var age = document.getElementById("age").value;
 var uname =document.getElementById("username").value;
 var pwrd = document.getElementById("psw").value;
 tx.executeSql("INSERT INTO Registration (firstname,lastname,age,username,password) VALUES ('"+ fname +"','"+ lname +"' , "+ age+", '"+ uname +"','"+ pwrd +"' )");

}

function transaction_error(tx, error) {
 alert("Database Error: " + error);
}

function populateDB_success() {
 dbCreated = true;

 alert("Successfully inserted");
  //window.location="file:///MyApp/MyApp/login.html"
    window.location = "./login.html"
}

    var db;
var dbCreated = false;

var scroll = new iScroll('wrapper', {
 vScrollbar : false,
 hScrollbar : false,
 hScroll : false
});

document.addEventListener("deviceready", onDeviceReady, false);

function onDeviceReady(){
    var fname = document.getElementById("fname").value;
    var lname = document.getElementById("lname").value;
    var age = document.getElementById("age").value;
    var username = document.getElementById("username").value;
    var password = document.getElementById("psw").value;

    db = window.openDatabase("RegistrationDB", "1.0", "Registration", 200000);

    if (dbCreated){

    } else{
        db.transaction(populateDB, transaction_error, populateDB_success);
    }

}

function populateDB(tx) {

 var sql = "CREATE TABLE IF NOT EXISTS Registration ( "
   + "firstName VARCHAR(50), " + "lastName VARCHAR(50), "
   + "age INTEGER, " + "username VARCHAR(50), "
   + "password VARCHAR(200))";
 tx.executeSql(sql);
 var fname = document.getElementById("fname").value;
 var lname =  document.getElementById("lname").value;
 var age = document.getElementById("age").value;
 var uname =document.getElementById("username").value;
 var pwrd = document.getElementById("psw").value;
 tx.executeSql("INSERT INTO Registration (firstname,lastname,age,username,password) VALUES ('"+ fname +"','"+ lname +"' , "+ age+", '"+ uname +"','"+ pwrd +"' )");

}

function transaction_error(tx, error) {
 alert("Database Error: " + error);
}

function populateDB_success() {
 dbCreated = true;

 alert("Successfully inserted");
  //window.location="file:///MyApp/MyApp/login.html"
    window.location = "./login.html"
}

这是我的 login.js

var db;
var dbCreated = false;

var scroll = new iScroll('wrapper', {
 vScrollbar : false,
 hScrollbar : false,
 hScroll : false
});
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady(){
 db = window.openDatabase("RegistrationDB", "1.0", "Registration", 200000);
 if (dbCreated)
  {
      // created
  }

 else{
 db.transaction(getregistdata, transaction_error);
 }
}

function getregistdata(tx){

  var sql = "select username, password from Registration";
  tx.executeSql(sql, [], getlogin_success);
}

function transaction_error(tx, error) {
 alert("Database Error: " + error);
}

function getlogin_success(tx, results){
   var len = results.rows.length;
   for (var i=0; i< len; i++) { 
    var employee = results.rows.item(i);
    var username=document. getElementById("username").value;
    var password=document. getElementById("psw").value;
    var uname=employee.username;
    var pasw=employee.password;
    alert(username);
    alert(password);
    if(username == uname && password == pasw){
     alert("Login Success");
     break;
    }
    else{
        var status=1;
     }
   }

   if(status == 1)
    {
       alert("login failed");
    }
}

【问题讨论】:

  • 你是如何调试它以找出“它没有保存数据”的?输入字段的值是undefined?您在问题中粘贴了两次 register.js 吗?
  • 对不起,我不小心复制了 register.js 两次。当我在模拟器中重新启动我的应用程序并使用与之前登录时相同的凭据时,它会提示我“登录失败”。

标签: javascript sqlite cordova


【解决方案1】:

尝试使用window.sqlitePlugin.openDatabase 而不是window.openDatabase

db = window.sqlitePlugin.openDatabase({name: 'RegistrationDB', location: 'default'});

并确保您已使用 cordova 安装 sqlite 插件

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-29
    • 2023-03-22
    • 2012-02-22
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    相关资源
    最近更新 更多