SQLite(SQLite)
SQLite是一种基于模式的轻量级关系数据库引擎。 它是用于Web浏览器中本地存储的嵌入式数据库软件的流行选择。
与许多其他数据库管理系统不同,SQLite不是客户端 - 服务器数据库引擎。 有关更多信息,请阅读我们的 SQLite教程
在本章中,您将学习如何使用CoffeeScript与SQLite数据库进行通信。
安装 (Installation)
可以使用node-sqlite3模块将SQLite3数据库与CoffeeScript集成。 此模块适用于Node.js v0.10.x,v0.12.x,v4.x和v5.x. 该模块提供各种功能,使用CoffeeScript与SQLite3进行通信,此外,它还提供了简单的查询和参数绑定接口,以及查询序列化API。
您可以使用npm安装node-sqlite3模块,如下所示。
npm install sqlite3
要使用sqlite3模块,必须首先创建一个表示数据库的连接对象,该对象将帮助您执行所有SQL语句。
连接到数据库 (Connecting to Database)
为了连接到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数据库中创建表。 传递查询以String格式创建此函数的表。
以下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
插入/创建数据
您可以通过执行insert语句通过CoffeeScript代码将数据插入SQLite数据库。 为此,我们可以使用prepare()函数来准备SQL语句。
它还接受带有绑定变量( ? )的查询,可以使用run()函数附加这些变量的值。 您可以使用预准备语句插入多个记录,并在插入所有记录后,需要使用finalize()函数完成预准备语句。
以下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