CoffeeScript - SQLite



SQLite 是一款輕量級、基於模式的關係型資料庫引擎。它作為 Web 瀏覽器本地儲存的嵌入式資料庫軟體,非常受歡迎。

與許多其他資料庫管理系統不同,SQLite 不是客戶端-伺服器資料庫引擎。有關更多資訊,請閱讀我們的 SQLite 教程

在本章中,您將學習如何使用 CoffeeScript 與 SQLite 資料庫進行通訊。

安裝

SQLite3 資料庫可以使用 **node-sqlite3** 模組與 CoffeeScript 整合。此模組適用於 Node.js v0.10.x、v0.12.x、v4.x 和 v5.x。除了提供與 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 資料庫中的表。將建立表的查詢作為字串格式傳遞給此函式。

以下 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()** 函式附加到這些變數的值。您可以使用預處理語句插入多條記錄,並在插入所有記錄後,需要使用 **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
廣告