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');
  • 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'
posted @ 2023-06-09 12:05  风紧·扯呼  阅读(721)  评论(0编辑  收藏  举报