如何在电子应用程序中使用sqlite3变量



我开始了一段旅程(!(,构建一个个人应用程序,用模拟工作流程记录我拍摄、冲洗和打印照片的过程。

它将是一个基于桌面的应用程序,现在只供我自己使用。

我过去曾接触过Electron,并决定使用它,因为它对我来说很容易使用我已经掌握的HTML和CSS知识。JS的使用是有限的,但并非不存在。

作为一个数据库,我希望能够创建关系连接,所以几乎已经排除了像PouchDB或IndexedDB这样的东西,并希望使用SQLite3。

我在我的Win 10笔记本电脑上用Electron运行了这个程序,并且能够在应用程序中显示数据库中的数据。

不过,我真正纠结的是使用输入字段中的数据写入数据库。以下是我所拥有的,function addDev()是我需要帮助的部分。

我试图将数据存储在一个变量中,然后在sqlINSERT查询中访问该变量。

<script>
// Open and create IF NOT EXISTS db
var sqlite3 = require('sqlite3').verbose();
var db = new sqlite3.Database('app/db/apr.db');
db.serialize(function () {
db.run('CREATE TABLE IF NOT EXISTS Developers (make, name, ratio, notes)');
});
//Add html form data to db
function addDev() {
var make = document.getElementById("make").value;
var name = document.getElementById("name").value;
var ratio = document.getElementById("ratio").value;
var notes = document.getElementById("notes").value;
db.run('INSERT INTO Developers (make, name, ratio, notes) VALUES (make, name, ratio, notes)', function(err) {
if (err) {
console.log(err.message);
}    
// get the last insert id
console.log("A row has been inserted.");
})
};
// Display data in table on app page
var rows = document.getElementById("developers");
db.each('SELECT rowid AS id, make, name, ratio, notes FROM Developers', function(err, row) {
var item = document.createElement("tr");
item.innerHTML = "<td>" + row.id + "</td>" + "<td>" + row.make + "</td>" + "<td>" + row.name + "</td>" + "<td>" + row.ratio + "</td>" + "<td>" + row.notes + "</td>";
rows.appendChild(item);
});
db.close();

这不会给我一条错误消息,而是一条成功消息——除非它不成功。

我已经通过两个更改解决了这个问题…:(

  1. 我把db.close()放错了地方。数据库在我输入信息之前就关闭了。现在将其移动到function addDev()

  2. 我还将INSERT查询重写如下:

// Open and create IF NOT EXISTS db
var sqlite3 = require('sqlite3').verbose();
var db = new sqlite3.Database('app/db/apr.db');
db.serialize(function () {
db.run('CREATE TABLE IF NOT EXISTS Developers (make, name, ratio, notes)');
});
//Add html form data to db
function addDev() {
var make = document.getElementById("make").value;
var name = document.getElementById("name").value;
var ratio = document.getElementById("ratio").value;
var notes = document.getElementById("notes").value;
db.run('INSERT INTO Developers (make, name, ratio, notes) VALUES (?, ?, ?, ?)', [make, name,ratio,notes], function(err) {
if (err) {
console.log(err.message);
}    
// get the last insert id
console.log("A row has been inserted.");
});
db.close();
};
// Display data in table on app page
var rows = document.getElementById("developers");
db.each('SELECT rowid AS id, make, name, ratio, notes FROM Developers', function(err, row) {
var item = document.createElement("tr");
item.innerHTML = "<td>" + row.id + "</td>" + "<td>" + row.make      + "</td>" + "<td>" + row.name + "</td>" + "<td>" + row.ratio + "</td>" + "<td>" + row.notes + "</td>";
rows.appendChild(item);
});
</script>

数据现在被输入到表中,并通过SELECT查询显示在窗口中。

最新更新