文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

详细了解SQL.js的基本特性

2024-12-03 00:49

关注

关系数据库是一种数据模型,它使用行和列将数据组织在一个表中。虽然可能有多个使用SQL的关系数据库管理系统,但几乎所有这些系统都被设计为服务器端进程。其中包括:

在本教程中,我们将讨论 SQL.js,这是一个 JavaScript SQL 库,可让您完全在浏览器中创建和查询关系数据库。

[[412467]]

我们将通过以下步骤,以每个部分的详细例子来说明

什么是SQL.js?

SQL.js是一个JavaScript库,允许你完全在浏览器中创建和查询一个关系数据库。它使用一个存储在浏览器内存中的虚拟数据库文件,所以它不会持久化对数据库的修改。

这个库还使用Emscripten将SQLite编译成WebAssembly (Wasm)。有了这个功能,你可以很容易地把现有的SQLite数据库引入到SQL.js中使用,也可以把在SQL.js中创建的数据库转换成SQLite。

使用SQL.js的利弊

使用SQL.js有几个好处。它是为客户端建立的,并完全在客户端工作,这意味着它不需要任何服务器端的进程来工作。它比MySQL、PostgreSQL和其他需要第三方软件才能使用的软件更容易设置。开始使用SQL.js就像在一个现有的HTML项目中安装jQuery一样容易。而且SQL.js提供了对执行包含多个语句的单个SQL字符串的支持,如下图所示。

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

但也有一个重要的缺点:使用 SQL.js 时对数据库的更改不是持久的。再读一遍:当你重新加载浏览器时,对你的数据库所做的所有改变都将不复存在。这是因为SQL.js使用了一个存储在浏览器内存中的虚拟数据库文件。然而,你可以导入任何现有的SQLite文件,并将创建的数据库导出为一个JavaScript类型的数组。

安装 SQL.js

(1) 浏览器安装

将SQL.js整合到一个新的基于客户端的项目中是非常容易的。你可以通过包括CDN或下载源文件并将其链接到你的标记页面来开始。

默认情况下,SQL.js 使用 WebAssembly,除了 JavaScript 库外,还需要加载 .wasm 文件。你可以在网上下载这个文件,并使用locateFile 功能在你的网页中加载这个文件,像这样。

  1. > 
  2. <html lang="en"> 
  3.   <head> 
  4.     <title>Page Titletitle> 
  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 函数在你的项目中加载它们。

另外,在基于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 查询和准备好的语句

现在我们已经完成了安装和初始化 SQL.js 的所有必要步骤,让我们深入了解它的用法。

(1) 创建数据库

下面的代码创建一个新的数据库:

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

值得注意的是,SQL.Database() 方法接受一个可选参数 data,它必须是一个表示 SQLite 数据库文件的 Uint8Array。例如,在 Node.js 中,我们可以加载一个现有的 .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. }); 

在上面的代码中,我们使用内置的 Node.js fs 和 path 模块来读取我们现有的 sample.sqlite 文件。

(2) 运行 SQL 语句

SQL 语句可以是在数据库中创建或检索一条信息或对现有数据执行操作的请求。

使用SQL.js,你可以很容易地运行一个语句,而不读取其结果。语法如下所示。

  1. db.run(stmt); 

当然,参数 stmt 是你的SQL语句。下面是一个例子,说明如何在我们的数据库中创建一个名为 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 语句

你可以使用准备好的语句来重复执行相同或类似的SQL语句,而且效率很高。准备好的语句比运行中的SQL语句有更短的解析时间,因为对查询的准备工作只做一次。它们对防止SQL注入也非常有用,因为你不需要转义参数值,这些参数值随后会使用不同的协议传输。

使用 SQL.js,我们还可以使用 .prepare() 方法编写准备好的语句:

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

以下是在我们之前的数据库中获取 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 )。继续前进,我们将使用一个 while 循环来返回所有可能的行,并将它们记录到控制台。

(4) 将数据库写入磁盘

SQL.js还提供了一个选项,通过 db.export() 方法将数据库导出/写入磁盘,成为一个 .sqlite 文件。结果将以 Uint8Array 形式返回,你可以使用Node.js Buffer 类和文件系统包将数据库写入磁盘。

  1. var fs = require("fs"); 
  2.  
  3. // Export database  
  4. var data = db.export(); 
  5. var buffer = new Buffer(data); 
  6. fs.writeFileSync("new-db.sqlite", buffer); 

运行上面的代码后,您应该在项目根文件夹中看到一个名为 new-db.sqlite 的新文件。

总结

在本文中,我们介绍了 SQL.js、它提供的功能以及如何在实际应用程序中使用它。虽然SQL.js可能非常适合构建一个离线优先的应用程序,如记事本应用程序,但在你想从管理面板管理用户数据的情况下,你可能要考虑使用其他关系数据库(MySQL、PostgreSQL)。

 

来源:今日头条内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