繁体   English   中英

从网络数据库删除记录的正确JS语法是什么?

[英]What's proper JS syntax for deleting a record from a web database?

我使用以下内容通过innerHTML在HTML页面上显示基于Javascript的webSQL数据(包含4个字段):

var rowid = results.rows.item(i).id;
document.getElementById("output2").innerHTML += "<table><tr><td><index type='button' class='buttonDel' onclick='delRecord(\"" + rowid + "\")' value='Delete'>" + results.rows.item(i).id + "</td><td>" + results.rows.item(i).data1 + "</td><td>" + results.rows.item(i).data2 + "</td><td>" + results.rows.item(i).data3 + "</td></tr></table>";

在HTML表的ID列中会出现一个红色的Delete按钮,并将正确的ID放入var rowid中(已通过警报确认)。 该按钮调用以下功能删除记录。 当然,那不会发生。

// Delete a row in the DB

function delRecord(rowid) {
    var db = window.openDatabase("Database", "1.0", "DEMO", 2000000);
    db.transaction(delDB, errorCB, successCB);
}
function delDB(tx) {
    tx.executeSql("DELETE from DEMO WHERE id == rowid"); 
}

删除记录的正确语法是什么?

按钮的格式化方法如下:

function querySuccess(tx, results) {
    var len = results.rows.length;
    console.log("Returned rows = " + results.rows.length);
for (var i = 0; i < len; i++) { 
var rowid = results.rows.item(i).id;
                document.getElementById("output2").innerHTML += 
    "<table><tr><td><index type='button' class='buttonDel' onclick='delRecord(\"" + 
    rowid + "\")' value='Delete'>" + 
        results.rows.item(i).id + 
        "</td><td>" + results.rows.item(i).data1 + 
        "</td><td>" + results.rows.item(i).data2 + 
        "</td><td>" + results.rows.item(i).data3 + "</td></tr></table>";
                }

正确的语法是DELETE FROM tableName [WHERE expr] (基础实现全部使用SQLite,AFAIK。)

但是,有几个相关的问题:

  1. 使用的条件是错误的,SQL使用=表示相等。

  2. rowid作为字符串内容是错误的。 那将永远不会是ID,因为没有完成“魔术替换”。 而是使用参数化查询并指定绑定值。

考虑:

function deleteRecord(rowid) {
    var db = getCurrentDatabase();
    db.transaction(
      function (tx) {
        tx.executeSql("DELETE FROM demo WHERE id = ?", [rowid]); 
      });
}

我还使用了闭包使rowid易于访问。 有关更多常规和示例,请参考一些教程

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM