HTML5 本地数据库

     HTML5大大丰富了客户端本地可以存储的内容,添加了很多功能将原本必须要保存在服务器上的数据转为保存在客户端本地,从而大大提高了Web应用程序性能,减轻了服务器的负担,使用Web时代重新回到了“客户端为重、服务器端为轻”的时代。在HTML5中,可以像访问本地文件那样轻松地对内置数据库进行直接访问。

      HTML5中内置了两种本地数据库,一种为SQLLite,一种为indexedDB。 

    

(1)创建访问数据库对象

   /*不存在时创建数据库*/
  /*  参数:数据库名称,版本号,数据库描述,数据库的大小*/
     var db = openDatabase("mydb","1.0","my test db",1024*100);
 
(2)使用事务处理
   
   //事务
    db.transaction(function(tx){
     
    tx.executeSql("");
    /*参数: 执行的sql语句,sql参数数组,success回调函数,error回调函数*/
    transaction.executeSql("", [],function(){},function(){});
    //rows属性  rows.length; rows[index]
});
(3)使用数据库进行Web留言
     
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <!--1.创建访问数据的对象
2.使用事务处理-->
    <script type="text/javascript" src="sql2.js"></script>
</head>


<body οnlοad="init()">
<table>
    <tr>
        <td>姓名:</td>
        <td><input  type="text" name="name" id="name"/> </td>
    </tr>

    <tr>
        <td>留言:</td>
        <td><input type="text" name="say" id="say" style="width:500px;"/> </td>
    </tr>

    <tr>
        <td></td>
        <td><input  type="button" value="保存" οnclick="saveData()"/> </td>
    </tr>
</table>

<hr/>
 <table border="1" id="datatable">

 </table>

<p id="msg"></p>
</body>
</html>

sql2.js
/**
 * Created by Administrator on 2017-03-20.
 */

var datatable = null;
/*不存在时创建数据库*/
/*  参数:数据库名称,版本号,数据库描述,数据库的大小*/
var db = openDatabase("MyData", "", "mydatatable description", 1024 * 100);

//(1)初始化数据
function init() {
    datatable = document.getElementById("datatable");
    //显示所有的
    showDataAll();
}

//(2)移除所有的数据
function removeAll() {
    //遍历
    for (var i = datatable.childNodes.length - 1; i >= 0; i--) {
        datatable.removeChild(datatable.childNodes[i]); //移除每一个孩子
    }
    //自定义的tr,th
    var tr = document.createElement("tr");
    var th1 = document.createElement("th");
    var th2 = document.createElement("th");
    var th3 = document.createElement("th");

    //添加th1,2,3的内容
    th1.innerHTML = "姓名";
    th2.innerHTML = "留言";
    th3.innerHTML = "时间";

    //追加数据
    tr.appendChild(th1);
    tr.appendChild(th2);
    tr.appendChild(th3);
    //添加到表格中
    datatable.appendChild(tr);
}

//显示数据
function showData(row) {
    //自定义tr,td1,td2,td3
    var tr = document.createElement("tr");

    var td1 = document.createElement("td");
    td1.innerHTML = row.name;

    var td2 = document.createElement("td");
    td2.innerHTML = row.message;

    var td3 = document.createElement("td");
    //设置时间
    var t = new Date();
    t.setTime(row.time);
    //将日期+时间
    td3.innerHTML = t.toLocaleDateString()+" "+ t.toLocaleTimeString();

    tr.appendChild(td1);
    tr.appendChild(td2);
    tr.appendChild(td3);

    //添加到表格中
    datatable.appendChild(tr);

}

function showDataAll(){
    //事务
    db.transaction(function (tx) {
        /*参数: CRUD,sql数组,success回调函数,error回调函数*/
        tx.executeSql("create table if not exists student(name TEXT,message TEXT,time INTEGER)",[]);

        //查询语句
        tx.executeSql("select * from student",[],function(tx,rs){
            removeAll(); //移除所有的数据
            for(var i=0;i<rs.rows.length;i++){
                showData(rs.rows.item(i));  //显示数据
            }
        });

    });
}

//添加数据
function addData(name,message,time){
    db.transaction(function(tx){
        tx.executeSql("insert into student values(?,?,?)",[name,message,time],function(tx,rs){
               // alert("ok");
                document.getElementById("msg").innerHTML="ok";
            },
            function(tx,error){
               // alert(error.source+"::"+error.message);
                document.getElementById("msg").innerHTML=error.source+"::"+error.message;
            }
        );
    });
}

//保存数据
function saveData(){
    var name = document.getElementById("name").value;
    var message = document.getElementById("say").value;
    var time = new Date().getTime();
    // alert(name+"--->"+message);
    //调用方法
    addData(name,message,time);

    //显示所有的
    showDataAll();
}

效果:

再次打开数据时,还是存在的,保存在本地的数据库中了!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HTML本身是一种标记语言,不能直接访问本地数据库。但是,可以使用JavaScript作为客户端脚本语言,通过Ajax技术向服务器发送请求,然后服务器再操作数据库返回数据给客户端。具体步骤如下: 1. 在HTML页面中引入jQuery和自己编写的JavaScript文件。 ```html <!DOCTYPE html> <html> <head> <title>访问本地数据库</title> <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script> <script src="js/myscript.js"></script> </head> <body> <div id="result"></div> <button id="btn">查询数据</button> </body> </html> ``` 2. 编写JavaScript代码,使用Ajax向服务器发送请求,并将服务器返回的数据显示在页面上。 ```javascript $(document).ready(function(){ $("#btn").click(function(){ $.ajax({ type: "POST", url: "http://localhost:8080/getData", dataType: "json", success: function(data){ var result = ""; for (var i = 0; i < data.length; i++) { result += "<p>" + data[i].name + ":" + data[i].age + "</p>"; } $("#result").html(result); }, error: function(jqXHR){ alert("发生错误:" + jqXHR.status); } }); }); }); ``` 3. 在服务器端编写代码,接收客户端发送的请求,操作数据库并返回数据。 ```java import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.alibaba.fastjson.JSON; public class GetDataServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); response.setContentType("application/json;charset=UTF-8"); PrintWriter out = response.getWriter(); List<Person> list = new ArrayList<Person>(); try { Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "123456"); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("select * from person"); while (rs.next()) { Person p = new Person(); p.setName(rs.getString("name")); p.setAge(rs.getInt("age")); list.add(p); } rs.close(); stmt.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); } String json = JSON.toJSONString(list); out.print(json); out.flush(); out.close(); } } class Person { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } ``` 在这个例子中,服务器端使用Java编写,使用了MySQL数据库,客户端使用了jQuery和JavaScript。可以根据实际需求选择不同的技术栈和数据库

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值