nodejs同步操作sqlite3类

野生程序猿-杂烧4年前随意分享1728

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;


相关文章

nodejs同步mysql操作类

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

强迫症犯了_重命名

文件夹里的文件命名是这样的,1.mp4,2.mp4,...,999.mp4 看着不舒服,我喜欢 001.mp4,002.mp4,003.mp4。很多播放软件 1后面是11、12排序的。于是通过node...

初学nodejs+express,打造cms系统(5)

今天来尝试做上传功能,其实就是一个上传接口。已经跟php完全两样了,两眼一抹黑,直接百度搜索出来拿过来用,也不知道性能如何,反正可以跑通,需要找机会验证一下。【upload.js】//api库&nbs...

初学nodejs+express,打造cms系统(3)

上次聊到了我的base.js 插入式编程,接着聊编程正题首先是数据库操作类【db_mysql.js】var mysql=require('mysql');  va...

初学nodejs+express,打造cms系统(4)

前面已经改造了基础模块,下面到了页面制作环节。先前的脚手架已经支持ejs了,在views文件夹里出现了测试ejs,下面基本上是锻炼自己仿写能力了。【routes/api.js】var exp...

nodejs+canvas 后端脚本生成游戏五维图

nodejs+canvas 后端脚本生成游戏五维图

我们有部分教学类的软件,设计成简单的游戏形式。我们从完成度、技能值、互动性、熟练度、积极性5个纬度打分,每个纬度的打分是1-5,都是整数。    ...