HTML5中的Indexed Database
程序员文章站
2022-06-11 19:25:30
...
Indexed Database一种在浏览器中通过JavaScript操作的功能的数据库,为同一个源执行的程序共享空间,在同一个源拥有的空间中可以创建多个数据库,而在1个数据库中又可以创建多个对象存储。 对象存储类似于mongDB中的数据集合。
连接数据库:
var indexedDB = window.indexedDB ||
window.webkitIndexedDB ||
window.mozIndexedDB;
var db = null;
//连接数据库
var request = indexedDB.open('testdb');
//连接数据库成功
request.onsuccess = function(event) {
//使用全局变量引用数据库
db =event.target.result;
};
//连接数据库失败
request.onerror = function(event) {
alert('连接数据库失败');
};
创建对象存储:
通过调用createObjectStore方法创建,该方法只能在数据库的版本更改事务中执行,setVersion方法后会自动开启该事务。
//更改DB版本
var request = db.setVersion('1.0');
request.onsuccess= function(event) {
//创建对象存储
var store = db.createObjectStore('books',{
keyPath: '_id',
autoIncrement:true
});
}
数据的添加、删除、引用
//获得事务对象
var IDBTransaction = window.IDBTransaction || window.webkitIdbTransaction;
//添加数据函数
function addData(data){
var transaction = db.transaction(['books'],IDBTransaction.READ_WRITE);
//添加数据,也可使用put
var request = transaction.objectStore('books').add(data);
request.onsuccess = function(event) {
//若成功,返回键
var key = event.target.result;
console.log('success! key-> ',key);
};
}
//数据引用
function getData(key) {
//事务的开始
var transaction = db.transaction(['books']);
//数据的引用
var request = transaction.objectStore('books').get(key);
request.onsuccess = function(event) {
var data= event.target.result;
console.log('success data->',data);
};
}
//数据的删除
function delData(key){
//事务的开始
var transaction = db.transaction(['books'],IDBtransaction.READ_WRITE);
var request=transaction.objectStore('books').delete(key);
request.onsuccess=function(event) {
console.log('delete success');
};
}
索引的创建:只能在数据库版本更改事务中进行索引的创建
var request =db.setVersion('1.1');
request.onsuccess=function(event) {
var transaction = event.target.result;
var store=transaction.objectStore('books');
//创建索引
var index=store.createIndex('index_name','column_name');
};
使用索引检索数据
var IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction;
var IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange;
//事务和对象存储
var transation=db.transaction(['books'],IDBTransaction.READ_WRITE);
var store=transaction.objectStore('books');
//创建指定范围对象10~100
var range=IDBKeyRange.bound('10','100');
//通过索引检索数据
var request=store.index('index_name').openCursor(range);
request.onsuccess=function(event) {
//获取IDBCursor对象
var cursor=event.target.result;
//若数据存在
if(cursor){
var data =cursor.value;
//更新数据
data.name='hh';
cursor.update(data);
//cursor.delete删除该数据
//检索下一条
cursor.continue();
}
};
事务的回滚
var request =index.openCursor(keyRange);
request.onsuccess=function(event) {
var cursor=event.target.result;
if(cursor) {
//若有readonly标志
if(cursor.value.readonly){
var transaction =event.target.transaction;
//回滚
transaction.abort();
}else {
cursor.delete();
cursor.continue();
}
}
};
上一篇: JS优化与惰性载入函数实例分析
下一篇: js实现按座位号抽奖
推荐阅读
-
小强的HTML5移动开发之路(34)——jQuery中的选择器
-
字中字效果的实现【html5实例】_html5教程技巧
-
详解HTML5中canvas支持触摸屏的签名面板的示例代码
-
MySQL中DATABASE()和CURRENT_USER()函数的示例详解
-
PHP实现将HTML5中Canvas图像保存到服务器的方法
-
在ASP.NET 2.0中操作数据之六十:创建一个自定义的Database-Driven Site Map Provider
-
在数据库‘master’中拒绝CREATE DATABASE权限问题的解决方法
-
html5中localStorage本地存储的简单使用
-
详解HTML5中垂直上下居中的解决方案
-
HTML5中视频音频的使用详解