IDBObjectStore.add() 方法
此方法可以為indexedDB資料指定物件倉庫新增一條記錄。
add方法是一個非同步操作,返回值是IDBRequest型別物件,通過物件相關事件獲取操作狀態。
關於indexedDB資料非同步操作介紹可以參閱IndexedDB 非同步API概述一章節。
語法結構:
[JavaScript] 純文字檢視 複製程式碼let request = objectStore.add(value, key);
引數解析:
(1).value:必需,將要被新增的記錄值。
(2).key:可選,將要被新增記錄的主鍵。
程式碼例項:
[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; if (!db.objectStoreNames.contains('students')) { let objectStore = db.createObjectStore('students',{keyPath:"id"}); objectStore.createIndex("xingbie","sex",{ unique: false }); } } request.onsuccess = (ev) => { let db = ev.target.result; let transaction = db.transaction(['students'], 'readwrite'); let objectStore = transaction.objectStore('students'); let addRequest = objectStore.add({ id:1, name:"螞蟻部落", age:20, sex:"男" }); addRequest.onsuccess = (ev) => { console.log("新增成功"); } addRequest.onerror = (ev) => { console.log("新增失敗"); } } </script> </head> <body> <p>為物件倉庫新增資料</p> </body> </html>
程式碼執行效果截圖如下:
通過add()方法為物件倉庫新增一條記錄,程式碼分析如下:
(1).createObjectStore()方法建立一個物件倉庫,並規定記錄的主鍵為儲存物件的id屬性值。
(2).通過add()方法將對應的物件新增到物件倉庫,可以看到記錄的主鍵為1。
特別說明:
(1).如果儲存的資料不具有id屬性,那麼將會報錯。
(2).如果createObjectStore()方法規定主鍵是自增長,使用方式與上述程式碼相同。
如果createObjectStore()方法沒有使用規定主鍵所在的屬性,也沒有將主鍵規定為自增長。
那麼使用add()方法新增記錄的時候,需要通過第二個引數明確規定主鍵。
程式碼例項如下:
[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; if (!db.objectStoreNames.contains('students')) { let objectStore = db.createObjectStore('students'); objectStore.createIndex("xingbie","sex",{ unique: false }); } } request.onsuccess = (ev) => { let db = ev.target.result; let transaction = db.transaction(['students'], 'readwrite'); let objectStore = transaction.objectStore('students'); let addRequest = objectStore.add({ id:1, name:"螞蟻部落", age:20, sex:"男" },"key"); addRequest.onsuccess = (ev) => { console.log("新增成功"); } addRequest.onerror = (ev) => { console.log("新增失敗"); } } </script> </head> <body> <p>為物件倉庫新增資料</p> </body> </html>
程式碼執行效果截圖如下:
通過add()方法第二個引數規定了記錄的主鍵。
如果createObjectStore()方法規定主鍵是自增長,也可以通過add()方法第二個引數設定主鍵。
程式碼例項如下:
[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; if (!db.objectStoreNames.contains('students')) { let objectStore = db.createObjectStore('students',{autoIncrement:true}); objectStore.createIndex("xingbie","sex",{ unique: false }); } } request.onsuccess = (ev) => { let db = ev.target.result; let transaction = db.transaction(['students'], 'readwrite'); let objectStore = transaction.objectStore('students'); let addRequest = objectStore.add({ id:1, name:"螞蟻部落", age:20, sex:"男" },"key"); addRequest.onsuccess = (ev) => { console.log("新增成功"); } addRequest.onerror = (ev) => { console.log("新增失敗"); } } </script> </head> <body> <p>為物件倉庫新增資料</p> </body> </html>
程式碼執行效果截圖如下:
雖然規定是自增長,但是add()方法第二個引數規定的值優先順序更高。
當同時規定自增長和keyPath的時候,如下:
[JavaScript] 純文字檢視 複製程式碼let objectStore = db.createObjectStore('students',{ autoIncrement:true, keyPath:"id" });
上述情況,add()方法的第二個引數不會生效,資料新增會失敗。
相關文章
- Java中parse方法,ValueOf方法,toString方法Java
- Python例項方法、類方法、靜態方法Python
- js includes方法 和 filter方法JSFilter
- Java的方法靜態方法Java
- show()方法和hide()方法IDE
- 方法
- 徹底理解了call()方法,apply()方法和bind()方法APP
- Python Class 的例項方法/類方法/靜態方法Python
- slideUp()方法和slideDown()方法IDE
- Java方法03:方法的過載Java
- 物件導向2--靜態方法、類方法、屬性方法物件
- javaSE-day04--ArrayList基本用方法、類內定義方法和方法過載、靜態方法static(類的方法)、工具方法(static)的定義和使用Java
- 來看看兩種好玩的方法,擴充套件方法和分部方法套件
- initialize方法與load方法比較
- Java System類,currentTimeMillis方法,arraycopy方法。Java
- jQuery方法原始碼定位簡單方法jQuery原始碼
- 細說equals()方法和hashCode()方法
- prop()方法和attr()方法的區別
- 詳解equals()方法和hashCode()方法
- exitFullscreen() 方法
- Promise then() 方法Promise
- removeProperty() 方法REM
- deleteRule() 方法delete
- getPropertyPriority() 方法
- getPropertyValue() 方法
- javascriptreplaceAll方法JavaScript
- main方法AI
- 字串方法字串
- 方法引用
- Java方法Java
- call() 方法
- 類方法
- Main()方法AI
- 【MyBatis原始碼分析】insert方法、update方法、delete方法處理流程(上篇)MyBatis原始碼delete
- 【MyBatis原始碼分析】insert方法、update方法、delete方法處理流程(下篇)MyBatis原始碼delete
- 方法的過載、可變形參的方法、方法的引數值傳遞機制、遞迴方法遞迴
- jQuery中過濾方法slice()方法如何使用?jQuery
- Java方法02:方法的定義和呼叫Java