使用场景:node在本地存储数据,效果类似于浏览器的本地缓存
在node中使用文件数据库-sqlite3
封装
/**
* File: sqlite.js
* 对 文件数据库-sqlite3 的封装
*
* 22-10-12 KUN
*
* 回调参数统一{code,res} code:状态码 500/200 热水:如果有需要返回的内容则在二参
*/
var fs = require('fs');
var sqlite3 = require('sqlite3').verbose();
var DB = DB || {};
DB.SqliteDB = function (file) {
DB.db = new sqlite3.Database(file);
DB.exist = fs.existsSync(file);
if (!DB.exist) {
fs.openSync(file, 'w');
};
};
DB.printErrorInfo = function (err, callback = () => { }) {
callback(500)
console.log("Error Message:" + err.message);
};
//创建数据表
DB.SqliteDB.prototype.createTable = function (sql) {
DB.db.serialize(function () {
DB.db.run(sql, function (err) {
if (null != err) {
DB.printErrorInfo(err);
return;
}
});
});
};
//新增
DB.SqliteDB.prototype.insertData = function (sql, objects) {
DB.db.serialize(function () {
var stmt = DB.db.prepare(sql);
for (var i = 0; i < objects.length; ++i) {
stmt.run(objects[i]);
}
stmt.finalize();
});
};
//查询
DB.SqliteDB.prototype.queryData = function (sql, callback = () => { }) {
DB.db.all(sql, function (err, rows) {
if (null != err) {
DB.printErrorInfo(err, callback);
return;
}
if (callback) {
callback(200, rows);
}
});
};
//修改 "update 表名 set 修改项 where 条件"
DB.SqliteDB.prototype.upData = function (sql, callback = () => { }) {
DB.db.run(sql, function (err) {
if (null != err) {
DB.printErrorInfo(err, callback);
return
}
callback(200);
});
};
//删除 "delete from 表名 where 条件"
DB.SqliteDB.prototype.delData = function (sql, callback = () => { }) {
DB.db.run(sql, function (err) {
if (null != err) {
DB.printErrorInfo(err, callback);
return
}
callback(200);
});
};
//其他sql 与删改相同-只是便于区分
DB.SqliteDB.prototype.onSql = function (sql, callback = () => { }) {
DB.db.run(sql, function (err) {
if (null != err) {
DB.printErrorInfo(err, callback);
return
}
callback(200);
});
};
//关闭连接
DB.SqliteDB.prototype.close = function () {
DB.db.close();
};
exports.SqliteDB = DB.SqliteDB;
调用
/**
* File: callSqlite.js.
* 对 文件数据库-sqlite3封装后的调用
*
* 22-10-12 KUN
*
*/
//创建连接
var SqliteDB = require('./sqlite.js').SqliteDB;
var file = "thenKeys.db";
var sqliteDB = new SqliteDB(file);
//创建数据库:如果没有则创建
let tableName = 'tiles'//表名
let keys = [//表内字段 ---字段名 存储类型---
"key VARCHER",//VARCHER-字符
"value VARCHER",
]
let strKeys = keys.join(',')//转换为可用字符串
var createTableSql = `create table if not exists ${tableName}(${strKeys});`;
sqliteDB.createTable(createTableSql);
let getFn = function () {
//查
var querySql = `select * from ${tableName} where key = 'A1001'`;
sqliteDB.queryData(querySql, (code, res) => {
if (code == 200) {
console.log(res);
}
});
}
//增
var tileData = [['A1001', '123456']];//这里是数组可以批量增,key可重复
var insertTileSql = `insert into ${tableName}(key,value) values(?, ?)`;
sqliteDB.insertData(insertTileSql, tileData);
getFn()//查一下看看
//改
var updateSql = `update ${tableName} set value = '789' where key = 'A1001'`;
sqliteDB.upData(updateSql, (code) => {
console.log(code);
});
//删
var delSql = `delete from ${tableName} where key = 'A1001'`;
sqliteDB.delData(delSql, (code) => {
console.log(code);
});
getFn()//查一下看看 因为是异步,所有多次查的顺序不确定
//关闭连接
sqliteDB.close();
妈耶,破案了!
//需要注意传入参数的类型 例: let key = "A1001" var delSql = `delete from ${tableName} where key = '${key}'`;
electron 数据持久化解决方案:
electron-store