判斷objectStore對象倉庫是否存在

2019-7-6 01:24| 作者: admin| 查看: 898| 評論: 0|來自: 螞蟻部落

通過createObjectStore()方法可以創建對象倉庫,在同一個數據庫下,倉庫名稱必須是唯一的。

如果創建同名對象倉庫,則會報錯,下面通過一段簡單代碼實例進行演示:

[HTML] 純文本查看 復制代碼运行代码
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="author" content="http://www.arpjr.tw/" />
<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.arpjr.tw/" />
<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.arpjr.tw/" />
<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()方法一章節。


鮮花

握手

雷人

路過

雞蛋

最新評論

返回頂部
大圣捕鱼2 年全年特码资料 哪个平台可以买足彩 26选5开奖 快乐12开奖号码表 秒速时时彩官网 甘肃11选5任七推荐 内蒙古时时走势全图 彩经网走势图新版 幸运pk10赛车计划 2OⅠ9年开奖号与试机号 内蒙古快3走势图2c 广东时时网 快乐飞艇 北京赛计划人工 快乐十二分钟开奖四川走图 时时彩包胆看号技巧