nodejs同步操作sqlite3类
electron是基于nodejs的,为了方便electron存储,想到了sqlite这种轻便数据库。作为桌面应用,不像nodejs写服务端,为了简化开发,所以写了个同步的操作sqlite的类库,需要用deasync。
var deasync=require('deasync'); const path = require('path') const sqlite3 = require('sqlite3') // 定义类 class db_sqlite { db; db_path; //构造函数 constructor(db_path) { this.db_path=db_path; this.connect(); } connect() { var me=this; var temp_connect=deasync((cb) => { me.db=new sqlite3.Database(me.db_path, err => { if (err !== null){ console.error('db connect err',me.db_path); cb(err, err); } else{ console.error('db connect ok',me.db_path); cb(null, true); } }); }) return temp_connect(); } close() { this.db.close(function(err){ if (err !== null){ console.error('db close err',me.db_path); } else{ console.error('db close ok',me.db_path); } }); } strtosql(value){ try{ if(typeof(value)=='undefined' ) { var result=''; }else{ var result=value; } }catch(e){ var result=''; } result=result.replace(/\'/g,"''"); result=result.replace(/\\/g,"\\\\"); return result; } select_all(sql) { var me=this; var temp_select_all=deasync((sql,cb) => { me.db.all(sql, (err, result) => { if(err){ var result=[]; } cb(null, result); }); }) return temp_select_all(sql); } select_one(sql) { var sql=sql+' limit 0,1'; var this_result=this.select_all(sql); try{ var result=this_result[0]; if(!result) { var result={}; } }catch(e){ var result={}; } return result; } dosql(sql) { var me=this; //sql=me.strtosql(sql); var temp_dosql=deasync((sql,cb) => { me.db.run(sql, (err, result) => { if(err){ var result=false; }else{ var result=true; } cb(null, result); }); }) return temp_dosql(sql); } } module.exports = db_sqlite;