如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留链接信息。

增删改查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的返回值用于存放查询的数据。

electron与sqlite,增删改查之select - sqlite_insert8

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的话,需要额外指出,并不包含在*之中。

electron与sqlite,增删改查之select - sqlite_insert9

all()

all()返回所有记录的对象组成的数组到res中。

db.all("select * from demo",function(err,res){
  console.log("16:",err,res,this.lastID);
});

electron与sqlite,增删改查之select - sqlite_insert10

each()

each()返回的数据也是所有数据,但是这些数据是单条返回的,就是说有N条数据的话,就返回了N次,callback调用N次。这个函数够特别吧?头一次看到还有这么干的函数。每次的返回值都是object对象,存放在res之中。

db.each("select * from demo",function(err,res){
  console.log("17:",err,res,this.lastID);
});

electron与sqlite,增删改查之select - sqlite_insert11

一个传参并且async的例子

当然,传递参数的方式太多,请参照insert中的run()参数方式。https://newsn.net/say/electron-sqlite-insert.html

(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与sqlite,增删改查之select - sqlite_insert12

相关链接

总结

get()/all()/each()/run()都可以拿到数据,但是各有区别。参数的传递方式都是一致的,请参照run()函数的相关说明。(官方文档里面也是这么讲的)。

更多精彩sqlite经验文章,苏南大叔提示您:请点击这里。https://newsn.net/tag/sqlite/

本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享。
转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议。
程序如此灵动~》下所有原创文章,如被用于商业用途,请您按规定支付稿费。