码迷,mamicode.com
首页 > 其他好文 > 详细

本地存储小案例

时间:2015-09-21 21:18:26      阅读:264      评论:0      收藏:0      [点我收藏+]

标签:

<script>
        //创建indexedDB对象
        window.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
        window.IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction || window.msIDBTransaction;
        window.IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange || window.msIDBKeyRange;
        window.IDBCursor = window.IDBCursor || window.webkitIDBCursor || window.msIDBCursor;

        //创建数据库连接
        function connectDatabase() {
            var dbName = "indexDBtest";
            var dbVersion = 1;
            var idb;
            var dbConnect = indexedDB.open(dbName,dbVersion);
            dbConnect.onsuccess = function (e) {
                idb = e.target.result;
                alert("数据库连接成功");
            }
            dbConnect.onerror = function () {
                alert("连接失败");
            }
        }

        //更新数据库版本
        function VersionUpdate() {
            var dbName = "indexDBtest";
            var dbVersion = 2;
            var idb;
            var dbConnect = indexedDB.open(dbName, dbVersion);
            dbConnect.onsuccess = function (e) {
                idb = e.target.result;
                alert("数据库连接成功");
            }
            dbConnect.onerror = function () {
                alert("数据库连接失败");
            }
            dbConnect.onupgradeneeded = function (e) {
                idb = e.target.result;
                var tx = e.target.transaction;
                var oldVersion = e.oldVersion;
                var newVersion = e.newVersion;
                alert("数据库更新成功" + oldVersion + "---" + newVersion);
            }
        }

        //创建仓库
        function CreateObjectStore() {
            var dbName = "indexDBtest";
            var dbVersion = 3;
            var idb;
            var dbConnect = indexedDB.open(dbName,dbVersion);
            dbConnect.onsuccess = function (e) {
                idb = e.target.result;
                alert("数据库连接成功");
            }
            dbConnect.onerror = function () {
                alert("数据库连接失败");
            }
            dbConnect.onupgradeneeded = function (e) {
                idb = e.target.result;
                var name = "user";
                var optionalParameters = {
                    keyPath :"userid",
                    autoIncrement:false
                };
                var store = idb.createObjectStore(name,optionalParameters);
                alert("对象仓库创建成功");
            }
        }
    </script>

 <script>
        //索引及游标的使用
        var myDB = {
            name: "helloindexDB",
            version: 1,
            db: null
        };

        var students = [{
            id: 101,
            name: "aa",
            age: 11
        }, {
            id: 102,
            name: "bb",
            age: 11
        }, {
            id: 103,
            name: "cc",
            age: 11
        }, {
            id: 104,
            name: "dd",
            age: 14
        }];

        function openDB(name, version) {
            var version = version || 1;
            var request = window.indexedDB.open(name, version);
            request.onerror = function (e) {

            }
            request.onsuccess = function (e) {
                myDB.db = e.target.result;
            }
            request.onupgradeneeded = function (e) {
                var db = e.target.result;
                if (!db.objectStoreNames.contains("students")) {
                    var store = db.createObjectStore("students", { keyPath: "id" });
                    store.createIndex("nameIndex", "name", { unique: true });
                    store.createIndex("ageIndex", "age", { unique: false });
                }
            }
        }

        function addData(db, storeName) {
            var transaction = db.transaction(storeName, "readwrite");
            var store = transaction.objectStore(storeName);
            for (var i = 0; i < students.length; i++) {
                store.add(students[i]);
            }
        }

        openDB(myDB.name, myDB.version);
        setTimeout(function () {
            addData(myDB.db, "students");
        }, 1000);

        //通过姓名索引获取数据
        function getDataByIndexName(db, storeName) {
            var transaction = db.transaction(storeName);
            var store = transaction.objectStore(storeName);
            var index = store.index("nameIndex");
            index.get("aa").onsuccess = function (e) {
                var student = e.target.result;
                //console.log("nameIndex:" + student.name + "--" + student.age + "--" + student.id);
            };
        }
        setTimeout(function () {
            getDataByIndexName(myDB.db, "students");
        }, 1000);

        //通过年龄索引获取数据
        function getDataByIndexAge(db, storeName) {
            var transaction = db.transaction(storeName);
            var store = transaction.objectStore(storeName);
            var index = store.index("ageIndex");
            //多个11,但只取出一个
            index.get(11).onsuccess = function (e) {
                var student = e.target.result;
                //console.log("ageIndex:" + student.name + "--" + student.age + "--" + student.id);
            };
        }
        setTimeout(function () {
            getDataByIndexAge(myDB.db, "students");
        }, 1000);

        //游标
        function fetchStoreByCursor(db, storeName) {
            var transaction = db.transaction(storeName);
            var store = transaction.objectStore(storeName);
            var request = store.openCursor();
            request.onsuccess = function (e) {
                var cursor = e.target.result;
                if (cursor) {
                    //console.log(cursor.key);
                    var currentStudent = cursor.value;
                    //console.log(currentStudent.name);
                    //游标下移,获取下一条数据
                    cursor.continue();
                }
            }
        }
        setTimeout(function () {
            fetchStoreByCursor(myDB.db, "students");
        }, 1000);


        //index与游标配合
        function getDataByCursor(db,storeName) {
            var transaction = db.transaction(storeName);
            var store = transaction.objectStore(storeName);
            var index = store.index("ageIndex");
            var request = index.openCursor(IDBKeyRange.only(11));
            request.onsuccess = function (e) {
                var cursor = e.target.result;
                if (cursor) {
                    var student = cursor.value;
                    //console.log(student.id);
                    cursor.continue();
                }
            };
        }
        setTimeout(function () {
            getDataByCursor(myDB.db,"students");
        }, 500);

        //根据游标范围获取数据
        //IDBKeyRange.only(value); 只获取指定数据
        //IDBKeyRange.lowerBound(value,isopen); 获取最小是value,第二个参数用来表示是否包含最小值本身(即value为5,是否包含5)
        //IDBKeyRange.upperBound(value,isopen); 
        //IDBKeyRange.bound(value1,value2,isopen1,isopen2)
        function getDataByCursorRange(db,storeName) {
            var transaction = db.transaction(storeName);
            var store = transaction.objectStore(storeName);
            var index = store.index("nameIndex");
            var request = index.openCursor(IDBKeyRange.bound("b","z",false,true));
            request.onsuccess = function (e) {
                var cursor = e.target.result;
                if (cursor) {
                    var student = cursor.value;
                    console.log(student.id);
                    cursor.continue();
                }
            };
        }
        setTimeout(function () {
            getDataByCursorRange(myDB.db, "students");
        }, 500);
    </script>

