判断objectStore对象仓库是否存在

2019-7-6 01:24| 作者: admin| 查看: 322| 评论: 0|来自: 蚂蚁部落

通过createObjectStore()方法可以创建对象仓库,在同一个数据库下,仓库名称必须是唯一的。

如果创建同名对象仓库,则会报错,下面通过一段简单代码实例进行演示:

[HTML] 纯文本查看 复制代码运行代码
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>蚂蚁部落</title>
<script>
let request = window.indexedDB.open("antzone", 1);
request.onupgradeneeded  = (ev) => {
  let db = ev.target.result;
  let objectStore = db.createObjectStore("students",{ keyPath: 'id' });
  objectStore.createIndex('studentName', "name", { unique: false });
}
</script>
</head>
<body>
</body>
</html>

通过上面代码可以创建一个名为antzone的数据库,然后在其中添加名为students对象仓库。

为了查询方便,最后通过objectStore.createIndex方法创建索引。

代码运行效果截图如下:

a:3:{s:3:\"pic\";s:43:\"portal/201907/06/012526m8vv5tpjt8ou3jop.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

此时要修改一下数据库结构,那么必须要将数据库版本提升,以此触发upgradeneeded事件。

如果再次创建同名数据库仓库就会报错,代码修改如下:

[HTML] 纯文本查看 复制代码运行代码
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>蚂蚁部落</title>
<script>
let request = window.indexedDB.open("antzone", 2);
request.onupgradeneeded  = (ev) => {
  let db = ev.target.result;
  let objectStore = db.createObjectStore("students",{ keyPath: 'id' });
  objectStore.createIndex('studentName', "name", { unique: false });
}
</script>
</head>
<body>
</body>
</html>

将数据库的版本修改为2,那么会触发upgradeneeded,再次创建同名对象仓库。

谷歌开发者工具控制台报错如下:

a:3:{s:3:\"pic\";s:43:\"portal/201907/06/012606rayq7arozfn3nhhh.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

所以需要判断一下是否已经存在同名对象仓库,代码修改如下:

[HTML] 纯文本查看 复制代码运行代码
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>蚂蚁部落</title>
<script>
let request = window.indexedDB.open("antzone", 2);
request.onupgradeneeded  = (ev) => {
  let db = ev.target.result;
  if (!db.objectStoreNames.contains('students')) {
    let objectStore = db.createObjectStore("students",{ keyPath: 'id' });
    objectStore.createIndex('studentName', "name", { unique: false });
  }
}
</script>
</head>
<body>
</body>
</html>

上面代码完成了判断功能,数据库对象的objectStoreNames属性可以返回所有的对象仓库名称。

返回值类型是DOMStringList 对象(字符串的集合),contains方法可以检测对象仓库名称是否已经存在。

相关阅读:

(1).创建对象仓库参阅createObjectStore()方法一章节。

(2).创建数据库参阅indexedDB.open()方法一章节。

(3).创建索引参阅createIndex()方法一章节。


鲜花

握手

雷人

路过

鸡蛋

最新评论

返回顶部