HTML5学习总结-07 WebStorage 本地存储

sessionStorage

  • session临时回话,从页面打开到页面关闭的时间段
  • 窗口的临时存储,页面关闭,本地存储消失

localStorage

  永久存储(可以手动删除数据)

Storage的特点

  • 存储量限制 ( 5M )
  • 客户端完成,不会请求服务器处理

sessionStorage数据是不共享、 localStorage共享

二 Storage API

setItem():

  • 设置数据,(key,value)类型,类型都是字符串
  • 可以用获取属性的形式操作

getItem():

  • 获取数据,通过key来获取到相应的value

removeItem():

  • 删除数据,通过key来删除相应的value

clear():

  • 删除全部存储的值

三 Storage API

存储事件:

  当数据有修改或删除的情况下,就会触发storage事件

  在对数据进行改变的窗口对象上是不会触发的

  • Key : 修改或删除的key值,如果调用clear(),key为null
  • newValue : 新设置的值,如果调用removeStorage(),key为null
  • oldValue : 调用改变前的value值
  • storageArea : 当前的storage对象
  • url : 触发该脚本变化的文档的url

四 例子

会话存储

<!doctype html> 
<html > 
    <head> 
        <meta charset="UTF-8"><!--字符编码:utf-8国际编码  gb2312中文编码-->       
        <title>Document</title>        
    </head>
    <body>
        <input type="button" value="添加数据" >
        <input type="button" value="获取数据" >
        <input type="button" value="删除数据" >
        <input type="text" >
        <script>
            var btn1 = document.getElementById("btn1");
            var btn2 = document.getElementById("btn2");
            var btn3 = document.getElementById("btn3");
            var txt = document.getElementById("txt");
            //添加数据
            btn1.onclick = function(){
                sessionStorage.setItem("key",txt.value);
            }
            //获取数据
            btn2.onclick = function(){
                var val = sessionStorage.getItem("key");
                alert(val);
            }
            //删除数据
            btn3.onclick = function(){
                sessionStorage.removeItem("key");
            }
        </script>
    </body>
</html>

本地存储

<!doctype html> 
<htm > 
    <head> 
        <meta charset="UTF-8"><!--字符编码:utf-8国际编码  gb2312中文编码-->        
        <title>Document</title>        
    </head>
    <body>
        <input type="button" value="添加数据" >
        <input type="button" value="获取数据" >
        <input type="button" value="删除数据" >
        <input type="text" >
        <script>
            var btn1 = document.getElementById("btn1");
            var btn2 = document.getElementById("btn2");
            var btn3 = document.getElementById("btn3");
            var txt = document.getElementById("txt");
            //添加数据
            btn1.onclick = function(){
                localStorage.setItem("key",txt.value);
            }
            //获取数据
            btn2.onclick = function(){
                var val = localStorage.getItem("key");
                alert(val);
            }
            //删除数据
            btn3.onclick = function(){
                localStorage.removeItem("key");
            }
        </script>
    </body>
</html>

五 WebSQLDatabase

  Web SQL Database允许应用程序通过一个异步的JavaScript接口访问SQLite数据库。

SQLite是小型嵌入式数据库,是遵守ACID的关系式数据库管理系统,它包含在一个相对小的C库中。

SQLite 不像常见的客户端/服务器结构范例,Sqlite不是个程序与之通信的独立进程,而是连接到程序中成为它的一个主要部分,SQLLite的通信协议是在编程语言内的直接API调用,

整个数据库(定义,表,索引和数据本身)都在宿主机上存储在一个单一的文件中,它的简单的设计是通过在开始一个事务的时候所定整个数据文件完成数据存储。

  以下例子仅仅针对Chrome浏览器生效。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Web SQL DataBase</title>
    </head>
    <body>
    <button >initDatabase</button>
    <button >delte record</button>
    
    
    <script>
        var db = openDatabase('db' , '1.0' , 'my first database' , 2 * 1024 * 1024);
        
        function initDatabase(){
            var names =['zhangsan', "lisi" , "wangwu"];
            db.transaction(function(tx){
                tx.executeSql("create table if not exists people(id integer primary key autoincrement, name)");
                for(var i=0;i<names.length;i++){
                    tx.executeSql('insert into people(name) values(?);', [ names[i] ] );
                }
            });
        }
        
        var createDbBtn = document.getElementById("createDbBtn");
        createDbBtn.onclick = function(){
            initDatabase();
        }

    function deleteRecord(){
            db.transaction(function(tx){
                //删除id等于2的记录
                //tx.executeSql("delete from people where id = ? ", [2]);
                //删除全部记录
                tx.executeSql("delete from people where id > 0 ", null);
            });
        }

        var delRecBtn = document.getElementById("delRecBtn");
        delRecBtn.onclick = function(){
            deleteRecord();
        } 
        
        
    </script>
    </body>
    
    
</html>

六 SQLite

  SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月。 至2015年已经有15个年头,SQLite也迎来了一个版本 SQLite 3已经发布。

  创建第一个SQLite数据库。在命令行生成一个test.db的数据库。输入以下命令:

sqlite3 test.db 

  创建表:

create table people(id integer primary key, name text); 

  注意: 最少必须为新建的数据库创建一个表或者视图,这么才能将数据库保存到磁盘中,否则数据库不会被创建。

  接下来往表里中写入一些数据,输入以下命令:

insert into people(id, name) values(1, 'zhangsan');  
insert into people(id, name) values(2, 'lisi');  
insert into people(id, name) values(3, 'wangwu');  

  查询people表的记录,输入如下命令。

select * from people;

  发现返回的记录中没有column.设置格式。

.header on

  在查询people 表,会发现有表头了。查询现有的表,输入如下命令。

.tables

  查询表结构,以peple表为例。

.schema people