nodejs同步操作sqlite3类

野生程序猿-杂烧6年前随意分享2402

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;


相关文章

介绍一款文件比较工具Beyond Compare

介绍一款文件比较工具Beyond Compare

这款软件除了可以比较我们的代码差异,还可以比较图片形状差异。有以下几个优点1、代码支持特殊字符,如换行符的一些差异(不同操作系统,如linux跟windows下很多时候会有这个现象)。2、支持上下文功...

推荐一个前端框架Svelte(超级轻量级)

现在的前端框架太多了,国内用得比较多的是vue,非常强大,但是个人感觉灵活性糟糕,代码比较繁琐。近期接触一个框架,顿时让我感觉非常的爽,一种似曾相似的感觉,这个框架就是Svelte。Svelte是一个...

聊一下大环境,惨

先前刚学习并且用在工作中的尤其框架egret即将宣告破产了,群里炸开锅了。前端群里大伙都是失业状态,惨惨惨。前端群有个群改成“H5再就业了”真的是挺愁的,大环境不好就算了,疫情也如此严峻。另个上海ph...

多种图片生成,打包接口传递

前面介绍了ImageMagick这个工具,可以将pdf转成png。这里再结合先前工作的实际需求补充一点相关知识。原先入职的是一家摩托车金融公司,就是借款买摩托车。公司对接了一些资金方,有这么个需求,需...

egret升级版本后遇到的问题

升级完egret引擎版本后vscode项目启动不了了,关键是新的demo也启动不了。只能用egret run -a 启动。egret越来越离谱了,还发现了其他怪异问题。1、html5编译报错,提示“您...

浅谈遗忘的html技术iframe

很多前端朋友已经对iframe完全不了解了,现在前端主流的框架基于vue、rect、angular,都不建议使用iframe,于是iframe这么美丽的技术方案被人遗忘了。这里给大家介绍一下,希望感兴...