【问题标题】:SQLite Phone Gap db transaction not saving some records on insertSQLite Phone Gap db事务未在插入时保存一些记录
【发布时间】:2016-04-11 23:29:56
【问题描述】:
    dbShell.transaction(function(tx) {
       for (var i=0; i< data.length; i++ ){
            var sql ="Insert into students(studentid,name) SELECT '"+ data.studentid +"', '"+ data.name +"' WHERE NOT EXISTS(SELECT * FROM students WHERE studentid ='" + data.studentid +"')";
                            tx.executeSql(sql, [], nullHandler,dbErrorHandler);
            }
    });

我得到 json 格式的数据(学生名单)。我通过循环接收到的数据在 sqlite phonegap 中插入查询。但是插入语句与某些记录不同。我感觉是因为交易没有完成。

有人可以向我解释一下我在这个查询中做错了什么吗?

感谢您的帮助。

【问题讨论】:

    标签: android ios sqlite cordova


    【解决方案1】:

    使用以下代码进行插入:

    dbShell.transaction(function(tx) {
       for (var i=0; i< data.length; i++ ){
            var sql ="Insert into students(studentid,name) values(?,?)";
            tx.executeSql(sql, [data[i].studentid, data[i].name], successHandler,errorHandler);
       }
    });
    

    需要添加successHandler和errorHandler

    【讨论】:

    • 用 suceesshandler 替换 nullhandler 会有什么不同?执行插入时我不想做任何事情,而只是执行下一个插入语句。
    • successHandler 在查询插入后要执行某些操作时是必需的。如果你不使用successhandler,你将无法知道查询执行何时成功完成。
    • 我的 nullhandler 是成功的处理程序,它只是命名伙伴。我发现了问题。并且已经回答了。
    • 如果你有使用绑定参数,你可能不会遇到单引号的问题。
    【解决方案2】:

    我找到了答案。问题出在我收到的 json 数据中。其中一个名字包含 ' 名称中的单引号。这导致查询失败。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-20
      • 2019-09-10
      • 1970-01-01
      • 1970-01-01
      • 2011-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多