自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

詳細了解SQL.js的基本特性

數(shù)據(jù)庫 MySQL
在本教程中,我們將討論 SQL.js,這是一個 JavaScript SQL 庫,可讓您完全在瀏覽器中創(chuàng)建和查詢關(guān)系數(shù)據(jù)庫。

SQL,即結(jié)構(gòu)化查詢語言,是一種特定領(lǐng)域的語言,旨在訪問和操作關(guān)系數(shù)據(jù)庫中的數(shù)據(jù)。在SQL語句的幫助下,你可以在關(guān)系型數(shù)據(jù)庫上執(zhí)行創(chuàng)建、更新、檢索和刪除數(shù)據(jù)等操作。

關(guān)系數(shù)據(jù)庫是一種數(shù)據(jù)模型,它使用行和列將數(shù)據(jù)組織在一個表中。雖然可能有多個使用SQL的關(guān)系數(shù)據(jù)庫管理系統(tǒng),但幾乎所有這些系統(tǒng)都被設計為服務器端進程。其中包括:

  • MySQL
  • PostgreSQL
  • SQLite
  • MSSQL

在本教程中,我們將討論 SQL.js,這是一個 JavaScript SQL 庫,可讓您完全在瀏覽器中創(chuàng)建和查詢關(guān)系數(shù)據(jù)庫。

[[412467]]

我們將通過以下步驟,以每個部分的詳細例子來說明

  • 什么是SQL.js?
  • 使用SQL.js的利弊
  • 安裝(瀏覽器和 Node.js)
  • 編寫 SQL 查詢和準備好的語句

什么是SQL.js?

SQL.js是一個JavaScript庫,允許你完全在瀏覽器中創(chuàng)建和查詢一個關(guān)系數(shù)據(jù)庫。它使用一個存儲在瀏覽器內(nèi)存中的虛擬數(shù)據(jù)庫文件,所以它不會持久化對數(shù)據(jù)庫的修改。

這個庫還使用Emscripten將SQLite編譯成WebAssembly (Wasm)。有了這個功能,你可以很容易地把現(xiàn)有的SQLite數(shù)據(jù)庫引入到SQL.js中使用,也可以把在SQL.js中創(chuàng)建的數(shù)據(jù)庫轉(zhuǎn)換成SQLite。

使用SQL.js的利弊

使用SQL.js有幾個好處。它是為客戶端建立的,并完全在客戶端工作,這意味著它不需要任何服務器端的進程來工作。它比MySQL、PostgreSQL和其他需要第三方軟件才能使用的軟件更容易設置。開始使用SQL.js就像在一個現(xiàn)有的HTML項目中安裝jQuery一樣容易。而且SQL.js提供了對執(zhí)行包含多個語句的單個SQL字符串的支持,如下圖所示。

  1. sqlstr = "CREATE TABLE tableName(colA, colB);"
  2. sqlstr += "INSERT INTO hello VALUES (0, 'hello');" 
  3.     .... 

但也有一個重要的缺點:使用 SQL.js 時對數(shù)據(jù)庫的更改不是持久的。再讀一遍:當你重新加載瀏覽器時,對你的數(shù)據(jù)庫所做的所有改變都將不復存在。這是因為SQL.js使用了一個存儲在瀏覽器內(nèi)存中的虛擬數(shù)據(jù)庫文件。然而,你可以導入任何現(xiàn)有的SQLite文件,并將創(chuàng)建的數(shù)據(jù)庫導出為一個JavaScript類型的數(shù)組。

安裝 SQL.js

(1) 瀏覽器安裝

將SQL.js整合到一個新的基于客戶端的項目中是非常容易的。你可以通過包括CDN或下載源文件并將其鏈接到你的標記頁面來開始。

