最近看到一个使用js来操作sqlite数据库的,测试了一下,具体使用的是

js操作类: https://github.com/kripken/sql.js/(sqlite js 驱动)

异步请求:http://npm.taobao.org/package/axios(异步请求插件,只有12.6k)

这里使用的js驱动是和服务器端使用方法一致,sql标准语法都支持,可以用第三方管理工具来管理数据文件

目前我使用的是 Navicat Premium 12

下面是测试的源代码:

1. 数据库sql(自己运行生成test.db,和html页面放在同一目录下):

PRAGMA foreign_keys = false;

-- ----------------------------
-- Table structure for sys_user
-- ----------------------------
DROP TABLE IF EXISTS "sys_user";
CREATE TABLE "sys_user" (
"id" bigint(11) NOT NULL,
"role_id" bigint(11) NOT NULL,
"user_name" varchar(255) NOT NULL,
"user_pass" varchar(64) NOT NULL,
"nick_name" varchar(255) NOT NULL,
"register_time" datetime NOT NULL,
"status" int(11) NOT NULL DEFAULT 1,
"sort" decimal(16,2) NOT NULL DEFAULT 0.00,
PRIMARY KEY ("id")
)
WITHOUT ROWID; -- ----------------------------
-- Records of sys_user
-- ----------------------------
INSERT INTO "sys_user" VALUES (1, 1, 'lxw', 123456, '李兴武', '2019-01-07 11:22:30', 0, 1);
INSERT INTO "sys_user" VALUES (2, 1, 'lwq', 123456, '浏览器', '2019-01-08 11:11:11', 0, 2);
INSERT INTO "sys_user" VALUES (3, 1, 'tjun', 123123, '田俊', '2018-01-01 12:22:35', 1, 3);
INSERT INTO "sys_user" VALUES (4, 1, 'tttt', 123456, '通天塔', '', 1, 4); -- ----------------------------
-- Indexes structure for table sys_user
-- ----------------------------
CREATE UNIQUE INDEX "pk"
ON "sys_user" (
"id" COLLATE BINARY ASC
); PRAGMA foreign_keys = true;

2. html(可直接复制下来运行)

<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="UTF-8">
<title>sqlite数据库测试</title>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script src="https://cdn.bootcss.com/sql.js/0.5.0/js/sql-optimized.js"></script>
</head>
<body> <p>sqlite数据库测试,使用js操作sqlite数据库</p>
<p>这里使用axios读取test.db文件,进行初始化数据库连接,</p>
<p>查询速度不快,除非不想写后台要直接操作数据库,不然没什么用。</p>
<p>具体效果可查看代码和控制台打印的数据。</p> <script> // 读取数据库数据
axios.get("test.db", {responseType: 'arraybuffer'})
.then(function (response) {
let db = new window.SQL.Database(new Uint8Array(response.data));
// 执行查询
let s = new Date().getTime();
let r = db.exec("SELECT * FROM sys_user WHERE status = 1;");
let e = new Date().getTime();
console.info("查询数据耗时:" + (e - s) + "ms");
// 解析数据
let obj = dbToObj(r);
console.info(obj);
})
.catch(function (error) {
console.info(error);
}); // 方法传入两个数组,第一个数组为key,第二个数组对应位置为value,此方法在Python中为zip()函数。
const ArraytoObj = (keys = [], values = []) => {
if (keys.length === 0 || values.length === 0) return {};
const len = keys.length > values.length ? values.length : keys.length;
const obj = {};
for (let i = 0; i < len; ++i) {
obj[keys[i]] = values[i]
}
return obj;
}; // 转驼峰表示:func.camel('USER_ROLE',true) => UserRole
// 转驼峰表示:func.camel('USER_ROLE',false) => userRole
const camel = (str, firstUpper = false) => {
let ret = str.toLowerCase();
ret = ret.replace(/_([\w+])/g, function (all, letter) {
return letter.toUpperCase();
});
if (firstUpper) {
ret = ret.replace(/\b(\w)(\w*)/g, function ($0, $1, $2) {
return $1.toUpperCase() + $2;
});
}
return ret;
}; // 把数组里面的所有转化为驼峰命名
const camelArr = (arrs = []) => {
let _arrs = [];
arrs.map(function (item) {
_arrs.push(camel(item));
});
return _arrs;
}; // 读取数据库
// 1.把columns转化为驼峰;
// 2.把columns和values进行组合;
const dbToObj = (_data = {}) => {
let _res = [];
_data.map(function (item) {
let _columns = camelArr(item.columns);
item.values.map(function (values) {
_res.push(ArraytoObj(_columns, values));
});
});
return _res;
};
</script>
</body>
</html>

