JavaScript 读写本地 SQLite 数据库:封装类与浏览器 Demo 实践

作者:查询小屋

时间:2026-10-26

浏览:139

本文介绍了在 JavaScript 中读写本地 SQLite 数据库的方法。首先分享了一个支持增删改查及链式查询的 JS 封装类,需注意运行环境需安装 SQLite ODBC 驱动。随后提供了一个在浏览器中直接操作 SQLite 的 Demo 示例,供开发者参考单机应用或离线场景下的数据持久化方案。

文章目录

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 驱动程序。非精简版的 Windows 系统通常已预装该驱动,因此这一步骤对于大多数用户而言可以忽略。

JavaScript 直接操作 SQLite 数据库的 Demo 演示

曾有朋友询问如何在浏览器端的 JavaScript 中直接操作 SQLite 数据库。

起初对此感到困惑,因为不清楚具体实现方式。

经过查阅相关资料后,最终完成了这个 Demo 示例。

在此进行记录,以备后续可能用到。

<html lang="en" dir="ltr">
<head>
    <meta charset="utf-8">
    <meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible">
    <meta content="width=device-width; initial-scale=1; maximum-scale=1" name="viewport">
    <title>宇宙已无对手的Demo演示 --- 功能强非常之大的评分 + 数据存储Sqlite Demo演示</title>
    <script type="text/javascript" src="lib/jquery.min.js"></script>
    <script type="text/javascript" src="lib/raty/jquery.raty.js"></script>
</head>
<body>
<div style="width:500px; margin:100px auto;">
    <div class="demo">
        <div style="padding-top: 20px;padding-bottom: 20px">主题:<input type="text" name="theme" id="theme"/></div>
 
        <div style="padding-top: 20px;padding-bottom: 20px ">
            <div id="starView"></div>
            <div id="function-hint" class="hint">请选择评分</div>
        </div>
 
        <div style="padding-top: 20px ;padding-bottom: 20px">备注:<textarea id="remark" name="remark"></textarea></div>
        <button id="save">保存</button>
        <button id="read">读数据</button>
 
 
    </div>
</div>
<div>
    windows安装sqlite数据库教程:
    <p>https://github.com/kripken/sql.js</p>
    <p>http://www.runoob.com/sqlite/sqlite-installation.html</p>
    <p>https://blog.csdn.net/chaishen10000/article/details/54574060</p>
    <p>https://blog.csdn.net/u012562302/article/details/78362465</p>
    星级评分:
    <p>https://github.com/wbotelhos/raty</p>
    <p>http://www.shouce.ren/example/try?pc=/api/jq/5733e33070c5a/index.html</p>
    IE下使用Sqlite
    <p>https://blog.csdn.net/fhl812432059/article/details/51502724</p>
</div>
<script type="text/javascript" src="./ie.js"></script>
</body>
</html>

总结

以上为个人经验分享,希望能为大家提供参考,也希望大家多多支持本站。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章