默認情況下,SQL.js 使用 WebAssembly,除了 JavaScript 庫外,還需要加載 .wasm 文件。你可以在網(wǎng)上下載這個文件,并使用locateFile 功能在你的網(wǎng)頁中加載這個文件,像這樣。

  1. <!DOCTYPE html> 
  2. <html lang="en"> 
  3.   <head> 
  4.     <title>Page Title</title> 
  5.     <script src="https://cdnjs.cloudflare.com/ajax/libs/sql.js/1.5.0/sql-wasm.js"></script> 
  6.     <script> 
  7.       // Load sql.js WebAssembly file 
  8.       let config = { 
  9.         locateFile: () => "/path/to/downloaded/sql-wasm.wasm", 
  10.       }; 
  11.       initSqlJs(config).then(function (SQL) { 
  12.           console.log("sql.js initialized "); 
  13.       }); 
  14.     </script> 
  15.   </head> 
  16.   <body></body> 
  17. </html> 

在上面的代碼塊中,我們使用 initSqlJs 異步加載Wasm二進制文件,并在加載所需文件后初始化SQL.js。

(2) Node.js安裝

在基于 Node 的項目中安裝 SQL.js 也非常簡單。要安裝它,您只需運行:

  1. npm install sql.js 

或者,你可以從前面的鏈接中下載 sql-wasm.js 和 sql-wasm.wasm,并使用Node.js的 require 函數(shù)在你的項目中加載它們。

另外,在基于Node的項目中,你可以跳過 locateFile 方法來加載 sql-wasm.wasm文件,因為如果它和你正在處理的文件在同一個文件夾中,它將自動加載。所以我們的代碼將看起來像這樣。

  1. var initSqlJs = require("./sql-wasm.js"); 
  2.  
  3. initSqlJs().then(function (SQL) { 
  4.   console.log("sql.js initialized "); 
  5. }); 

編寫 SQL 查詢和準備好的語句

現(xiàn)在我們已經(jīng)完成了安裝和初始化 SQL.js 的所有必要步驟,讓我們深入了解它的用法。

(1) 創(chuàng)建數(shù)據(jù)庫

下面的代碼創(chuàng)建一個新的數(shù)據(jù)庫:

  1. const db = new SQL.Database(); 

值得注意的是,SQL.Database() 方法接受一個可選參數(shù) data,它必須是一個表示 SQLite 數(shù)據(jù)庫文件的 Uint8Array。例如,在 Node.js 中,我們可以加載一個現(xiàn)有的 .sqlite 文件,如下所示:

  1. let fs = require("fs"); 
  2. let initSqlJs = require("./sql-wasm.js"); 
  3. let filebuffer = fs.readFileSync("/path/to/sample.sqlite"); 
  4.  
  5. initSqlJs().then(function (SQL) { 
  6.   // Create a new database with our existing sample.sqlite file 
  7.   const db = new SQL.Database(filebuffer); 
  8. }); 

在上面的代碼中,我們使用內(nèi)置的 Node.js fs 和 path 模塊來讀取我們現(xiàn)有的 sample.sqlite 文件。

(2) 運行 SQL 語句

SQL 語句可以是在數(shù)據(jù)庫中創(chuàng)建或檢索一條信息或?qū)ΜF(xiàn)有數(shù)據(jù)執(zhí)行操作的請求。

使用SQL.js,你可以很容易地運行一個語句,而不讀取其結(jié)果。語法如下所示。

  1. db.run(stmt); 

當然,參數(shù) stmt 是你的SQL語句。下面是一個例子,說明如何在我們的數(shù)據(jù)庫中創(chuàng)建一個名為 users 的新表,其中有ID、姓名、電話號碼和地址等列。它還將在此表中插入一個新行。

  1. let initSqlJs = require("./sql-wasm.js"); 
  2.  
  3. initSqlJs().then(function (SQL) { 
  4.   const db = new SQL.Database(); 
  5.   // RUNNING SQL QUERIES  
  6.   db.run("CREATE TABLE users (id, name, phone, address);"); 
  7.   db.run( 
  8.     `INSERT INTO users (id, name, phone, address) 
  9.         VALUES (1, 'John Doe', '+234-907788', '12 Igodan Street, Okitipupa')` 
  10.   ); 
  11. }); 

