日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

IndexedDB数据库

發布時間:2023/12/14 数据库 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 IndexedDB数据库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

IndexedDB是一種輕量級的nosql數據庫,不需要固定的表結構,通常也不存在連接操作。
在瀏覽器f12下的application下storage下的indexedDB中

indexDB中包含若干個對象倉庫,它類似于關系型數據庫的表格,對象倉庫保存的是數據記錄。每條記錄類似于關系型數據庫的行,但是只有主鍵和數據體兩部分,主鍵用來建立默認的索引,必須是不同的。主鍵可以是數據記錄里面的一個屬性,也可以指定為一個遞增的整數編號

不是所有的瀏覽器都支持indexDB數據庫,所以在使用是最好加一個判斷操作

if(window.indexedDB){//做數據庫操作 }

數據庫初始化:
創建或打開數據庫都使用open方法:

var req = indexedDB.open(name,version);

其中name是數據庫名稱的字符串,version是數據庫版本號整數,如果省略為當前版本
如果指定的數據庫存在,則打開,否則創建數據庫。indexDB的操作完全是由異步進行的,每一次indexedDB數據庫操作,都需要定義操作在成功或失敗的回調函數

if(window.indexedDB){var req = indexedDB.open(name,version);var db;req.onsuccess = function(event){db = event.target.result;}req.onerror = function(error){console.log(error.target.errorCode);}req.onupgradeneeded = function(event){db = event.target.result;} }

db代表創建或打開數據庫后獲得的數據庫實例,通過實例可以對數據庫作后續操作,onupgradeneeded會在創建數據庫或數據庫版本號升高之后自動觸發,onsuccess是創建或打開數據庫成功之后的回調函數,onupradeneeded會在onsuccess之前調用,onerror是打開或者創建失敗時的回調函數

新建數據庫和打開數據庫時同一個操作,但是新建數據庫之后的操作在upggradeneeded事件的監聽函數里面完成。

對象儲存空間:
indexedDB不是關系數據庫,它使用對象儲存空間(ObjectStore)來儲存數據,它類似于關系數據庫中的表。一個數據庫中可以包含多個對象儲存空間,對象儲存空間使用鍵值對的形式來儲存數據,即每一個數據都由一組鍵和一組值組成,值是一個JSON對象。

使用數據庫實例對象的createObjectStore方法可以創建對象儲存空間,方法如下:

var store = db.createObjectStore(name,optionalParameters); //name是對象儲存空間名字符串,后面的參數可選,代表對象儲存空間中鍵值的選項,是一個json對象配置。 我們可以使用每條記錄中的某個指定字段作為鍵值(keyPath),也可以使用自動生成的遞增數字作為鍵值(keyGenerator),也可以不指定。object鍵的選項 鍵類型 描述 不使用 可以存儲任意任意值,但是每添加一條數據的時候需要指定鍵參數 keyPath 只能儲存JavaScript對象,儲存對象的一個屬性和鍵值相同 keyGenerator 可儲存任意值,當保存新值時,可以自動生成鍵,相當于自動增長列數據庫實例對象的objectStoreName屬性中包含了數據庫所有的對象儲存空間名,在創建對象儲存空間之前,最好先判斷要創建的對象儲存空間是否存在req.onupgraadeneeded = function(event){db = event.target.result;//判斷儲存空間是否存在,沒有就創建if(!db.objectStoreNames.contains("test")){//創建對象儲存空間,鍵值是屬性Nodb.createObjectStore("test",{keyPath:"No"});} } //數據庫新建成功以后,新增一張叫test的表格,主鍵是no

主鍵(key)是默認建立索引的屬性,比如,數據記錄時{id:1.name:‘張三’},那么id屬性可以作為主鍵。
主鍵也可以指定為下一層對象的屬性,比如{ foo: {bar: ‘baz’ }}的foo.bar也可以指定為主鍵

如果數據記錄里面沒有合適作為主鍵的屬性,那么可以讓indexedDB自動生成主鍵:

var objectStore = db.createObjectStore('person',{ aautoIncrement : true} );

上面的代碼中指定主鍵為一個遞增的整數

索引:
數據庫中的索引是一個表(對象儲存空間)中所包含的值的列表,當indexedDB數據庫需要使用其他屬性(非主鍵)獲取數據時,就要預先創建索引,然后使用索引獲取數據

新建對象倉庫之后,下一步可以新建索引。

req.onupgradeneeded = function(event){db = event.target.result;var objectStore = db.createObjectStore('person',{ keyPath : 'id'});objectStore.createIndex('name','name',{ unique:false });objectStore.createIndex('emaail','email',{ unique:true }); }objectStore.createIndex()的三個參數分別為索引的名稱、索引所在的屬性、配置對象(該屬性是否重復)

新增數據:
新增數據指的是向對象倉庫寫入數據記錄。這需要通過事物完成

function aad(){//新建事物var req = db.transaction(['person'],'readwwrite').objectStore('person').add({id:1,name:'張三',age:24,email:'zhangsna@example.com'});req.onsuccess = function(event){console.log('數據寫入成功');}req.onerror = function(event){console.log('數據寫入失敗');} }add();

寫入數據時需要新建一個事物。新建時必須指定表格名稱和操作模式(只讀或者讀寫)。
新建事物以后,通過db.transaction.objectStore方法拿到ObjectStore對象,再通過表格對象的add方法,向表格寫入一條記錄

寫入是一個異步操作,通過監聽連接對象的success事件和error事件,了解是否寫入成功

讀取數據:
讀取數據也是通過事物完成

function read(){var transaction = db.transaction(['person']);var objectStore = transaction.objectStore('person');var request = objectStore.get(1);request.onerroe = function(event){console.log('事物失敗');}request.onsuccess = function(event){if(request.result){console.log(request.result.name);console.log(request.result.age);console.log(request.result.email);}else{console.log('未獲得數據記錄');}} }

objectStore.get()方法用于讀取數據,參數是主鍵的值

遍歷數據:
遍歷數據表格的所有記錄,要使用指針對象cursor

function readAll(){var objectStore = db.transaction('person').objectStore('person');objectStore.openCursor().onsuccess = function(event){var cursor = event.taarget.result;if(cursor){console.log(cursor.key);console.log(cursor.vlue.name);console.log(cursor.vlue.age);console.log(cursor.vlue.email);cursor.continue();}else{console.log('沒有數據');}} } readAll();

新建指針對象的openCursor()方法是一個異步操作,所以要監聽success事件

更新數據:

function update(){var request = db.transaction(['person'],'readwrite').objectStore('person').put({ id:1,name:'李四',age:35,email:'lisi@example.com' });request.onsuccess = function(event){console.log('數據更新失敗');} } update();

put()方法字段更新了主鍵為1的記錄

刪除數據:

function remove(){var request = db.transaction(['person'],'readwrite').objectStore('person').delete(1);request.onsuccess = function(event){console.log('數據刪除成功');} } remove();

使用索引:
索引的意義在于,可以讓你搜索任意字段,也就是說從任意字段拿到數據記錄,如果不建立索引,默認只能搜索主鍵(從主鍵取值)

假定新建表格的時候對name字段建立了索引
objectStore.createIndex(‘name’,‘name’,{unique:false});

之后就能從name找到對應的數據記錄了

var transaction = db.transactrion(['person'],'readonly'); var store = transaction.objectStore('person'); var index = store.index('name'); var request = index.get('李四'); request.onsuccess = function(e){var result = e.target.result;if(result){console.log(result);}else{console.log('數據不存在');} }

完整增刪改查代碼:
增加:

if(window.indexedDB){var req = indexedDB.open("sql");var db;req.onsuccess = function(event){db = event.target.result;}req.onerror = function(error){console.log(error.target.errorCode);}req.onupgradeneeded = function(event){db = event.target.result;if(!db.objectStoreNames.contains("test")){//創建對象儲存空間,鍵值是屬性Novar objectStore = db.createObjectStore("test",{keyPath:"id"});}objectStore.transaction.oncomplete = function(event) {var customerObjectStore = db.transaction("test", "readwrite").objectStore("test").add({ id: "555-55-5555", name: "Donna", age: 32, email: "donna@home.org" });}; }}

總結

以上是生活随笔為你收集整理的IndexedDB数据库的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。