📜  CoffeeScript-SQLite

📅  最后修改于: 2020-10-26 05:55:08             🧑  作者: Mango


SQLite是一个轻量级的,基于模式的关系数据库引擎。作为用于Web浏览器本地存储的嵌入式数据库软件,它是一种流行的选择。

与许多其他数据库管理系统不同,SQLite不是客户端服务器数据库引擎。有关更多信息,请阅读我们的SQLite教程

在本章中,您将学习如何使用CoffeeScript与SQLite数据库进行通信。

安装

可以使用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语句。

连接到数据库

为了连接到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数据库。为此,我们可以使用准备SQL语句的prepare()函数。

它还接受带有绑定变量( )的查询,这些变量的值可以使用run()函数附加。您可以使用prepared语句插入多个记录,并且在插入所有记录之后,需要使用finalize()函数完成对prepared语句的终结

以下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