CoffeeScript SQLite
SQLite 是一个轻量级的、基于模式的关系数据库引擎。它是一种流行的选择,作为用于 Web 浏览器中本地存储的嵌入式数据库软件。
与许多其他数据库管理系统不同,SQLite 不是客户端-服务器数据库引擎。如需更多信息,请阅读我们的SQLite 教程
在本章中,您将学习如何使用 CoffeeScript 与 SQLite 数据库进行通信。
安装
SQLite3 数据库可以使用
node-sqlite3 模块与 CoffeeScript 集成。此模块适用于 Node.js v0.10.x、v0.12.x、v4.x 和 v5.x。该模块提供了使用 CoffeeScript 与 SQLite3 通信的各种功能,此外它还提供了一个简单的查询和参数绑定接口,以及一个查询序列化 API。
您可以使用 npm 安装 node-sqlite3 模块,如下所示。
要使用 sqlite3 模块,您必须首先创建一个代表数据库的连接对象,该对象将帮助您执行所有 SQL 语句。
连接到数据库
为了连接到SQLite数据库,首先通过调用
node-sqlite3模块的
require()函数并传递字符串
来创建它的包sqlite3 作为它的参数。然后通过将数据库的名称传递给
sqlite3.Database() 构造来连接到数据库。
以下 CoffeeScript 代码显示了如何连接到现有数据库。如果数据库不存在,则使用给定的名称
test.db 创建它,打开它,最后返回数据库对象。
#Creating sqlite3 package
sqlite3 = require('sqlite3')
#Creating a Database instance
db = new (sqlite3.Database)('test.db')
console.log "Database opened successfully."
我们还可以提供
:memory: 来创建匿名内存数据库,并提供一个空字符串来创建匿名的基于磁盘的数据库,而不是 test.db。将上述代码保存在名为
create_db.coffee 的文件中,并按如下所示执行。如果数据库创建成功,那么它将产生以下消息-
c:\> coffee create_db.coffee
Successfully connected
创建表格
您可以使用
run() 函数通过 CoffeeScript 在 SQLite 数据库中创建表。将创建表的查询以字符串格式传递给此函数。
以下 CoffeeScript 程序将用于在之前的
test.db 数据库中创建表-
#Creating sqlite3 package
sqlite3 = require('sqlite3')
#Creating a Database instance
db = new (sqlite3.Database)('test.db')
console.log "Successfully connected"
db.serialize->
db.run 'CREATE TABLE STUDENT (name TEXT, age INTEGER, city TEXT)'
console.log "Table created successfully"
return
db.close()
serialize() 函数将数据库设置为序列化模式。在这种模式下,当遇到回调时,它会立即被调用。该回调中的查询是串行执行的。很快函数返回 数据库将再次设置为正常模式。完成交易后,我们需要使用
close() 函数关闭连接。
将上述代码保存在名为
create_table.coffee 的文件中,并按如下所示执行。这将在数据库
test.db 中创建一个名为
STUDENT 的表,显示以下消息。
C:\> coffee create_table.coffee
Successfully connected
Table created successfully
插入/创建数据
您可以通过执行插入语句,通过 CoffeeScript 代码将数据插入到 SQLite 数据库中。为此,我们可以使用
prepare() 函数来准备 SQL 语句。
它还接受带有绑定变量的查询 (
?),这些变量的值可以使用
run() 函数附加。可以使用prepared statement插入多条记录,插入所有记录后,需要使用
finalize()函数结束prepared statement。
下面的 CoffeeScript 程序展示了如何在前面的例子中创建的名为 STUDENT 的表中插入记录。
#Creating sqlite3 package
sqlite3 = require('sqlite3').verbose()
#Creating a Database instance
db = new (sqlite3.Database)('test.db')
console.log "Successfully connected"
db.serialize->
stmt = db.prepare('INSERT INTO STUDENT VALUES (?,?,?)')
stmt.run 'Ram',24,'Hyderabad'
stmt.run 'Robert',25,'Mumbai'
stmt.run 'Rahim',26,'Bangalore'
stmt.finalize()
console.log "Data inserted successfully"
return
db.close()
将上述代码保存在名为
insert_data.coffee 的文件中,并按如下所示执行。这将填充名为 STUDENT 的表,显示以下消息。
C:\> coffee insert_data.coffee
Successfully connected
Data inserted successfully
读取/检索数据
您可以使用
each() 函数从 SQLite 表中获取数据。此函数接受一个可选的回调函数,该函数将在每一行上调用。
下面的 CoffeeScript 程序展示了我们如何从上一个示例中创建的名为 STUDENT 的表中获取和显示记录
#Creating sqlite3 package
sqlite3 = require('sqlite3').verbose()
#Creating a Database instance
db = new (sqlite3.Database)('test.db')
console.log "Successfully connected"
db.serialize->
console.log "The contents of the table STUDENT are ::"
db.each 'SELECT rowid AS id, name,age,city FROM STUDENT', (err, row)->
console.log row.id + ': ' +row.name+', '+ row.age+', '+ row.city
return
return
db.close()
将上述代码保存在名为
retrive_data.coffee 的文件中,并按如下所示执行。这将检索名为 STUDENT 的表中的所有记录,并在控制台上显示如下。
C:\> coffee retrive_data.coffee
Successfully connected
The contents of the table STUDENT are ::
1: Ram, 24, Hyderabad
2: Robert, 25, Mumbai
3: Rahim, 26, Bangalore
更新数据
以下 CoffeeScript 代码展示了我们如何使用 UPDATE 语句更新任何记录,然后在名为 STUDENT 的表中获取并显示更新的记录
#Creating sqlite3 package
sqlite3 = require('sqlite3').verbose()
#Creating a Database instance
db = new (sqlite3.Database)('test.db')
console.log "Successfully connected"
db.serialize->
#Updating data
stmt = db.prepare('UPDATE STUDENT SET city = ? where name = ?')
stmt.run 'Delhi','Ram'
console.log "Table updated"
stmt.finalize()
#Retrieving data after update operation
console.log "The contents of the table STUDENT after update operation are ::"
db.each 'SELECT rowid AS id, name, city FROM STUDENT', (err, row)->
console.log row.id + ': ' +row.name+', '+ row.city
return
return
db.close()
将上述代码保存在名为
update_data.coffee 的文件中,并按如下所示执行。这将更新名为 Ram 的学生所在的城市,并在更新操作后显示表中的所有记录,如下所示。
C:\> coffee update_data.coffee
Successfully connected
Table updated
The contents of the table STUDENT after update operation are ::
1: Ram, Delhi
2: Robert, Mumbai
3: Rahim, Bangalore
删除数据
以下 CoffeeScript 代码展示了我们如何使用 DELETE 语句删除任何记录,然后从名为 STUDENT 的表中获取并显示剩余的记录。
#Creating sqlite3 package
sqlite3 = require('sqlite3').verbose()
#Creating a Database instance
db = new (sqlite3.Database)('test.db')
console.log "Successfully connected"
db.serialize->
#Deleting data
stmt = db.prepare('DELETE FROM STUDENT WHERE name = ?')
stmt.run 'Ram'
console.log "Record deleted"
stmt.finalize()
#Retrieving data after delete operation
console.log "The contents of the table STUDENT after delete operation are ::"
db.each 'SELECT rowid AS id, name, city FROM STUDENT', (err, row)->
console.log row.id + ': ' +row.name+', '+ row.city
return
return
db.close()
将上述代码保存在名为
delete_data.coffee 的文件中,并按如下所示执行。删除名为Ram的学生的记录,删除操作后将表中剩余的全部显示如下。
Successfully connected
Record deleted
The contents of the table STUDENT after delete operation are ::
2: Robert, Mumbai
3: Rahim, Bangalore