nodejs同步操作sqlite3类

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

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;


相关文章

开发UI框架:【laylte】Svelte版LAYUI(缓一下,继续钻研一下填填坑)

开发UI框架:【laylte】Svelte版LAYUI(缓一下,继续钻研一下填填坑)

接下来准备做全局的方法了,象弹窗,还是希望尽量做到一句话调用。layui的弹窗组件里有一个tips功能,把我难住了。感觉这个jquery比较容易实现。有这样一个场景,滚动的页面里如果有tips功能,需...

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

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

python小网站开发

看了前面讲的开发分段,开发小网站其实需要到的知识点不太多,有其他语言基础的基本可以直接上手。【views.py】""" 从module里 取方法,直接把数据提...

GPS经纬度坐标系转换【js版】

万能的javascript版也来了,前端、后端nodejs都能用。<html> <body> <script>  /**   ...

nodejs同步mysql操作类

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

推荐个强迫症最爱的任务栏管理工具7+ Taskbar Tweaker

推荐个强迫症最爱的任务栏管理工具7+ Taskbar Tweaker

我们开发人员用到的软件特别多,尤其全栈。前后端开发软件、ps、模拟器、办公软件、cmd窗口。工作的时候我不喜欢把任务栏按组叠加。像cmd窗口给我叠在一起,找都找不到,打乱开发的节奏。...