前端開發工具DevTools的詳細知識點總結(二)之前端數據庫

devtools裏的前端數據庫

在devtools裏提供兩個可供使用的小型數據庫:WebSQLIndexedDB
打開devtools並跳轉到Appliciation面板,在Storage模塊下便有Web SQL和IndexedDB兩個數據庫。
在這裏插入圖片描述

WebSQL

WebSQL是前端的一個獨立模塊,是web存儲方式的一種,目前只有谷歌支持,ie和火狐均不支持。
打開一個有數據的表:在這裏插入圖片描述
WebSQ類似MySQL數據庫,也支持命令行sql命令,查詢UESRDETAIL表:
在這裏插入圖片描述
這裏我只演示一個全查操作,至於更多的CRUDSQL操作,大家可以自行嘗試。
對於清除數據庫數據,devtools裏有一個更爲簡便的操作:
點擊Application裏的Clear storage模塊,勾選WebSQL然後點擊Clear site data即可。
在這裏插入圖片描述
在這裏插入圖片描述

IndexDB

IndexedDB是瀏覽器提供的本地數據庫, 允許儲存大量數據,提供查找接口,還能建立索引。這些都是 LocalStorage 所不具備的。就數據庫類型而言,IndexedDB 不屬於關係型數據庫(不支持 SQL 查詢語句),更接近 NoSQL 數據庫。
打開一個有數據的表:
在這裏插入圖片描述
這是由於IndexedDB不支持SQL查詢,所以IndexedDB數據庫不支持直接從面板操作數據庫數據。但是,由於devtools可以訪問頁面上下文,因此可以在devtools中運行JavaScript代碼來編輯IndexedDB數據。
對於直接在面板進行刪除數據以及刪除數據庫操作有以下多種方式:
在這裏插入圖片描述
這裏可以直接刪除此數據庫。
在這裏插入圖片描述
第一行的刪除標誌可以刪除整個數據庫的數據。
點擊某一行數據右鍵可以刪除此行數據。
包括Clear storage,此操作可以刪除IndexedDB下的所有數據庫。
在這裏插入圖片描述
在這幾個面板中還有一些其它的簡單功能按鈕,在之前的面板基本都介紹過,這裏我就不重複囉嗦了,接下來看看如何用js代碼操控着兩類數據庫。

js代碼操作前端數據庫

用js代碼操作WebSQL數據庫和IndexedDB數據庫無非就是創建表以及一些基本的CRUD操作,這裏我只介紹創建表以及插入數據的操作,其它操作換湯不換藥而已。

WebSQL

核心方法

用js代碼操控WebSQL數據庫主要就是使用以下三個核心API:

  1. openDatabase:這個方法使用現有的數據庫或者新建的數據庫創建一個數據庫對象。
  2. transaction:這個方法讓我們能夠控制一個事務,以及基於這種情況執行提交或者回滾。
  3. executeSql:這個方法用於執行實際的 SQL 操作。

打開/創建數據庫

使用 openDatabase() 方法來打開已存在的數據庫,如果數據庫不存在,則會創建一個新的數據庫,代碼如下:

var dataBase = window.openDatabase('websql2', '1.0', 'userDB', 2 * 1024 * 1024, function () { });

openDatabase() 方法對應的五個參數說明:

  1. 數據庫名稱
  2. 版本號
  3. 描述文本
  4. 數據庫大小
  5. 創建回調函數

運行代碼後,devtools裏會創建一個名字爲websql2的WebSQL數據庫。
在這裏插入圖片描述

添加數據

由於WebSQL數據庫支持SQL操作,所以所有的CRUD操作都可以先編寫SQL語句然後通過executeSql函數來執行SQL語句。並且爲了保證數據安全,一般情況下executeSql函數都在transaction函數內進行操作。
代碼如下:

db.transaction(function (tx) {  
  tx.executeSql('INSERT INTO USERDETAIL (username, password) VALUES (?, ?)', [username, password]);
});

完整小案例

以下小案例利用WebSQL數據庫實現一個很簡易的用戶註冊功能。
html代碼:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>register</title>
</head>
<body>
  <form id="form" action="javascript:void(0)">
  <input id="username" name="username" type="text" placeholder="請輸入用戶名">
  <input id="oldPassword" name="oldPassword" type="password" placeholder="請輸入密碼">
  <input id="newPassword" name="newPassword" type="password" placeholder="請再次輸入密碼">
  <input type="submit" value="提 交">
  </form>
  <script src="../js//register.js"></script>