js -- 操作sqlite数据库的更多相关文章

  1. Electron中使用sql.js操作SQLite数据库

    推荐sql.js——一款纯js的sqlite工具. 一.关于sql.js sql.js(https://github.com/kripken/sql.js)通过使用Emscripten编译SQLite ...

  2. Java操作Sqlite数据库-jdbc连接

    Java操作Sqlite数据库步骤: 1. 导入Sqlite jdbc 本文使用sqlite-jdbc-3.7.2.jar,下载地址 http://pan.baidu.com/s/1kVHAGdD 2 ...

  3. 无废话Android之android下junit测试框架配置、保存文件到手机内存、android下文件访问的权限、保存文件到SD卡、获取SD卡大小、使用SharedPreferences进行数据存储、使用Pull解析器操作XML文件、android下操作sqlite数据库和事务(2)

    1.android下junit测试框架配置 单元测试需要在手机中进行安装测试 (1).在清单文件中manifest节点下配置如下节点 <instrumentation android:name= ...

  4. 使用node js 操作 Mysql 数据库

    使用node js 操作 Mysql 数据库 http://www.nodejs.org/ //node js 数据库操作 MySQL //使用https://github.com/felixge/n ...

  5. EF6操作Sqlite数据库的项目兼容性问题

    vs2010无法正确打开2015创建的项目里面操作Sqlite数据库时使用EF6创建的edmx文件(会显示空白)   但是可以正常查询 vs2015无法正确打开2010创建的项目里面操作Sqlite数 ...

  6. EF操作sqlite数据库时的项目兼容性问题

    问题:vs2015打不开vs2010建的操作sqlite的实体数据模型edmx文件 原因: 当前电脑必须先安装:驱动库及sqlite的vs拓展 正常情况下安装驱动和拓展后,vs2015就应该可以正常打 ...

  7. JDBC访问及操作SQLite数据库

    SQLite 是一个开源的嵌入式关系数据库,其特点是高度便携.使用方便.结构紧凑.高效.可靠. 与其他数据库管理系统不同,SQLite 的安装和运行非常简单,在大多数情况下,只要确保SQLite的二进 ...

  8. UWP: 在 UWP 中使用 Entity Framework Core 操作 SQLite 数据库

    在应用中使用 SQLite 数据库来存储数据是相当常见的.在 UWP 平台中要使用 SQLite,一般会使用 SQLite for Universal Windows Platform 和 SQLit ...

  9. Android中操作SQLite数据库

    我又回到了安卓的学习当中,忙来忙去终于忙的差不多有时间做自己的事情了,这感觉实在是太棒了!!本来想写android的控件以及他们的监视器的,但是我查了查android的手册,基本上都能查到,但是查有些 ...

随机推荐

  1. 论文阅读笔记(十七)【ICCV2017】:Dynamic Label Graph Matching for Unsupervised Video Re-Identification

    Introduction 文章主要提出了 Dynamic Graph Matching(DGM)方法,以非监督的方式对多个相机的行人视频中识别出正确匹配.错误匹配的结果.本文主要思想如下图: 具体而言 ...

  2. 03-React基础语法(3)

    一.Context 概念:Context 提供一个无需在每层组件中添加Props,就可以实现组件组件之间通信的方法   语法: 1创建context对象 const {Provider, Consum ...

  3. APC BK650 RJ50-USB数据线引脚定义

    WHY 群晖NAS配套购入APC BK650-CH UPS电源,一根线实现UPS-NAS通讯. 考虑到自带的USB连接线可能损坏,记录引脚定义供DIY之需. UPS BK650采用10芯RJ-50接口 ...

  4. Codeforces Round #592 (Div. 2) D - Paint the Tree

    题目链接:https://codeforces.com/contest/1244/problem/D 题意:给你一个树,让你把树上的每个节点染成三种颜色,使得任意三个互相相邻的节点颜色都不一样(意思是 ...

  5. 安装Kibana到Linux(源码)

    运行环境 系统版本:CentOS Linux release 7.3.1611 (Core) 软件版本:Kibana-7.1.0 硬件要求:最低2核4GB 安装过程 1.源码安装JDK 1.1.从官网 ...

  6. 【你不知道的javaScript 上卷 笔记7】javaScript中对象的[[Prototype]]机制

    [[Prototype]]机制 [[Prototype]]是对象内部的隐试属性,指向一个内部的链接,这个链接的作用是:如果在对象上没有找到需要的属性或者方法引用,引擎就 会继续在 [[Prototyp ...

  7. json转dataset的另外一种解析方式自动生成guid强关联

    /// <summary> /// 将json字符串自动转成dataset,并且自动补全主子关联关系, /// Guid,FKGuid /// Author:lijia /// date: ...

  8. SocketAsyncEvent方式的Server

    1.AsyncUserToken public class AsyncUserToken { /// <summary> /// 客户端IP地址 /// </summary> ...

  9. js -- 移动端pc端自动切换

    1. 判断浏览器类型 浏览器判断使用的github开源项目current-device,下面是地址: https://github.com/matthewhudson/current-device 在 ...

  10. P5048 [[Ynoi2019模拟赛]Yuno loves sqrt technology III]

    为什么我感觉这题难度虚高啊-- 区间众数的出现次数- 计算器算一下 \(\sqrt 500000 = 708\) 然后我们发现这题的突破口? 考虑分块出来[L,R]块的众数出现个数 用 \(\text ...