- 清空全部Storage
/** * 清空全部Storage */export const clearStore = (params = {}) => { let { type } = params; if (type) { window.sessionStorage.clear(); } else { window.localStorage.clear() }}
cookie、localStorage、sessionStorage异同数据存储时间- cookie 可以自己设置失效时间
- localStorage 不主动清除,则永久存储
- sessionStorage 当前页面关闭时被删除
- cookie 最大4kb
- localStorage 最大5MB
- sessionStorage 最大5MB
- cookie 每次请求会携带在请求头中
- localStorage 不携带,仅在客户端存储
- sessionStorage 不携带,仅在客户端存储
- cookie 原生api使用不友好,需自己二次封装
- localStorage 原生接口可使用,也可以自己二次封装
- sessionStorage 原生接口可使用,也可以自己二次封装
个人推荐在项目中使用storage存储,cookie存储数据过多,会造成性能问题 。当然,大家可以根据实际情况进行选择,二次封装方法已双手奉上 。webSQL/indexDB对于简单的数据存储,storage和cookie就已经够用了,但是如果需要存储比较复杂的关系型数据,再使用storage和cookie,就有点力不从心了 。这个时候可以使用webSQL或者indexDB进行存储 。
webSQLWeb SQL数据库API是一个独立的规范,在浏览器层面提供了本地对结构化数据的存储,已经被很多现代浏览器支持了 。
文章插图
核心api
- openDatabase() => 用来打开或创建数据库(没有时则创建,有则打开)
- transaction() => 这个方法可以控制一个或多个事务,以及基于这种情况提交或者回滚
- executeSql() => 用于执行实际的 SQL 查询
if (window.openDatabase) { // 操作 web SQL } else { alert('当前浏览器不支持 webSQL !!!');}
webSQL操作类封装webSQL操作类封装代码量较大,此处就不再展示,需要的小伙伴可以关注我公众号回复【webSQL操作类】获取 。下面给个简单的例子: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 //大于111WHERE 列名称 GLOB >= 111 //大于等于111WHERE 列名称 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 索引名'
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 一文带你了解不一样的SQL,惊喜多多
- iOS|iOS 16前的最后一个版本!iOS 15.5登场:一文了解详情
- 一文读懂Redis的dict字典数据结构
- 新疆维吾尔自治区|一文带你了解和田玉“前世今生”
- 使用Java带你打造一款简单的外卖系统
- 5 款超好用的数据库 GUI 带你玩转 MongoDB、Redis、SQL 数据库
- HDMI 2.0已淘汰!HDMI 2.1上位:一文看懂新接口优势
- linux内核驱动第1讲:带你编写一个最简单的字符设备驱动
- 索尼|PS5存储扩容需要注意啥?一文读懂
- 福建安溪铁观音,带你深入了解安溪铁观音茶叶