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;

