IDBObjectStore.put() 方法
此方法可以更新物件倉庫中指定主鍵的資料,一個非同步操作。
返回值是一個返回值是IDBRequest物件。
語法結構:
[JavaScript] 純文字檢視 複製程式碼let IDBRequest = objectStore.put(item, key);
語法解析:
(1).item:必需,新資料,用於更新原有資料。
(2).key:可選,將要更新資料的主鍵。
(3).IDBRequest:返回值是一個IDBRequest 型別物件,由此可見此方法是非同步操作。
程式碼例項:
[HTML] 純文字檢視 複製程式碼執行程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <script> let students=[ { id:1001, name:"張三", age:21, sex:"男" },{ id:1002, name:"李四", age:20, sex:"女" },{ id:1003, name:"王五", age:19, sex:"女" } ]; 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'); for(let i=0;i<students.length;i++){ objectStore.add(students[i]); } } </script> </head> <body> <p>為物件倉庫批量新增資料</p> </body> </html>
首先通過上述程式碼為資料庫新增資料,下面基本以此為基礎對put方法進行演示。
程式碼執行效果截圖如下:
下面利用IDBObjectStore.put() 方法修改第二條資料,程式碼例項如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <script> let students=[ { id:1001, name:"張三", age:21, sex:"男" },{ id:1002, name:"李四", age:20, sex:"女" },{ id:1003, name:"王五", age:19, sex:"女" } ]; 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 putRequest = objectStore.put({id:1002, name:'螞蟻部落', age:5, email:'ant@163.com'}); putRequest.onsuccess = function (event) { console.log('資料更新成功'); }; putRequest.onerror = function (event) { console.log('資料更新失敗'); } } </script> </head> <body> <p>indexedDB資料庫批量增加資料</p> </body> </html>
程式碼執行效果截圖如下:
通過IDBObjectStore.put()方法將資料倉儲中的第二條資料更新,程式碼分析如下:
(1).上述程式碼中,put方法只需要一個方法即可確定要更新的資料。
(2).因為資料的主鍵通過keyPath規定,是內鍵,儲存的資料內部包含。
(3).如果上述程式碼強行規定第二個引數為1002,那麼會報錯。
(4).通過返回值物件的success和error事件可以監聽更新是否成功。
下面看一下新增第二個引數的情況,程式碼例項如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <script> let students=[ { id:1001, name:"張三", age:21, sex:"男" },{ id:1002, name:"李四", age:20, sex:"女" },{ id:1003, name:"王五", age:19, sex:"女" } ]; 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'); for(let i=0;i<students.length;i++){ objectStore.add(students[i]); } } </script> </head> <body> <p>為物件倉庫批量新增資料</p> </body> </html>
還是批量新增資料,但是和第一段程式碼唯一不同點是,主鍵是自增長的。
程式碼執行效果截圖如下:
下面通過IDBObjectStore.put()方法更新第二條資料,程式碼例項如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <script> let students=[ { id:1001, name:"張三", age:21, sex:"男" },{ id:1002, name:"李四", age:20, sex:"女" },{ id:1003, name:"王五", age:19, sex:"女" } ]; 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 putRequest = objectStore.put({id:1002, name:'螞蟻部落', age:5, email:'ant@163.com'},2); putRequest.onsuccess = function (event) { console.log('資料更新成功'); }; putRequest.onerror = function (event) { console.log('資料更新失敗'); } } </script> </head> <body> <p>indexedDB資料庫批量增加資料</p> </body> </html>
程式碼執行效果截圖如下:
上述程式碼中因為主鍵是自增長的,資料外來鍵,資料內並不存在,所以需要通過第二個引數指定。
[HTML] 純文字檢視 複製程式碼執行程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <script> let students=[ { id:1001, name:"張三", age:21, sex:"男" },{ id:1002, name:"李四", age:20, sex:"女" },{ id:1003, name:"王五", age:19, sex:"女" } ]; 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 putRequest = objectStore.put({id:1002, name:'螞蟻部落', age:5, email:'ant@163.com'},6); putRequest.onsuccess = function (event) { console.log('資料更新成功'); }; putRequest.onerror = function (event) { console.log('資料更新失敗'); } } </script> </head> <body> <p>indexedDB資料庫批量增加資料</p> </body> </html>
程式碼執行效果截圖如下:
如果要更新的資料不存在,那麼增加對應的資料。
上述程式碼本意是更新主鍵為6的資料,但是原來資料庫不存在此資料,所以就新增此資料。
相關文章
- Java中parse方法,ValueOf方法,toString方法Java
- Java的方法靜態方法Java
- js includes方法 和 filter方法JSFilter
- 方法
- initialize方法與load方法比較
- Java System類,currentTimeMillis方法,arraycopy方法。Java
- Java方法03:方法的過載Java
- [方法]需求挖掘採集的方法
- javaSE-day04--ArrayList基本用方法、類內定義方法和方法過載、靜態方法static(類的方法)、工具方法(static)的定義和使用Java
- wait()方法與await()方法的區別AI
- Python - 物件導向程式設計 - 例項方法、靜態方法、類方法Python物件程式設計
- getPropertyPriority() 方法
- deleteRule() 方法delete
- getPropertyValue() 方法
- getBoundingClientRect() 方法GCclient
- removeProperty() 方法REM
- Equals方法
- call() 方法
- Promise then() 方法Promise
- 一、方法
- 迭代方法
- replace方法
- SpecialCells 方法
- requestFullScreen() 方法
- exitFullscreen() 方法
- toJSON() 方法JSON
- Java方法Java
- 方法引用
- Main()方法AI
- finalize方法
- 類方法
- 方法值
- 方法的過載、可變形參的方法、方法的引數值傳遞機制、遞迴方法遞迴
- Java方法02:方法的定義和呼叫Java
- Java基礎系列-equals方法和hashCode方法Java
- Java中方法重寫與方法過載Java
- net 靜態方法與非靜態方法
- 呼叫JavaCalls::call()方法來執行Java方法Java