以上是IndexedDB。

 

Web Storage:

function saveStorage(id) {
    var data = document.getElementById(id).value;
    var time = new Date().getTime();
    //保存数据
    localStorage.setItem(time, data);
    alert("数据已存储");
    loadStorage(‘msg‘);
}

function loadStorage(id) {
    var result = "<table border = ‘1‘>";
    for (var i = 0; i < localStorage.length; i++) {
        var key = localStorage.key(i);
        var value = localStorage.getItem(key);
        var date = new Date();
        date.setTime(key);
        result += "<tr><td>" + value + "</td><td>" + date + "</td></tr>";
    }
    result += "</table>";
    var target = document.getElementById(id);
    target.innerHTML = result;
}

function clearStorage(id) {
    localStorage.clear();
    alert("数据已经删除");
    loadStorage(‘msg‘);
}

 

Web SQL Database:

<body onload="init()">
    <table>
        <tr><td>姓名:</td><td><input type="text" id="name" /></td></tr>
        <tr><td>留言:</td><td><input type="text" id="memo" /></td></tr>
        <tr>
            <td></td>
            <td><input type="button" value="保存" onclick="saveData()"/></td>
        </tr>
    </table>
    <hr />
    <table id="datatable" border="1">
        <p id="msg"></p>
    </table>
</body>

var datatable = null;
var db = openDatabase("MyData", "", "My Database", 1024 * 100);
function init() {
    datatable = document.getElementById("datatable");
    showAllData();
}

//删除所有数据
function removeAllData() {
    for (var i = datatable.childNodes.length - 1; i >= 0; i--) {
        datatable.removeChild(datatable.childNodes[i]);
    }
    var tr = document.createElement("tr");
    var th1 = document.createElement("th");
    var th2 = document.createElement("th");
    var th3 = document.createElement("th");
    th1.innerHTML = "姓名";
    th2.innerHTML = "留言";
    th3.innerHTML = "时间";
    tr.appendChild(th1);
    tr.appendChild(th2);
    tr.appendChild(th3);
    datatable.appendChild(tr);
}

//显示数据
function showData(row) {
    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 showAllData() {
    db.transaction(function (tx) {
        tx.executeSql("CREATE TABLE IF NOT EXISTS MsgData(name TEXT,message TEXT, time INTEGER)", []);
        tx.executeSql("SELECT * FROM MsgData", [], function (tx, rs) {
            removeAllData();
            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 MsgData VALUES(?,?,?)", [name, message, time], function () {
            alert("成功");
        }, function (tx, error) {
            alert(error.source + ":" + error.message);
        });
    });
}

//保存数据
function saveData() {
    var name = document.getElementById("name").value;
    var memo = document.getElementById("memo").value;
    var time = new Date().getTime();
    addData(name, memo, time);
    showAllData();
}

 

本地存储小案例

标签:

原文地址:http://www.cnblogs.com/len0031/p/4827142.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!