</body>
</html>

js代碼:

const form = document.getElementById('form');
form.addEventListener('submit', submitHandler);
//創建數據庫
var dataBase = window.openDatabase('websql2', '1.0', 'userDB', 2 * 1024 * 1024, function () { });
function submitHandler(e) {
  if (form.oldPassword.value != form.newPassword.value) {
    alert('兩次密碼輸入不一致,請重新輸入!');
    return;
  }
  var selectSQL = 'SELECT * FROM people WHERE USERNAME = ?';
  dataBase.transaction(function (tx) {
  //創建表
    tx.executeSql('CREATE TABLE IF NOT EXISTS people (username, password)');
    tx.executeSql(selectSQL, [form.username.value], function (ctx, result) {
      if (result.rows.length != 0) {
        alert('此用戶名已存在!');
      } else {
      //插入新數據
        tx.executeSql('INSERT INTO people (username, password) VALUES (?, ?)', [form.username.value, form.oldPassword.value]);
        alert(form.username.value+',註冊成功!');
        window.location.href='../html/login.html';
      }
    },
      function (tx, error) {
        alert('查詢失敗: ' + error.message);
      });
  });
}

在這裏插入圖片描述

IndexDB

IndexedDB 鼓勵使用的基本模式如下所示:

  1. 打開數據庫。
  2. 在數據庫中創建一個對象倉庫(object store)。
  3. 啓動一個事務,併發送一個請求來執行一些數據庫操作,像增加或提取數據等。
  4. 通過監聽正確類型的 DOM 事件以等待操作完成。
  5. 在操作結果上進行一些操作(可以在 request 對象中找到)。

打開/創建數據庫

使用indexedDB.open() 方法來打開已存在的數據庫,如果數據庫不存在,則會創建一個新的數據庫,
代碼如下:

var request = indexedDB.open("hello", 1);

這個方法接受兩個參數,第一個參數是字符串,表示數據庫的名字。如果指定的數據庫不存在,就會新建數據庫。第二個參數是整數,表示數據庫的版本。如果省略,打開已有數據庫時,默認爲當前版本;新建數據庫時,默認爲1。
indexedDB.open()方法返回一個 Request 對象。這個對象通過三種事件error、success、upgradeneeded,處理打開數據庫的操作結果。
在這裏插入圖片描述

添加數據

再次操作前,我們還需要先創建一個對象倉庫,然後啓動事務並在事務函數裏進行增添操作。
由於IndexedDB數據庫不支持SQL語句,所以其CRUD操作分別對應着四個不同的函數:
add(),delete(),push(),get()。
示例代碼:

var request = indexedDB.open("userData", 1);
const customerData = [
  { ssn: "444-44-4444", username: "Bill", password: 'dyhqg31123'}
];

request.onerror = function(event) {
  // 錯誤處理
};
request.onupgradeneeded = function(event) {
  var db = event.target.result;
  var objectStore = db.createObjectStore("people", { keyPath: "ssn" });
  objectStore.createIndex("username", "username", { unique: false });
  // 使用事務的 oncomplete 事件確保在插入數據前對象倉庫已經創建完畢
  objectStore.transaction.oncomplete = function(event) {
    // 將數據保存到新創建的對象倉庫
    var customerObjectStore = db.transaction("people", "readwrite").objectStore("people");
    customerData.forEach(function(customer) {
      //添加數據
      customerObjectStore.add(customer);
    });
  };
};

注:當創建一個新的數據庫或者增加已存在的數據庫的版本號(當打開數據庫時,指定一個比之前更大的版本號), onupgradeneeded 事件會被觸發,onupgradeneeded 是唯一可以修改數據庫結構的地方。
在這裏插入圖片描述

結語

這篇文章主要是敘述了js代碼和devtools操作前端數據庫的一些簡單操作,我本人此篇博客也參考了很多其它資料,更多有關前端數據庫的內容可參考我下面給出的鏈接。
MDN文檔:https://developer.mozilla.org/zh-CN/docs/Web/API/IndexedDB_API/Using_IndexedDB
博客園博客:https://www.cnblogs.com/ljwsyt/p/9760266.html
devtools文檔:https://developers.google.com/web/tools/chrome-devtools/storage/indexeddb

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章