(3) 準備好的 SQL 語句

你可以使用準備好的語句來重復執(zhí)行相同或類似的SQL語句,而且效率很高。準備好的語句比運行中的SQL語句有更短的解析時間,因為對查詢的準備工作只做一次。它們對防止SQL注入也非常有用,因為你不需要轉(zhuǎn)義參數(shù)值,這些參數(shù)值隨后會使用不同的協(xié)議傳輸。

使用 SQL.js,我們還可以使用 .prepare() 方法編寫準備好的語句:

  1. var stmt = db.prepare(preparedStatement); 

以下是在我們之前的數(shù)據(jù)庫中獲取 ID 介于 1 和 10 之間的所有用戶的示例:var stmt = db.prepare("SELECT * FROM users WHERE id BETWEEN $start AND $end");

  1. stmt.bind({ $start: 1, $end: 2 }); 
  2. while (stmt.step()) { 
  3.   var row = stmt.getAsObject(); 
  4.   console.log("Here is a user row: " + JSON.stringify(row)); 

在寫完我們準備好的SQL語句后,我們使用 .bind() 方法來綁定我們的語句所需的值(上例中的 start 和 end )。繼續(xù)前進,我們將使用一個 while 循環(huán)來返回所有可能的行,并將它們記錄到控制臺。

(4) 將數(shù)據(jù)庫寫入磁盤

SQL.js還提供了一個選項,通過 db.export() 方法將數(shù)據(jù)庫導出/寫入磁盤,成為一個 .sqlite 文件。結(jié)果將以 Uint8Array 形式返回,你可以使用Node.js Buffer 類和文件系統(tǒng)包將數(shù)據(jù)庫寫入磁盤。

  1. var fs = require("fs"); 
  2. /*** 
  3.   Code to create a database here 
  4. ***/ 
  5. // Export database  
  6. var data = db.export(); 
  7. var buffer = new Buffer(data); 
  8. fs.writeFileSync("new-db.sqlite", buffer); 

運行上面的代碼后,您應該在項目根文件夾中看到一個名為 new-db.sqlite 的新文件。

總結(jié)

在本文中,我們介紹了 SQL.js、它提供的功能以及如何在實際應用程序中使用它。雖然SQL.js可能非常適合構(gòu)建一個離線優(yōu)先的應用程序,如記事本應用程序,但在你想從管理面板管理用戶數(shù)據(jù)的情況下,你可能要考慮使用其他關(guān)系數(shù)據(jù)庫(MySQL、PostgreSQL)。

 

責任編輯:趙寧寧 來源: 今日頭條
相關(guān)推薦

2009-07-06 16:05:50

JSP特點

2022-03-08 08:44:13

偏向鎖Java內(nèi)置鎖

2010-10-21 15:26:35

SQL Server字

2021-04-13 09:07:33

InnoDB內(nèi)存結(jié)構(gòu)

2010-11-12 14:29:46

Sql Server創(chuàng)

2010-04-16 11:08:23

2010-11-16 09:55:12

Oracle分區(qū)索引

2011-06-07 11:21:04

JSP隱含對象

2011-07-28 10:40:40

Cocoa KVO

2011-08-25 15:10:49

LUAWindows環(huán)境配置

2011-07-01 14:34:02

Thread Affinity 信號

2010-10-25 11:51:05

Oracle單行字符串

2018-11-27 15:55:21

TCP通訊協(xié)議

2021-06-12 07:38:21

Linkerd 2.Service Mes微服務

2019-12-10 11:22:22

Kubernetes云計算容器

2023-10-13 07:54:49

數(shù)據(jù)庫MySQL

2011-04-20 10:02:22

PowerShell

2010-08-06 11:20:10

路由信息協(xié)議RIP

2009-11-30 13:51:37

2010-02-05 18:09:12

Android
點贊
收藏

51CTO技術(shù)棧公眾號