当前位置: 首页 > 科技观察

了解有关SQL.js基本功能的更多信息

时间:2023-03-18 12:31:10 科技观察

SQL,或结构化查询语言,是一种特定于领域的语言,旨在访问和操作关系数据库中的数据。借助SQL语句,您可以对关系数据库执行创建、更新、检索和删除数据等操作。关系数据库是一种数据模型,它使用行和列在表中组织数据。虽然可能有多种使用SQL的关系数据库管理系统,但几乎所有系统都设计为服务器端进程。其中包括:MySQLPostgreSQLSQLiteMSSQL在本教程中,我们将讨论SQL.js,它是一个JavaScriptSQL库,可让您完全在浏览器中创建和查询关系数据库。我们将通过以下每个部分的详细示例逐步完成什么是SQL.js?使用SQL.js安装(浏览器和Node.js)的优点和缺点编写SQL查询和准备好的语句什么是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字符串的支持,如下图所示。sqlstr="CREATETABLEtableName(colA,colB);";sqlstr+="INSERTINTOHelloVALUES(0,'hello');"..但也有一个重要的缺点:使用SQL.js时对数据库的更改不是持久的。再读一遍:当您重新加载浏览器时,对数据库所做的所有更改都将消失。这是因为SQL.js使用存储在浏览器内存中的虚拟数据库文件。但是,您可以导入任何现有的SQLite文件并将创建的数据库导出为JavaScript类型的数组。安装SQL.js(1)浏览器安装将SQL.js集成到一个新的基于客户端的项目中非常容易。您可以从包含CDN或下载源文件并将它们链接到您的标记页面开始。默认情况下,SQL.js使用WebAssembly,除了JavaScript库之外,它还需要加载一个.wasm文件。您可以从网络上下载此文件并使用locateFile函数将此文件加载到您的网页中,如下所示。PageTitle在上面的代码块中,我们使用initSqlJs异步加载Wasm二进制,并在加载所需文件后初始化SQL.js。(2)Node.js安装在基于Node的项目中安装SQL.js也很简单。要安装它,您只需运行:npminstallsql.js或者,您可以从前面的链接下载sql-wasm.js和sql-wasm.wasm,并使用Node.js的require函数将它们加载到您的项目中。此外,在基于节点的项目中,您可以跳过locateFile方法来加载sql-wasm.wasm文件,因为如果它与您正在处理的文件位于同一文件夹中,它将自动加载。所以我们的代码看起来像这样。varinitSqlJs=require("./sql-wasm.js");initSqlJs().then(函数(SQL){console.log("sql.jsinitialized");});现在我们编写SQL查询和准备好的语句现在我们已经完成了安装和初始化SQL.js的所有必要步骤,让我们深入了解它的用法。(1)创建数据库下面代码创建一个新的数据库:constdb=newSQL.Database();值得注意的是SQL.Database()方法接受一个可选参数data,它必须是一个Uint8Array代表一个SQLite数据库文件。例如,在Node.js中,我们可以按如下方式加载现有的.sqlite文件:letfs=require("fs");letinitSqlJs=require("./sql-wasm.js");letfilebuffer=fs.readFileSync("/path/to/sample.sqlite");initSqlJs().then(function(SQL){//Createanewdatabasewithourexistingsample.sqlitefileconstdb=newSQL.Database(filebuffer);});在上面的代码中,我们使用内置的Node.jsfs和路径模块来读取我们现有的sample.sqlite文件。(2)运行SQL语句SQL语句可以是在数据库中创建或检索一条信息的请求,也可以是对现有数据执行操作的请求。使用SQL.js,您可以轻松地运行一条语句而无需读取其结果。语法如下。数据库运行(stmt);当然,参数stmt就是你的SQL语句。下面是一个示例,说明如何在我们的数据库中创建一个名为users的新表,其中包含ID、姓名、电话号码和地址列。它还将向该表中插入一个新行。letinitSqlJs=require("./sql-wasm.js");initSqlJs().then(function(SQL){constdb=newSQL.Database();//RUNNINGSQLQUERIESdb.run("CREATETABLEusers(id,name,phone,地址);");db.run(`INSERTITOusers(id,name,phone,address)VALUES(1,'JohnDoe','+234-907788','12IgodanStreet,Okitipupa')`);});(3)PreparedSQLstatements您可以使用preparedstatements高效地重复执行相同或相似的SQL语句。准备好的语句比运行SQL语句的解析时间更短,因为查询的准备只完成一次。它们对于防止SQL注入也非常有用,因为您不需要转义参数值,然后使用不同的协议传输这些值。使用SQL.js,我们还可以使用.prepare()方法编写准备好的语句:varstmt=db.prepare(preparedStatement);这是在我们之前的数据库中获取ID介于1和10之间的所有用户的方法示例:varstmt=db.prepare("SELECT*FROMusersWHEREidBETWEEN$startAND$end");stmt.bind({$start:1,$end:2});while(stmt.step()){varrow=stmt.getAsObject();console.log("Hereisauserrow:"+JSON.stringify(row));}编写好我们准备好的SQL语句后,我们使用.bind()方法来绑定我们语句所需的值(开始和结束在上面的例子)。接下来,我们将使用while循环返回所有可能的行并将它们记录到控制台。(4)将数据库写入磁盘SQL.js还提供了一个选项,可以通过db.export()方法将数据库导出/写入磁盘,成为一个.sqlite文件。结果将作为Uint8Array返回,您可以使用Node.jsBuffer类和文件系统包将数据库写入磁盘。varfs=require("fs");/***在这里创建数据库的代码***///Exportdatabasevardata=db.export();varbuffer=newBuffer(data);fs.writeFileSync("new-db.sqlite",buffer);运行上面的代码后,您应该会在项目根文件夹中看到一个名为new-db.sqlite的新文件。总结在本文中,我们介绍了SQL.js、它提供的特性以及如何在实际应用程序中使用它。虽然SQL.js可能非常适合构建离线优先的应用程序,例如记事本应用程序,但如果您想从管理面板管理用户数据,您可能需要考虑其他关系数据库(MySQL、PostgreSQL)。