indexedDB学习demo

9 篇文章 0 订阅

indexDB
IndexedDB是HTML5规范里新出现的浏览器里内置的数据库。对于在浏览器里存储数据,你可以使用cookies或local storage,但它们都是比较简单的技术,而IndexedDB提供了类似数据库风格的数据存储和使用方式。存储在IndexedDB里的数据是永久保存,不像cookies那样只是临时的。IndexedDB里提供了查询数据的功能,在online和offline模式下都能使用。你可以用IndexedDB存储大型数据。

IndexedDB里数据以对象的形式存储,每个对象都有一个key值索引。IndexedDB里的操作都是事务性的。一种对象存储在一个objectStore里,objectStore就相当于关系数据库里的表。IndexedDB可以有很多objectStore,objectStore里可以有很多对象。每个对象可以用key值获取。

学习要点
(1)打开数据库

 var request = window.indexedDB.open("testDB", 1);

第一个参数是数据库的名称,第二个参数是数据库的版本号。
(3)objectstore
objectStore相当于一张表,里面存储的每条数据和一个键相关联。
我们可以使用每条记录中的某个指定字段作为键值(keyPath),也可以使用自动生成的递增数字作为键值(keyGenerator),也可以不指定。
(2)onupgradeneeded
onupgradeneeded事件在第一次打开页面初始化数据库时会被调用,或在当有版本号变化时。
(3)onsuccess
如果没有版本号变化,而且页面之前被打开过,你会获得一个onsuccess事件。
(4)transaction
增删查改四种操作都是基于transaction

db.transaction(["students"],"readwrite").objectStore("students").delete(rollNo);

截图
这里写图片描述
代码
html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>indexedDB</title>
    <style>
        .container{
            text-align: center; 
            padding-top: 150px;         
        }
    </style>
</head>
<body>
    <div class="container">
        <label for="id">Id</label>
        <input type="text" id="id">
        <br>
        <label for="name">Name</label>
        <input type="text" id="name">
        <br>
        <label for="gender">Gender</label>
        <input type="text" id="gender">
        <br>
        <button id="add">Add</button>
        <button id="modify">Modify</button>
        <button id="delete">Delete</button>
        <button id="query">Query</button>
        <div id="display"></div>
    </div>
    <script src="script.js"></script>
</body>
</html>

js

window.onload = function() {
    var id = document.getElementById("id");
    var name = document.getElementById("name");
    var gender = document.getElementById("gender");
    var add = document.getElementById("add");
    var modify = document.getElementById("modify");
    var remove = document.getElementById("delete");
    var query = document.getElementById("query");
    var display = document.getElementById("display");

    var request = indexedDB.open("animals", 1);

    request.onupgradeneeded = function() {
        var rq = this.result;
        var store = rq.createObjectStore("mamals", {keyPath: "id"});
        store.createIndex("id", "id", {unique: true});
        store.createIndex("name", "name", {unique: false});
        store.createIndex("gender", "gender", {unique: false});
    };
    request.onsuccess = function() {
        var rq = this.result;
        add.onclick = function() {
            var transaction = rq.transaction(["mamals"], "readwrite");
            var store = transaction.objectStore("mamals");
            store.add({id: parseInt(id.value), name: name.value, gender: gender.value});
        };
        modify.onclick = function() {
            var transaction = rq.transaction(["mamals"], "readwrite");
            var store = transaction.objectStore("mamals");
            store.put({id: parseInt(id.value), name: name.value, gender: gender.value});
        };
        remove.onclick = function() {
            var transaction = rq.transaction(["mamals"], "readwrite");
            var store = transaction.objectStore("mamals");
            store.delete(parseInt(id.value));
        };
        query.onclick = function() {
            display.innerHTML = "";
            var transaction = rq.transaction(["mamals"], "readwrite");
            var store = transaction.objectStore("mamals");
            var index = store.index("id");
            var cursor = index.openCursor();
            cursor.onsuccess = function() {
                var result = this.result;
                if (result) {
                    var p = document.createElement("p");
                    display.appendChild(p);
                    p.innerHTML = result.value.id + " " +
                                  result.value.name + " " +
                                  result.value.gender;
                    result.continue();
                }
            };
        };
    };
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值