您的位置:首页 > 其它

本地存储小案例

2015-09-21 20:05 281 查看
<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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: