nodejs同步操作sqlite3类

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

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;


相关文章

按键精灵+大漠插件 打boss(脚本demo4)

前面介绍了大漠插件,这里再来个复杂点的,这个是4开刷副本//初始化数据 //地图信息 //副本坐标 ditux = -230 dituy = -19...

php对图片进行加密

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

python多数据库+memcache操作练习

import function import math import threading from pymemcache.client.base ...

经纬度的拓展应用

经纬度的拓展应用

前面讲的了如何分析一批gps数据一年的使用情况(所在经纬度是哪个城市);其实这个需求是前公司提给一个python数据分析的。需求蛮多,包括最大速度啊、平均速度啊、有没急刹车啊。我是负责配合数据生成报告...

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

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

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

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

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