nodejs同步操作sqlite3类

野生程序猿-杂烧5年前随意分享2379

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;


相关文章

html5-声音视频自动播放的坑

因为从事的是教学软件的开发,不知何年何月开始声音、视频不支持自动播放了。必须点一个按钮才能播放。教学类软件很多都是有动画的,像播放器一样,从头开始慢慢播放,可以理解为n帧,但是因为程序开发不是视频制作...

再谈面向过程编程,工序再到时序

再谈面向过程编程,工序再到时序

先看一个需求,这个是教学软件的一个环节。进入机场哪些东西能带哪些东西不能带?哪些东西放在行李箱托运?哪些放在包里随身携带?教学软件一般是带有互动的,有时序的概念。1、时序开始,先是导学说话。2、用户开...

php对图片进行加密

由于公司辛辛苦苦处理了一些教学素材,怕同行盗取,于是需要对素材中的图片进行加密,稍微防一下吧。大写的O数字0,让破解的人稍微增加一点难度吧。<?php function pic_ji...

扫描仪的驱动安装(一体机网络版)

扫描仪的驱动安装(一体机网络版)

上次介绍了常规硬件的驱动正确安装方法,今天来聊一下打印机一体机的扫描功能的安装。 如果是usb连接,直接驱动管理工具就可以安装上。如果网络连接,一般可以把打印驱动安装上,...

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

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

nodejs同步mysql操作类

nodejs越来越火了,打算稍微在深入学习一下,于是把php的mysql操作类库稍微改了一下,为了保留php思路,这里加入了同步的方法。简单测了一下,本地 没有问题,不知道同步在多人访问时候是否有坑,...