//打开数据库 第一个参数是字符串,表示数据库的名字。如果指定的数据库不存在,就会新建数据库
//第二个参数是整数,表示数据库的版本
var db;
function open(){
var request = window.indexedDB.open("test",3);
request.onerror = function(event){ // 数据库打开失败
console.log("数据库打开失败");
}
request.onsuccess = function(event){ // 数据库打开成功
console.log("数据库打开成功");
console.log(event);
db = request.result; // 打开成功以后通过request.result拿到数据库对象
createTable();
}
request.onupgradeneeded = function(event){ //如果指定的版本号,大于数据库的实际版本号,就会发生数据库升级事件upgradeneeded
console.log("数据库版本升级");
// db = event.target.result; //这时通过事件对象的target.result属性,拿到数据库实例。
// createTable();
}
}
open();
// 新建数据库和打开数据库是同一个操作,如果指定的数据库不存在 就会创建
// 数据库新建成功以后 新建表 person 主键是id 创建之前先判断库中是否已经有这表了
var objectStore; // 表的对象
function createTable(){
if(!db.objectStoreNames.contains('person')){ //db.objectStoreNames 查看给库中所有表
// keyPath是指定主键,如果没有合适的主键,可以自动创建createObjectStore('person',{ autoIncrement: true}); 这里指定主键为一个递增额参数
objectStore = db.createObjectStore('person',{keyPath:'id'});
// 新建索引 为数据库表的字段 三个参数 索引名称、索引所在的属性、配置对象(说明该属性是否包含重复的值)
objectStore.createIndex('name', 'name', { unique: false });
objectStore.createIndex('email', 'email', { unique: true });
objectStore.createIndex('phone', 'phone', { unique: false });
console.log("字段创建完成");
}else{
console.log(db.objectStoreNames);
console.log("字段创建完成");
// add();
// read();
// readAll();
// update();
remove();
}
}
// 新建数据 新增数据指的是向对象仓库写入数据记录。这需要通过事务完成。
//新建事务以后,通过IDBTransaction.objectStore(name)方法,拿到 IDBObjectStore 对象,再通过表格对象的add()方法,向表格写入一条记录。
function add(){
var request = db.transaction(['person'],'readwrite').objectStore('person')// 读写
.add(({ id: 3, name: '张三', email: 'zhangssan@example.com',phone:"13589958555" }));
//写入操作是一个异步操作,通过监听连接对象的success事件和error事件,了解是否写入成功。
request.onsuccess = function(event){
console.log('数据写入成功');
read();
};
request.onerror = function(event){
console.log("数据写入失败");
console.log(event);
};
}
// 读取数据 objectStore.get()方法用于读取数据,参数是主键的值。
function read(){
var request = db.transaction(['person']).objectStore('person').get(3);
request.onerror = function(event){
console.log("读取失败");
}
request.onsuccess = function(event){
if(event.srcElement.result){
console.log('成功获取数据');
console.log(event.srcElement.result);
}else{
console.log('未获得数据记录');
}
}
}
// 遍历数据 遍历数据表格的所有记录,要使用指针对象 IDBCursor。
function readAll(){
var objectStore = db.transaction('person').objectStore('person');
//新建指针对象的openCursor()方法是一个异步操作,所以要监听success事件。
objectStore.openCursor().onsuccess = function(event){
var data = event.target.result;
if(data){
console.log(data);
data.continue(); // 读取完后再次读取
}else{
console.log("没有数据了");
}
}
}
// 更新数据
function update(){
var request = db.transaction(['person'],'readwrite').objectStore('person')// 读写
.put(({ id: 3, name: '张三', email: 'zhangssan@example.com',phone:"13589958555" }));
request.onsuccess = function(evnet){
console.log('数据更新成功');
}
request.onerror = function(){
console.log('数据更新失败');
}
}
// 删除数据
function remove(){
var request = db.transaction(['person'],'readwrite').objectStore('person').delete(1);
request.onsuccess = function(){
console.log('数据删除成功');
}
}
// 根据索引查找数据 需要在新建表格的时候 对phone字段建立索引
//objectStore.createIndex('name', 'name', { unique: false });
//根据phone找到对应数据记录
function indexSearch(){
var transaction = db.transaction(['person'], 'readonly');
var store = transaction.objectStore('person');
var index = store.index('phone');
var request = index.get('13585558555');
request.onsuccess = function (e) {
var result = e.target.result;
if (result) {
// ...
} else {
// ...
}
}
}
indexedDB 数据库增删改查
最新推荐文章于 2023-09-09 16:00:00 发布