【问题标题】:Javascript Electron Sqlite insertJavascript Electron Sqlite 插入
【发布时间】:2017-11-26 01:15:44
【问题描述】:

我想知道是否有人可以阐明我的代码以及为什么它可能无法正常工作。我正在使用电子包装器运行 nodejs 6+。

sqlite 的依赖是 "sqlite3": "^3.1.8

我正在设法在行中列出和显示数据而没有问题,但是在插入功能或搜索功能上它失败了。我一定是做错了什么。

function insertNewVeh() {
       db.all("INSERT INTO vehicles VALUES ('" +
       document.getElementById('regNo').value + "','" +
       document.getElementById('firstName').value + "','" +
       document.getElementById('lastName').value + 
       "')", function(err, rows) {
          console.log.msg;
          })
        }
insertNewVeh();


     function srchReg() {
        var regNo = document.getElementById("regNo").value
        db.all("SELECT ALL FROM VEHICLES WHERE regNo = " + regNo + ""), function(err, rows) {
            var reg = document.getElementById("newVehicle").value
            rows.forEach(function (row) {  
            console.log.msg;
            document.getElementById('sReg').innerHTML =
                "<div>Total</div>"
                })
            };
        };
        srchReg();

和功能

function srchDiv() {
    document.getElementById('rSrch').innerHTML = 
              "<form>" +
              "<input type=\"search\" id=\regNo\" placeholder=\"What are you looking for?\">" + 
             "<button id=\"subSrch\">Search</button>" +
              "</form>";
     document.getElementById('subSrch').addEventListener("click", function (e) {
          srchReg();
        });
}
srchDiv();

window.onload = function addVeh() {
       document.getElementById('nVeh1').innerHTML =
        "<form>" +
              "<div class=\"row\">" +
                    "<label for=\"firstName\" id=\"firstName\">First Name</label>" +
                    "<input id=\"firstName\" name=\"firstName\" type=\"text\"/>" +
               "</div>" +
               "<div class=\"row\">" +
                    "<label for=\"lastName\" id=\"lastName\">Last Name</label>" +
                    "<input id=\"lastName\" name=\"lastName\" type=\"text\"/>" +
                "</div>" +
                "<div class=\"row\">" +
                    "<label for=\"address1\" id=\"address1\">Address 1</label>" +
                     "<input id=\"address1\" name=\"address1\" type=\"text\" />" +
                "</div>" +
                "<div class=\"row\">" +
                    "<label for=\"address2\" id=\"address2\">Address 2</label>" +
                    "<input id=\"address2\" name=\"address2\" type=\"text\"/>" +
                "</div>" +
                "<div class=\"row\">" +
                    "<label for=\"town\" id=\"town\">Town</label>" +
                    "<input id=\"town\" name=\"town\" type=\"text\"/>" +
                "</div>" +
                "<div class=\"row\">" +
                    "<label for=\"postcode\" id=\"postcode\">Post Code</label>" +
                    "<input id=\"postcode\" name=\"postcode\" type=\"text\"/>" +
                "</div>" +
                "<div class=\"row\">" +
                    "<label for=\"telephone\" id=\"telephone\">Telephone</label>" +
                    "<input id=\"telephone\" name=\"telephone\" type=\"tel\"/>" +
                "</div>";
        document.getElementById('nVeh2').innerHTML =
                "<div class=\"row\">" +
                    "<label for=\"regNo\" id=\"regNo\">regNo</label>" +
                    "<input id=\"regNo\" name=\"regNo\" type=\"text\"/>" +
                "</div>" +
                "<div class=\"row\">" +
                  "<button type=\"submit\" value=\"Add\" id=\"addV\"/>Add</button>" +
                "</div>" +
                "</form>";
       document.getElementById('addV').addEventListener("click", function (e) {
            insertNewVeh();
            });
        }
addVeh();

我相对确定这是某个地方的语法错误,但由于我还是 javascript 的新手,所以我看不到它。在任一功能中,搜索都不起作用,也不会向数据库中插入任何内容。

【问题讨论】:

  • 您的 javascript 控制台中是否有任何错误消息?
  • 不,当单击按钮时,调用堆栈仅显示:导航到文件:///xxx/app/index.html?所以看起来它没有解析数据。
  • 另一个我稍作修改,它的状态相同 Navigated to file:///xxx/app/index.html?firstName=&lastName=&address1=&address2=&town=&postcode=&telephone= &regNo=asdasd 但在这一点上,数据正在被解析
  • 我也收到另一个未粘贴在这里的语句的错误 Uncaught TypeError: rows.forEach is not a function。虽然该功能实际上运行成功。
  • 目前还很难说到底发生了什么。我的下一个猜测是;我看到一个表格。当您按“提交”时,您正在提交表单。函数 InsertNewVeh 应该通过 return 'false' 来阻止提交表单。

标签: javascript sqlite electron


【解决方案1】:

请注意“return false”,因为您正在提交表单

function insertNewVeh() {
    const self = this
    db.serialize(
        function () {
            let stmnt = db.prepare('INSERT INTO vehicles VALUES (?, ?, ?)')
            stmnt.run(document.getElementById('regNo').value, document.getElementById('firstName').value, document.getElementById('lastName').value, function () {
                stmnt.finalize(function () {
                    // Here goes your callback, if you need one
                    // self.doSomeThing()
                })
            })
        }
    )
    return false
}

【讨论】:

  • 我正在学习,同时进行一些尝试和错误。我将修改我的函数,看看会发生什么。
猜你喜欢
  • 2018-05-05
  • 2012-03-27
  • 1970-01-01
  • 2013-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多