效果展示
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>indexedDB</title>
</head>
<style>
fieldset {
margin-top: 50px;
padding: 30px;
}
</style>
<body>
<h3>indexedDB web数据库 增删改查</h3>
<div id="app">
<fieldset>
<button onclick="ctr('create')">添加</button>
<input id="addInput" type="text">
</fieldset>
<fieldset>
<button onclick="ctr('retrieve')">查找</button>
<input id="findInput" type="text">
<span id="viewFindResult"></span>
</fieldset>
<fieldset>
<button onclick="ctr('update')">更新</button>
<input id="updateInput" type="text">
</fieldset>
<fieldset>
<button onclick="ctr('delete')">删除</button>
<input id="delInput" type="text">
</fieldset>
<fieldset>
<button onclick="ctr('clear')">清空</button>
</fieldset>
<div>
<!-- <ol>
<li><button></button></li>
</ol> -->
<ul id="list">暂无数据</ul>
</div>
</div>~~~~
<script>
let db, version = 1
const addInputEle = document.getElementById("addInput");
const updateInputEle = document.getElementById("updateInput");
const delInputEle = document.getElementById("delInput");
const findInputEle = document.getElementById("findInput");
const viewFindResultEle = document.getElementById("viewFindResult");
const listEle = document.getElementById("list");
const request = indexedDB.open("user", version);
//监听数据库错误
request.onerror = function (e) {
console.log("onerror", e);
}
//监听数据库更新
request.onupgradeneeded = function (e) {
console.log("onupgradeneeded", e);
db = e.target.result;
var transaction = event.target.transaction
if (!db.objectStoreNames.contains("users")) {
const objectStore = db.createObjectStore("users", {
keyPath: "username"
});
objectStore.createIndex('age', 'age', {
unique: true
});;
objectStore.createIndex('fullName', 'fullName', {
unique: false
});;
}
}
//监听数据库连接成功
request.onsuccess = function (e) {
console.log("onsuccess", e);
db = e.target.result;
objectStore = db.transaction(['users'], 'readwrite')
.objectStore('users');
viewAll(objectStore)
}
//操作数据库
function ctr(method) {
if (!db) {
alert("数据库连接中")
}
objectStore = db.transaction(['users'], 'readwrite')
.objectStore('users');
switch (method) {
case "create":
createData(objectStore);
break;
case "retrieve":
retrieveData(objectStore);
break;
case "update":
updateData(objectStore);
break;
case "delete":
deleteData(objectStore);
break;
case "clear":
clearData(objectStore);
break;
}
}
//新增数据
function createData(objectStore) {
const username = addInputEle.value;
if (!username) {
alert("input为空")
return;
}
const req = objectStore
.add({
username,
age: parseInt(Math.random() * 10000000) + "",
fullName: 1
});
req.onsuccess = function (e) {
console.log('数据新增成功', e);
viewAll(objectStore);
};
req.onerror = function (e) {
console.log('数据新增失败', e);
}
}
//检索数据
function retrieveData(objectStore) {
const username = findInputEle.value;
if (!username) {
alert("input为空")
return;
}
const req = objectStore.index("age")
.get(username);
req.onsuccess = function (e) {
viewFindResultEle.innerText = e.target.result ? JSON.stringify(e.target.result) : "无此条记录";
console.log('数据检索成功', e);
};
req.onerror = function (e) {
console.log('数据检索失败', e);
}
}
//更新数据
function updateData(objectStore) {
const username = updateInputEle.value;
if (!username) {
alert("input为空")
return;
}
const req = objectStore
.put({
username,
age: 9999999999
});
req.onsuccess = function (e) {
console.log('数据更新成功', e);
viewAll(objectStore)
};
req.onerror = function (e) {
console.log('数据更新失败', e);
}
}
//删除数据
function deleteData(objectStore) {
const username = delInputEle.value;
if (!username) {
alert("input为空")
return;
}
const req = objectStore
.delete(username);
req.onsuccess = function (e) {
console.log('数据删除成功', e);
viewAll(objectStore)
};
req.onerror = function (e) {
console.log('数据删除失败', e);
}
}
//清空数据
function clearData(objectStore) {
const req = objectStore
.clear();
req.onsuccess = function (e) {
console.log('数据清空成功', e);
viewAll(objectStore)
};
req.onerror = function (e) {
console.log('数据清空失败', e);
}
}
//展示所有数据
function viewAll(objectStore) {
listEle.innerHTML = null;
var flag = 0;
objectStore.openCursor().onsuccess = function (e) {
console.log("数据列表", e);
const liEle = document.createElement("li");
var cursor = e.target.result;
if (cursor) {
flag++;
liEle.innerText = JSON.stringify(cursor.value);
listEle.appendChild(liEle);
cursor.continue();
} else {
if (flag == 0) {
listEle.innerText = "暂无数据";
} else {
flag = 0;
}
}
};
}
</script>
</body>
</html>
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。