天天看点

javascript读写本地sqlite数据库

sqlite这种单文件数据库,类型简单功能强大效率也不错,非常适合单机软件开发。

把一个我以前写的JavaScript sqlite数据库操作类分享给大家,还是先上代码,注释写的很清楚啦,支持增删改查,支持链式查询,使用的时候不用new。

/*sqlite数据库操作类 by sdxjwkq01*/
this.Db={
	tableName:"",//表
	whereReg:"",//where条件
	orderReg:"",//排序条件
	pageReg:"",//分页
	dbUrl:"DRIVER=SQLite3 ODBC Driver;Database=Db/database.db",//数据库地址
	//取得表
	table:function(tableName){
		this.tableName=tableName;
		return this;
	},
	//取得where
	where:function(whereReg){
		this.whereReg=whereReg;
		return this;
	},
	//排序
	order:function(orderReg){
		this.orderReg=orderReg;
		return this;
	},
	//分页
	page:function(pageReg){
		this.pageReg=pageReg;
		return this;
	},
	//添加
	add:function(json){
		var sql="insert into "+this.tableName+"(";
		var fields=[];
		var values=[];
		for(var item in json){
			fields.push(item);
			values.push("'"+json[item]+"'");
		}
		sql+=fields.join(",");
		sql+=") values("+values.join(",")+")";
		var con = new ActiveXObject("ADODB.Connection");
		con.ConnectionString =this.dbUrl;
		con.Open();
		con.Execute(sql);
		con.Close();
	},
	//删除
	del:function(id){
		var con = new ActiveXObject("ADODB.Connection");
		con.ConnectionString = this.dbUrl;
		con.Open();
		if(typeof id=="object"){
			con.Execute("delete from "+this.tableName+" where id in ("+id.join(",")+")");
		}else{
			con.Execute("delete from "+this.tableName+" where id="+id);
		}
		con.Close();
	},
	//修改
	upd:function(json){
		var sql="update "+this.tableName+" set ";
		var data=[];
		for(var item in json){
			data.push(item+"="+json[item]);
		}
		sql+=data.join(",");
		if(this.whereReg.length>0){
			sql+=" where "+this.whereReg;
		}
		var con = new ActiveXObject("ADODB.Connection");
		con.ConnectionString =this.dbUrl;
		con.Open();
		var re=con.Execute(sql);
		con.Close();
	},
	//查询
	sel:function(){
		var con = new ActiveXObject("ADODB.Connection");
		con.ConnectionString =this.dbUrl;
		con.Open();
		var sql="";
		sql+="select * from "+this.tableName;
		if(this.whereReg.length>0){
			sql+=" where "+this.whereReg;
		}
		if(this.orderReg.length>0){
			sql+=" order by "+this.orderReg;
		}
		if(this.pageReg.length>0){
			var limit=this.pageReg.split(",");
			sql+=" limit "+limit[0]+" offset "+limit[1];
		}
		var result=con.Execute(sql);
		var resultArray=[];
		var h=0;
		while(!result.eof){
			if(h==0){
				//试探指针位置
				for(i=0;;i++){
					try{
						eval("var temp=result("+i+")");
					}catch(e){
						var fieldLength=i;
						break;
					}
				}
				h++;
			}
			var temp=[];
			for(i=0;i<fieldLength;i++){
				eval("temp.push(''+result("+i+"))");
			}
			resultArray.push(temp);
			result.movenext(); 
		}
		con.Close();
		return resultArray;
	},
	//直接执行
	execute:function(sql){
		var con = new ActiveXObject("ADODB.Connection");
		con.ConnectionString =this.dbUrl;
		con.Open();
		var result=con.Execute(sql);
		var resultArray=[];
		var h=0;
		while(!result.eof){
			if(h==0){
				//试探指针位置
				for(i=0;;i++){
					try{
						eval("var temp=result("+i+")");
					}catch(e){
						var fieldLength=i;
						break;
					}
				}
				h++;
			}
			var temp=[];
			for(i=0;i<fieldLength;i++){
				eval("temp.push(''+result("+i+"))");
			}
			resultArray.push(temp);
			result.movenext(); 
		}
		con.Close();
		return resultArray;
	}
}
           

例如下面是更新一条数据

javascript读写本地sqlite数据库

也可以像下图这样直接运行sql语句

javascript读写本地sqlite数据库

运行这个sqlite操作类,电脑需要安装SQLite ODBC 驱动,非精简版系统一般都有安装,这个步骤可以忽略。