electron与sqlite,增删改查之select
发布于 作者:苏南大叔 来源:程序如此灵动~增删改查crud之r,实际上英文单词是Retrieve
[r??tri:v]。单词似乎不认识,所以苏南大叔认为:还是理解为read/select
更好些嘛。哈哈。当然,本文的主角还是electron+sqlite
。不会配置环境的,请参考文末链接。
在本文中,苏南大叔要描述的经验文章是:在electron
中如何查询数据。
前置代码
var sqlite3 = require('sqlite3').verbose();
const path = require('path');
var db = new sqlite3.Database(path.join(__dirname, 'db.db'));
db.serialize(function() {
db.run("CREATE TABLE if not exists demo (info TEXT,info2 TEXT)");
});
// db.close();
run()查询数据
db.serialize(()=> {
db.run("INSERT INTO demo(info,info2) VALUES (?,?)",["test","test2"],function(err,res){
console.log("11:",err,res,this.lastID);
});
db.run("select last_insert_rowid() newid2 from demo",function(err,res){
console.log("12:",err,res,this.lastID);
});
db.run("select last_insert_rowid() from demo",function(err,res){
console.log("13:",err,res,this.lastID);
});
db.get("select last_insert_rowid() as newid from demo",function(err,res){
console.log("14:",err,res,this.lastID);
});
});
这个的运行结果挺有意思的,第一条语句插入了一条记录,第二个语句中查询了一个不存在的字段,不但没报错,而且还给出了this.lastID
,就是说,查询语句而不是插入语句中返回了this.lastID
。第三条语句修复了第二条语句的问题,但是仍然返回了this.lastID
。第四条语句中,确没有返回this.lastID
,而是返回了last_insert_rowid()
的值,当然值和上一条语句中this.lastID
是相等的。并且出现了个res
的返回值用于存放查询的数据。
get()
get()函数,只返回符合条件的第一条数据。例子如下:
db.get("select * from demo",function(err,res){
console.log("15:",err,res,this.lastID);
});
db.get("select *,rowid from demo",function(err,res){
console.log("16:",err,res,this.lastID);
});
这个返回值也比较奇怪,返回的是数据表里面的第一条数据,并且如果想知道隐藏的rowid
的话,需要额外指出,并不包含在*
之中。
all()
all()返回所有记录的对象组成的数组到res
中。
db.all("select * from demo",function(err,res){
console.log("16:",err,res,this.lastID);
});
each()
each()
返回的数据也是所有数据,但是这些数据是单条返回的,就是说有N条数据的话,就返回了N次,callback
调用N次。这个函数够特别吧?头一次看到还有这么干的函数。每次的返回值都是object对象,存放在res之中。
db.each("select * from demo",function(err,res){
console.log("17:",err,res,this.lastID);
});
一个传参并且async的例子
当然,传递参数的方式太多,请参照insert中的run()参数方式:
(async function () {
function read() {
return new Promise((resolve, reject) => {
db.all('select * from demo where 1 = ?', 1, (err, rows) => {
if (err !== null) reject(err);
if (rows && rows.length > 0) {
resolve(rows);
}
else reject(err);
});
});
}
let result = await read();
console.log(result);
})();
相关链接
- 《开发electron程序的npm准备工作》 https://newsn.net/say/electron-npm.html
- 《调试运行electron项目的几种姿势》 https://newsn.net/say/electron-run.html
- 《electron搭配sqlite数据库之环境安装》 https://newsn.net/say/electron-install-sqlite3.html
- 《sqlite的官方api说明》 https://github.com/mapbox/node-sqlite3/wiki/API
总结
get()
/all()
/each()
/run()
都可以拿到数据,但是各有区别。参数的传递方式都是一致的,请参照run()
函数的相关说明。(官方文档里面也是这么讲的)。
更多精彩sqlite
经验文章,苏南大叔提示您:请点击这里:
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。