websql使用指南

作者: Nanayai | 来源:发表于2019-07-07 10:06 被阅读21次

    前言

    Web SQL Database引入了一组使用 SQL 操作客户端数据库的 APIs,如果你熟悉SQL语句,上手websql简直0门槛。

    在前端数据持久化的方案中,对于简单的数据,使用sessionStorage和localStorage能够很好地完成存取,但是对于处理复杂的关系型数据,它就力不从心了。这时必须选用websql或者IndexedDB。

    IndexedDB是浏览器提供的本地数据库, 允许储存大量数据,提供查找接口,还能建立索引。IndexedDB 不属于关系型数据库(不支持 SQL 查询语句),更接近 NoSQL 数据库。

    我的项目中需要存储30多mb的全国行政区划代码,考虑到兼容安卓低版本的问题,最后采用websql来存储数据,本篇博客将记录我在项目中实操websql的一些经验,争取记录的都是干货,下面开始:

    js部分

    核心方法

    1、openDatabase:这个方法使用现有数据库或创建新数据库创建数据库对象。

    2、transaction:这个方法允许我们根据情况控制事务提交或回滚。

    3、executeSql:这个方法用于执行真实的SQL查询。

    想了解API请看https://www.runoob.com/html/html5-web-sql.html
    下面给出直接能用的例子:

    1.架子:

    var myDB = {
        name: 'formData',
        version: 1,
        db: null,
    };
    myDB.db = openDatabase(myDB.name, myDB.version, 'test', 100 * 1024 * 1024);
    myDB.db.transaction(function(tx) {
        tx.executeSql('', [], function(tx, result) {
              if(result.rows.length!=0){
                  //result.rows.item(i)
              }
        }, function(tx, error) {
            console.log(error);
        });
    })
    

    SQL语句

    //新建表
    'CREATE TABLE IF NOT EXISTS 表名 (列名称1 PRIMARY KEY,列名称2 UNIQUE ,列名称3)'
    //删除表
    'DROP TABLE 表名'
    //清空表
    'DELETE FROM 表名'
    //删除条目
    'DELETE FROM 表名 WHERE 列名称1 = ? and 列名称2 = ?'
    //新增一条
    'INSERT INTO 表名 VALUES (?,?,?,?,?,?,?)' //为所有列添加值
    'INSERT INTO 表名 (列名称2,列名称4,列名称6) VALUES (?,?,?)' //为指定列添加值
    //批量增加
    insert into persons 
    (id_p, lastname , firstName, city )
    values
    (200,'haha' , 'deng' , 'shenzhen'),
    (201,'haha2' , 'deng' , 'GD'),
    (202,'haha3' , 'deng' , 'Beijing')
    //更新一条
    'UPDATE 表名 SET 列名称1 = ? where 列名称2 = ? AND 列名称3 = ?'
    'UPDATE 表名 SET 列名称1 = ?,列名称2 = ?,列名称3 = ? where 列名称2 = ? AND 列名称3 = ?'
     //根据主键存在与否,更新或添加一条数据
    'replace into 表名 (列名称1,列名称2,列名称3,列名称4,列名称5) VALUES (?,?,?,?,?) '
     //查找(更多查询请根据自己的需要自由组合)
    'select * from 表名 where 列名称1 = ? and 列名称1 >= ?' //常规查找
    'select * from 表名 where 列名称1 = ? or 列名称1 >= ?' //常规查找
    
    'select * from 表名 ORDER BY ?' //指定排序项
    'select * from 表名 ORDER BY ? LIMIT 2;'//只查找符合条件的2条
    
    WHERE 列名称 IS NOT NULL //非空
    WHERE 列名称 LIKE "111%" //111开头的
    WHERE 列名称 LIKE "%111" //111结尾的
    WHERE 列名称 LIKE "%111%" //包含111的
    WHERE 列名称 NOT LIKE "%111%" //不包含111的
    '_a_'    //三位且中间字母是a的
    '_a'    //两位且结尾字母是a的
    'a_'    //两位且开头字母是a的
    
    WHERE 列名称 GLOB > 111 //大于111
    WHERE 列名称 GLOB >= 111 //大于等于111
    WHERE 列名称 GLOB != 111 //不等于111 
    
    WHERE 列名称 GLOB '111*' //111开头的
    WHERE 列名称 IN ( 25, 27 )  //值为25或27的
    WHERE 列名称 NOT IN ( 25, 27 )  //值不为25或27的
    WHERE 列名称 BETWEEN 25 AND 27  //值在25到27之间的
    WHERE 列名称 IN ( '25', '27' )  //注意:拼接sql时不要忘记引号
    
    //索引
    'CREATE INDEX IF NOT EXISTS 索引名 on 表名 (列名称1, 列名称2) '
    'DROP INDEX 索引名'
    

    详见:sqlite教程

    附录

    • 测试安卓4.1以上sqlite3语法可用;
    • 对于sql语句执行成功后的回调函数,高版本浏览器可使用result.rows[i]来获取任一行的结果;


    相关文章

      网友评论

        本文标题:websql使用指南

        本文链接:https://www.haomeiwen.com/subject/nuzvhctx.html