indexeddb的简单使用

有一天你会知道,人生没有我并不会不同
存储在IndexedDB里的数据是永久保存,不像cookies那样只是临时的。IndexedDB里提供了查询数据的功能,在online和offline模式下都能使用。你可以用IndexedDB存储大型数据。 ### IndexedDB 具有以下特点。 (1)键值对储存。 IndexedDB 内部采用对象仓库(object store)存放数据。所有类型的数据都可以直接存入,包括 JavaScript 对象。在对象仓库中,数据以“键值对”的形式保存,每一个数据都有对应的键名,键名是独一无二的,不能有重复,否则会抛出一个错误。 (2)异步。 IndexedDB 操作时不会锁死浏览器,用户依然可以进行其他操作,这与 LocalStorage 形成对比,后者的操作是同步的。异步设计是为了防止大量数据的读写,拖慢网页的表现。 (3)支持事务。 IndexedDB 支持事务(transaction),这意味着一系列操作步骤之中,只要有一步失败,整个事务就都取消,数据库回到事务发生之前的状态,不存在只改写一部分数据的情况。 (4)同域限制 IndexedDB 也受到同域限制,每一个数据库对应创建该数据库的域名。来自不同域名的网页,只能访问自身域名下的数据库,而不能访问其他域名下的数据库。 (5)储存空间大 IndexedDB 的储存空间比 LocalStorage 大得多,一般来说不少于250MB。IE的储存上限是250MB,Chrome和Opera是剩余空间的某个百分比,Firefox 则没有上限。 (6)支持二进制储存。 IndexedDB 不仅可以储存字符串,还可以储存二进制数据。

API实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
<script>
if('indexedDB' in window) {

let openRequest = indexedDB.open("yangzie",5);
let db;
openRequest.onupgradeneeded = function(e) {
console.log("数据库更新...");
//
db = e.target.result;

if (!db.objectStoreNames.contains('firstOS')){
db.createObjectStore("firstOS");
} else {
console.log('表已经存在');
}
};

openRequest.onsuccess = function(e) {
console.log("数据路打开成功!");

db = e.target.result;

// 事务
let transaction = db.transaction(["firstOS"], "readwrite");

let store = transaction.objectStore("firstOS");

let o = {p: "she is a girl"};

// 添加数据
let request = store.add(o,2);

request.onerror = function(e) {
console.log("数据添加失败!");
};

request.onsuccess = function(e) {
console.log("数据添加成功!");
};

// 修改数据
let tr = db.transaction(["firstOS"], "readwrite");

let storess = tr.objectStore("firstOS");
let p = { p:456 };
let urequest = storess.put(p, 1);

urequest.onerror = function () {
console.log("修改成功");
};

urequest.onsucces = function () {
console.log("修改失败");
};

// 获取数据
let t = db.transaction(["firstOS"], "readonly");
let stores = t.objectStore("firstOS");

let ob = stores.get(1);

ob.onsuccess = function(e) {
console.log("获取数据成功");
console.log(ob);
};

transaction.oncomplete = function(event) {
console.log('事务结束');
};

// 删除记录
let tt = db.transaction(["firstOS"], "readwrite");
let mrequest = tt.objectStore("firstOS").delete(1);

mrequest.onsuccess = function () {
console.log('删除成功');
};

mrequest.onerror = function () {
console.log('删除失败');
};
};

openRequest.onerror = function(e) {
console.log("数据库打开错误");
};

} else {
console.log('您的浏览器不支持')
}

</script>

http://javascript.ruanyifeng.com/bom/indexeddb.html