纯前端使用前端数据库。

案例1

<html>
<head>
<meta charset="utf-8">
<script>
var 数据表 = null;
//4个参数分别是 数据库名,版本号,数据库的描述,数据库大小
var 数据库 = openDatabase('MyData','1.0版','我的数据库描述',102400);
//初始化页面()方法,用于页面下方表格元素的引用,并且显示所有的数据库记录
function 初始化页面(){
     //取得下方的表格元素,并且赋值给全局变量
    数据表 = document.getElementById("数据表");
    显示当前数据库当前表格中的所有数据();
  }//清除页面表格中的所有数据()方法,用于移除所有的表格中的当前显示数据(它并不去除数据库记录)
  function 清除页面表格中的所有数据(){
     //首先,它将<table>下面的所有子元素全部清除
     //所以,这里它对于数据表组件进行遍历
     for(var i=数据表.childNodes.length-1;i>=0;i--){
         数据表.removeChild(数据表.childNodes[i]);
     }
     
     //全部去除之后,现在需要显示这个表头部分<tr>里面有多个<th>
     //创建表头行到文档树中
     var 表头的一行= document.createElement('tr');
     //表头行的第一个表头
     var 第一个表头=document.createElement('th');
     //表头行的第二个表头
     var 第二个表头=document.createElement('th');
     //表头行的第三个表头
     var 第三个表头=document.createElement('th');
     //设置这3个表头的文本
     第一个表头.innerHTML="姓名";
     第二个表头.innerHTML="资料";
     第三个表头.innerHTML="时间";
     //将这些表头依次放在表头行中
     表头的一行.appendChild(第一个表头);
     表头的一行.appendChild(第二个表头);
     表头的一行.appendChild(第三个表头);
     //将这个新创建的表头行挂到表格中
     数据表.appendChild(表头的一行);
  }
  
  //构建指定数据库行的数据对应的HTML文本。传入参数:数据库结果集中的某一行记录
  function 显示数据(数据行){
      //构建一个表行用于取得当前所要的信息
      var 表格数据的一行= document.createElement('tr');
      //创建第一列,这一列是姓名
      var 第一个数据=document.createElement('td');
      //填充第一列的信息为该行的姓名
      第一个数据.innerHTML=数据行.姓名;
      //创建第二列,这一列是留言
      var 第二个数据=document.createElement('td');
      //填充第一列的信息为该行的message
      第二个数据.innerHTML=数据行.信息;
     //创建第三列,这一列是日期
      var 第三个数据=document.createElement('td');
      //创建一个日期对象
      var 日期 = new Date();
      日期.setTime(数据行.时间);
      //将日期的标准形式和国际化日期形式分别设置给当前列
      第三个数据.innerHTML=日期.toLocaleString()+" "+日期.toLocaleTimeString();
      //吧这三列挂到当前行中
      表格数据的一行.appendChild(第一个数据);
      表格数据的一行.appendChild(第二个数据);
      表格数据的一行.appendChild(第三个数据);
      //让这个表格在后面加上这一行
      数据表.appendChild(表格数据的一行);
  }
  
  //这个函数用于显示所有的行到表格中,这些行是从数据库中拿出来的
  function 显示当前数据库当前表格中的所有数据(){
     //开启SQLite数据库事务,它用一个回调函数作为参数表明要执行的语句
     数据库.transaction(function(数据库事务){
         //首先它创建一个数据库表,里面有3个字段
         数据库事务.executeSql('CREATE TABLE IF NOT EXISTS 我的数据(姓名,信息,时间)',[]);
         //创建一个查询语句用来查询数据库表的所有记录(这个由于是所有查询,所以不需要预编译语句和参数 (第二个参数))
         //然后定义了一个回调函数,表明对于结果集的处理
         数据库事务.executeSql('SELECT * FROM 我的数据',[],function(数据库事务,查询结果集){
             
             //对于结果集,首先,在获取它之前移除页面上的<table>的所有数据
             清除页面表格中的所有数据();
             //遍历结果集,对于每一行,依次调用显示数据来在table上创建对于的html文本
             for(var i=0;i<查询结果集.rows.length;i++){
                 //对于item(i),也就是某一行记录,我们显示其内容到页面的表格中(构建对应的HTML片断)
                 显示数据(查询结果集.rows.item(i));
             }
         });
     }
  
     );
  }
  
  //这个函数用于添加一条记录到数据库中,这些信息有些是从页面获得的,有些是系统生成的。
  function 添加数据(姓名,信息,时间){
     //开启一个数据库事务
     //回调函数是一个有参数的插入语句,可以看到我们插入到表我的数据中,插入的内容也就是参数传递进来的内容
     数据库.transaction(function(数据库事务){
         
         //插入的语句是个模板语句
         //插入成功的回调就是在控制台上输入一行日志
         数据库事务.executeSql('INSERT INTO 我的数据 VALUES(?,?,?)' , [姓名,信息,时间],function(数据库事务,查询结果集){
             console.log("成功保存数据!");
         },
         //插入失败的回调就是在控制台上输入一行错误日志
         function(数据库事务,error){
             console.log(error.source+"::"+error.message);
         });
     }
     
     );
  }
  
  //保存用户的当前输入,这个是作为点击页面上”保存“按钮的事件处理函数
  function 保存数据到数据库中(){
     //从HTML页面中取得2个输入框的文本
     var 姓名=document.getElementById('姓名').value;
     var 信息=document.getElementById('信息').value;
     //得到当前的系统时间
     var 时间= new Date().getTime();
     //将用户名,用户信息,当前时间存到数据库中
     添加数据(姓名,信息,时间);
     显示当前数据库当前表格中的所有数据();
  }

 </script>

 </head>

 

 <body onload="初始化页面();">

 <h1>使用HTML5本地数据库DEMO</h1>

 <table>
     <tr><td>姓名:</td><td><input type="text" id="姓名"></td></tr>
     <tr><td>资料:</td><td><input type="text" id="信息"></td></tr>
     <tr>
         <td></td>
         <td><input type="button" value="保存" onclick="保存数据到数据库中();"></td>
     </tr>

 </table>

 <hr>

 <table id="数据表" border="1"></table>

 </body>

