sql.js库的使用
sql.js库的使用
安装
npm install sql.js
使用
const fs = require('fs');
const initSqlJs = require('sql.js/dist/sql-wasm.js');
const path = require('path');
const filebuffer = fs.readFileSync(path.resolve(__dirname, '../ignoreDir/filename.sqlite'));
initSqlJs().then(function (SQL) {
// Load the db
// filebuffer可以不传,传了就是基于这个sqlite文件创建内存
const db = new SQL.Database(filebuffer);
db.run("CREATE TABLE users (id, name, phone, address);");
db.run(
`INSERT INTO users (id, name, phone, address)
VALUES (23, 'John Doe', '+234-907788', '12 Igodan Street, Okitipupa')`
);
const contents = db.exec("SELECT * FROM users");
console.log(`***contents***`, contents);
var stmt = db.prepare("SELECT * FROM users WHERE id BETWEEN $start AND $end");
stmt.bind({ $start: 1, $end: 2 });
while (stmt.step()) {
var row = stmt.getAsObject();
console.log("Here is a user row: " + JSON.stringify(row));
}
const stmt1 = db.prepare("SELECT * FROM users WHERE a=:aval AND b=:bval");
// Bind values to the parameters and fetch the results of the query
const result = stmt1.getAsObject({':aval' : 1, ':bval' : 'world'});
console.log(result); // Will print {a:1, b:'world'}
// Bind other values
stmt1.bind([0, 'hello']);
while (stmt1.step()) console.log(stmt1.get()); // Will print [0, 'hello']
// 导出
// const data = db.export();
// const buffer = Buffer.from(data);
// fs.writeFileSync(path.resolve(__dirname, '../ignoreDir/filename.sqlite'), buffer);
//处理完成后关闭您的连接以释放内存资源
stmt.free();
db.close();
});
命令
查询有哪些表
SELECT name FROM sqlite_master WHERE type ='table' AND name NOT LIKE 'sqlite_%'
创建表
- 命令:
CREATE TABLE 表名称 (列名称1 数据类型,列名称2 数据类型,列名称3 数据类型)
- eg:
CREATE TABLE COMPANY(
ID INTEGER PRIMARY KEY AUTOINCREMENT,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
);
查询表数据
- 命令:
<SELECT clause> [FROM clause] [WHERE clause] [GROUP BY clause] [HAVING clause] [ORDER BY clause] [LIMIT clause]
- 说明:
- SELECT 子句是必选的,其它子句如 FROM、WHERE、GROUP BY 子句等是可选的。
- 一个 SELECT 语句中,子句的顺序是固定的。如 GROUP BY 子句不会位于 WHERE 子句前面。
WHERE语句
-
命令格式:
SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
-
运算符
运算符 描述 = 等于 != 或 <> 不等于 > 大于 < 小于 >= 大于等于 <= 小于等于 BETWEEN AND 在某个范围内 LIKE 搜索某种模式 AND 多个条件与 OR 多个条件或 -
where in 的用法
- in 后面是子查询产生的记录集,注意,子查询结果数据列只能有一列且无需给子表添加别名:
select * from table where uname in(select uname from user);
- in 后面是数据集合:
select * from users where address in('南京92','南京32','南京45');
- in 后面是子查询产生的记录集,注意,子查询结果数据列只能有一列且无需给子表添加别名:
-
group by 子句:我理解是用来分组的:
select *,count(*) from users group by address;
-
聚合函数:聚合函数只作用非null,因为null数据不参与运算
聚合函数 描述 MAX(column) 返回某列的最大值 MIN(column) 返回某列的最高值 COUNT(column) 返回某列的总行数 COUNT(*) 返回表的总行数 SUM(column) 返回某列的相加总和 AVG(column) 返回某列的平均值
-
-
having 子句
- HAVING用于分组后的再次筛选,只能用于分组。(注意:分组后)
- having和where区别:
having是分组后,where是分组前 where不用使用聚合函数,having可以使用聚合函数。 where在分组之前就会进行筛选,过滤掉的数据不会进入分组。
-
order by 子句
- 命令:
select * from users order by id desc;
- desc降序,asc升序(默认)
- 命令:
-
limit 子句
- 命令:
select * from users limit x,y;
- 一个参数时:返回前x条数据
- 两个参数时:返回从x条数据开始,返回y条数据
- 命令:
插入数据
inset into
insert into tablename(column1,column2,...) values(value1,value2,...);
insert into tablename select...
inse into tablename set column1=value1,column2=value2...
// 示例
// 插入一行
insert into student(name,school,grade,major,gender) values('lvlv0','software','first year','software engineering',0);
// 如果插入值刚好与数据表的所有列一一对应,那么可以省略书写插入的指定列
insert into student values(10000,'lvlv0','software','first year','software engineering',0);
// 插入多行
insert into student values('lvlv0','software','first year','software engineering',0),('lvlv1','software','first year','software engineering',0);
// 使用select结果集进行插入
insert into tablename select * from temp;
// 注意,temp数据表的定义要与tablename相同,不同的话,则需要指定需要插入的列,示例如下:
insert into tablename(col0,col1,col2) select col0,col1,col2 from temp;
// 使用insert into set
insert into student name='lvlv0', school='software', grade='first year',major='software engineering',gender=0
replace into
- 使用replace into进行插入。如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。 2. 否则,直接插入新数据
replace into tbl_name(col_name, ...) values(...) replace into tbl_name(col_name, ...) select ... replace into tbl_name set col_name=value, ...
删除数据
- 命令:
DELETE FROM 表名称 WHERE 列名称 = 值
修改数据
- 命令:
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
- eg:
UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson'
UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing' WHERE LastName = 'Wilson'