【问题标题】:Sqlite Insert statement not runningSqlite 插入语句未运行
【发布时间】:2013-01-13 04:03:29
【问题描述】:

我的 sqlite 有以下代码来存储来自相机的名称和图像。我从 Eclipse 控制台知道我正在获取名称和图像路径。 console.log(addRecord) 正在获取名称和图像路径,但我在事务行和 queryDB 函数上收到“无法执行未定义的 SQL”消息,所以我认为我的插入语句出错了?此外,imageURI 的数据类型文本是否正确?任何帮助表示赞赏。

   function onDeviceReady() {
    var db = window.openDatabase("database", "1.0", "Profiles", 5000);
    if(db) {
console.log('The device is ready');
db.transaction(populateDB, errorCB, successCB, insertRecord); // only do stuff if db exists
}
else{
console.log('There is a problem');
}   
   function populateDB(tx) {
   tx.executeSql('DROP TABLE IF EXISTS USERS');//get rid of this once working?
   tx.executeSql('CREATE TABLE IF NOT EXISTS USERS (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, username VARCHAR NOT NULL, imagePath TEXT)');
   console.log('The table USERS is created');
   }
  //Insert the details
function insertRecord(tx) {
       userName = document.getElementById('userName').value;
       imagePath;
       var addRecord = 'INSERT INTO USERS (username, imagePath) VALUES ("' + userName + '","' + imagePath + '")';
       console.log(addRecord);
       tx.executeSql(addRecord, [userName, imagePath], queryDB, errorCB);
}

 // Query the database
function queryDB(tx) {
       var getUsers = "SELECT * FROM USERS ORDER BY id ASC', [], querySuccess, errorCB";
       db.transaction(function (tx) {
       tx.executeSql(getUsers, [], querySuccess, queryFailure);
    }, errorCB, successCB);
}

// Query the success callback

function querySuccess(tx, results) {
        console.log("You are in the querysuccess function");
}

// Transaction error callback

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

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

function successCB() {
      console.log('The db and table are working');
 }

【问题讨论】:

  • 你没有显示调用insertRecord的代码。
  • 我现在已经包含了(我想!)。
  • 事务不是这样工作的。传递给transaction 的第一个回调必须在完成事务后执行所有工作(或者它可能已经因错误而回滚)。没有办法在该代码中调用insertRecord,您是从其他地方调用它(可能来自表单提交中的事件处理程序)并且没有传递事务。
  • 或者这就是你的意思?
  • 是的。看看它,你是在没有参数的情况下调用它,但函数签名说你应该传递事务。修复签名并在 insertRecord 内显式创建事务以插入该行。

标签: javascript sqlite


【解决方案1】:

标识符queryFailure 未定义。添加功能:

function queryFailure(tx, results) {
    console.log("You are in the queryFailure function");
}

一旦你让它运行,你会看到queryFailure函数被调用,因为你在查询中有一个错误。这个:

var getUsers = "SELECT * FROM USERS ORDER BY id ASC', [], querySuccess, errorCB";

应该是:

var getUsers = "SELECT * FROM USERS ORDER BY id ASC";

【讨论】:

  • 谢谢,当我需要处理那部分时它会很有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-06
  • 1970-01-01
  • 2012-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-10
相关资源
最近更新 更多