案例2

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<!--
openDatabase与android里面的sqlite差不多
最好的选型存储
-->

<h1>opendatabse数据库操作</h1>

<button id="btn-create">创建user数据表</button>
<button id="btn-insert">插入数据</button>
<button id="btn-query">查询数据</button>
<button id="btn-update">修改数据</button>
<button id="btn-delete">删除数据</button>
<button id="btn-drop">删除user数据表</button>

<script type="text/javascript">

    let findId = id => document.getElementById(id);

    //模拟一条user数据
    let user = {
        username: "liuqiang",
        password: "123569874",
        info: "beaconApp开发团队中一员"
    };

    /**
     * 创建数据库 或者此数据库已经存在 那么就是打开数据库
     * name: 数据库名称
     * version: 版本号
     * displayName: 对数据库的描述
     * estimatedSize: 设置数据的大小
     * creationCallback: 回调函数(可省略)
     */
    let db = openDatabase("MySql", "1.0", "我的数据库描述", 1024 * 1024);
    let result = db ? "数据库创建成功" : "数据库创建失败";
    console.log(result);


    const USER_TABLE_SQL = "create table if not exists userTable (id integer primary key autoincrement,username varchar(12)," +
        "password varchar(16),info text)";

    //创建数据表
    function createTable() {
        db.transaction(tx => {
            tx.executeSql(USER_TABLE_SQL, [],
                (tx, result) => {
                    alert('创建user表成功:' + result);
                }, (tx, error) => {
                    alert('创建user表失败:' + error.message);
                })
        })
    }

    const INSERT_USER_SQL = "insert into userTable (username, password,info) values(?,?,?)";

    //插入数据
    function insertData(user) {
        db.transaction(tx => {
            tx.executeSql(INSERT_USER_SQL,
                [user.username, user.password, user.info],
                (tx, result) => {
                    alert('添加数据成功:');
                }, (tx, error) => {
                    alert('添加数据失败:' + error.message);
                })
        })
    }

    const QUERY_USER_SQL = "select * from userTable";

    //查询数据
    function queryData() {
        db.transaction(tx => {
            tx.executeSql(QUERY_USER_SQL, [],
                (tx, result) => {
                    console.log(result);
                },
                (tx, error) => {
                    console.log('查询失败: ' + error.message)
                })
        })
    }

    const UPDATE_USER_SQL = "update userTable set password = ? where username = ?";

    //修改数据
    function updateData(user) {
        db.transaction(tx => {
            tx.executeSql(UPDATE_USER_SQL, [user.password, user.username],
                (tx, result) => {
                    alert("修改数据成功")
                }, (tx, error) => {
                    alert("修改数据失败:" + error.message)
                })
        })
    }

    const DELETE_USER_SQL = "delete from userTable where username = ?";

    //删除数据
    function deleteData(user) {
        db.transaction(tx => {
            tx.executeSql(DELETE_USER_SQL, [user.username],
                (transaction, resultSet) => {
                    alert("删除数据成功")
                }, (transaction, error) => {
                    alert("删除数据失败:" + error.message)
                })
        });
    }

    const DROP_USER_SQL = "drop table userTable";

    //删除数据表
    function dropTable() {
        db.transaction(tx => {
            tx.executeSql(DROP_USER_SQL, [],
                (transaction, resultSet) => {
                    alert("删除数据表成功")
                }, (transaction, error) => {
                    alert("删除数据表失败:" + error.message)
                })
        })
    }

    /**
     * 点击事件 增删查改
     */
    let btnCreate = findId("btn-create");
    let btnInsert = findId("btn-insert");
    let btnQuery = findId("btn-query");
    let btnUpdate = findId("btn-update");
    let btnDelete = findId("btn-delete");
    let btnDrop = findId("btn-drop");
    btnCreate.onclick = () => createTable();
    btnInsert.onclick = () => insertData(user);
    btnQuery.onclick = () => queryData();
    btnUpdate.onclick = () => {
        user.password = "111666666"; //修改密码
        updateData(user);
    };
    btnDelete.onclick = () => deleteData(user);
    btnDrop.onclick = () => dropTable();

</script>
</body>
</html>