什么是IndexedDB:Web离线数据库入门简介及基础教程
来源:互联网 发布:流星网络电视成人台 编辑:程序博客网 时间:2024/06/08 17:25
IndexedDB是什么
简单来说IndexedDB是HTML5引入的一种可以在Web浏览器使用的数据库,用来持久化大量数据。它可以让你的Web应用程序有非常强大的查询能力,并且可以离线工作。IndexedDB的数据操作直接使用JS脚本,不依赖SQL语句(最初的Web SQL数据库己被废弃),操作返回均采用异步。
下文来自: IndexedDB 规范
客户端需要存储大量局部对象,以便满足Web应用程序对离线数据的要求。 [WEBSTORAGE]可以用来储存键值对(key-value pair)。然而,它无法提供按顺序检索键,高性能地按值查询,或存储重复的一个键。
本规范提供了一些具体的API来实施高级键值数据库,这是最复杂的查询处理器的核心。它通过传统数据库来存储密钥和相应的值(每个键可以对应多个值),并提供通过确定的顺序对值进行遍历。通常用于插入或删除的大量数据,以及持久化有序数据结构。
数据库初始化和创建索引
当创建的library数据库之前并不存在时,会调用onupgradeneeded接口,在这个函数中可以进行数据库初始化和创建索引;
这里创建了一个名为"library"的数据库及一个名为"books"的数据仓库(ObjectStore相当于表),并填入了一些初始数据。
var db;
var request = indexedDB.open("library");
request.onupgradeneeded = function() {
// 此数据库此前不存在,进行初始化
var db = request.result;
var store = db.createObjectStore("books", {keyPath: "isbn"});
var titleIndex = store.createIndex("by_title", "title", {unique: true});
var authorIndex = store.createIndex("by_author", "author");
// 填入初始值
store.put({title: "Quarry Memories", author: "Fred", isbn: 123456});
store.put({title: "Water Buffaloes", author: "Fred", isbn: 234567});
store.put({title: "Bedrock Nights", author: "Barney", isbn: 345678});
};
request.onsuccess = function() {
db = request.result;
};
数据存储及事务的使用
下面的例子使用事务(transaction)来填入数据:
var tx = db.transaction("books", "readwrite");
var store = tx.objectStore("books");
store.put({title: "Quarry Memories", author: "Fred", isbn: 123456});
store.put({title: "Water Buffaloes", author: "Fred", isbn: 234567});
store.put({title: "Bedrock Nights", author: "Barney", isbn: 345678});
tx.oncomplete = function() {
// All requests have succeeded and the transaction has committed.
};
数据查询:索引
下面的例子使用索引来查询其中的一本书。
var tx = db.transaction("books", "readonly");
var store = tx.objectStore("books");
var index = store.index("by_title");
var request = index.get("Bedrock Nights");
request.onsuccess = function() {
var matching = request.result;
if (matching !== undefined) {
// A match was found.
console.log(matching.isbn, matching.title, matching.author);
} else {
// No match was found.
console.log(null);
}
};
数据查询:索引与游标(cursor)
下面的例子通过索引和游标来来枚举查询到的所有匹配的书
var tx = db.transaction("books", "readonly");
var store = tx.objectStore("books");
var index = store.index("by_author");
var request = index.openCursor(IDBKeyRange.only("Fred"));
request.onsuccess = function() {
var cursor = request.result;
if (cursor) {
// Called for each matching record.
console.log(cursor.value.isbn, cursor.value.title, cursor.value.author);
cursor.continue();
} else {
// No more matching records.
console.log(null);
}
};
0 0
- 什么是IndexedDB:Web离线数据库入门简介及基础教程
- IndexedDB: 浏览器里内置的数据库简介
- indexedDB入门
- IndexedDB入门
- indexedDB 数据库
- indexedDB 数据库
- indexedDB 数据库
- indexedDB 数据库
- indexedDB 数据库
- indexedDB数据库
- IndexedDB数据库
- 《Java Web程序设计基础教程》简介
- Markdown编辑器简介及基础教程
- Java Web Start 入门基础教程
- Java Web Start入门基础教程
- Java Web Start入门基础教程
- Java Web Start 入门基础教程
- Java Web Start 入门基础教程
- C#学习(2)
- 数据库连接池C3P0学习
- 安卓范例中的R.layout.simple等放在哪
- java.lang.math与Java.Math的区别
- miss file,missing from working copy 的处理方法
- 什么是IndexedDB:Web离线数据库入门简介及基础教程
- SYS_GUID和sequence的区别
- LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- 秒杀的性能问题和超卖
- 大端、小端、网络字节序
- ThreadLocal——产生线程专有的变量(笔记)
- 阿里超大数据中心“异地双活”实践
- ffdshow
- Objective-C Runtime 运行时之一:类与对象