Node.js使用SQLite數(shù)據(jù)庫方法大全
Node.js是一種流行的JavaScript運(yùn)行時,提供了許多有用的模塊和庫來構(gòu)建Web應(yīng)用程序,而SQLite是一種嵌入式關(guān)系型數(shù)據(jù)庫,它可以運(yùn)行在各種操作系統(tǒng)上,包括Windows、Linux和Mac OS X等,在Node.js中,可以通過安裝sqlite3模塊來訪問SQLite數(shù)據(jù)庫。
SQLite 是一個單文件的離線關(guān)系型 SQL 數(shù)據(jù)庫,它的文件都存儲在一個 DB 數(shù)據(jù)文件中,相比 MySQL 這種數(shù)據(jù)庫服務(wù)器來說,SQLite 更方便遷移,對于內(nèi)存小的服務(wù)器來說,使用 SQLite 也是一個不錯的選擇。SQLite 也可以集成到桌面應(yīng)用程序中,作為本地數(shù)據(jù)庫使用。
Node.js快速入門
Node.js是什么
Node.js是一個基于Chrome V8引擎的JavaScript運(yùn)行環(huán)境:即Node.js內(nèi)置了Chrome的V8 引擎,可以在Node.js環(huán)境中直接運(yùn)行JavaScript程序。Node.js脫離瀏覽器環(huán)境也可以運(yùn)行JavaScript,只要有JavaScript引擎就可以。
通俗的說是一個專門用于為前端業(yè)務(wù)提供數(shù)據(jù)的后端程序
Node.js安裝與下載
官網(wǎng):Node.js(https://nodejs.org/en)
中文網(wǎng):Node.js 中文網(wǎng)(https://nodejs.cn/)
安裝完成之后,打開控制臺輸入node -v 查看安裝node.js版本號
Node.js入門
使用前端開發(fā)工具 VSCode:
①在工作區(qū)新建一個文件夾NodeJS,創(chuàng)建文件01.js,在文件中編寫
console.log("hello Node.js");
②右鍵點(diǎn)擊創(chuàng)建的NodeJS文件夾,選擇在終端中打開, 此時會出現(xiàn)一個控制臺,在控制臺輸入node 01.js運(yùn)行js文件。結(jié)果輸出hello Node.js
③寫一個簡單的服務(wù)器端應(yīng)用,創(chuàng)建文件02.js
//引入http模塊 const http=require('http'); //創(chuàng)建服務(wù)器 http.createServer(function(request,response){ /* 發(fā)送HTTP頭 HTTP狀態(tài)值:200:OK 內(nèi)容類型:text/plain */ response.writeHead(200,{'Content-Type':'text/html'}); //發(fā)送響應(yīng)數(shù)據(jù)"Hello Node.js" response.end('<h1>Hello Node.js</h1>'); }).listen(8888);//設(shè)置監(jiān)聽端口號8888 //終端打印 console.log('Server running at http://127.0.0.1:8888/');
在控制臺輸入node 02.js。用瀏覽器訪問http://127.0.0.1:8888。就會得到響應(yīng)的數(shù)據(jù)
SQLite快速入門
SQLite是什么
SQlite是一款非常輕型的數(shù)據(jù)庫,體現(xiàn)在下面3個特點(diǎn)
體積小
免安裝,無需配置
整個數(shù)據(jù)庫(定義、表、索引和數(shù)據(jù)本身)都在宿主主機(jī)上存儲在一個單一的文件
SQLite安裝與下載
SQLite下載地址:SQLite Download Page(https://www.sqlite.org/download.html)
下載對應(yīng)windows版本
下載完成解壓安裝在本地,sqlite3.def和dll,exe放置在通一文件夾內(nèi)
ps:這里最好自己設(shè)置一下sqlite的環(huán)境變量,在系統(tǒng)環(huán)境變量path中加入sqlite3.exe啟動地址
然后 CMD 輸入:sqite3 查看一下是否配置成功環(huán)境變量
SQLite的使用
這里我們使用 SQLiteStudio作為可視化工具
①新建個數(shù)據(jù)庫文件
隨便起個名字,新建文件 命名 Test,后綴.db
②鏈接數(shù)據(jù)庫文件
找到剛才創(chuàng)建的Test.db文件,給自己數(shù)據(jù)庫起一個名字
先測試連接,成功以后點(diǎn)擊OK
這個時候就可以隨便創(chuàng)建 數(shù)據(jù)表 新增字段了
Node.js操作SQLite
首先在Node環(huán)境下安裝SQLite
安裝 sqlite3 模塊
在操作 SQLite 之前還需要先安裝 sqlite3 模塊,用 npm 安裝:
npm install sqlite3 --save-dev
如果在安裝的時候出現(xiàn)如下的錯誤:
gyp ERR! find Python Python is not set from command line or npm configuration gyp ERR! find Python Python is not set from environment variable PYTHON gyp ERR! find Python checking if "python" can be used gyp ERR! find Python - "python" is not in PATH or produced an error gyp ERR! find Python checking if "python2" can be used gyp ERR! find Python - "python2" is not in PATH or produced an error gyp ERR! find Python checking if "python3" can be used gyp ERR! find Python - "python3" is not in PATH or produced an error
SQLite 模塊的編譯需要用到 Python,可以下載 Python 安裝。
如果安裝了最新版的 Python 還是出錯的話,可以通過 npm 安裝 Python 2,如果用的是 Windows 的話可以通過管理員權(quán)限運(yùn)行 Powershell ,輸入:
npm install --global windows-build-tools
安裝完 Python 后應(yīng)該就可以安裝 sqlite3 模塊了。
打開數(shù)據(jù)庫
下面打開一個 data.db 的數(shù)據(jù)庫:
const sqlite3 = require('sqlite3'); // 引入 sqlite3 模塊 const path = require('path'); // 引入路徑處理模塊 const dbName = path.join(__dirname, 'data.db'); // 獲取當(dāng)前運(yùn)行目錄下的 data.db 文件 // 打開數(shù)據(jù)庫 const db = new sqlite3.Database(dbName, err => { if (err !== null) console.log(err); // 輸出錯誤信息 });
sqlite3.Database 方法可以打開一個數(shù)據(jù)庫,如果傳入的 DB 數(shù)據(jù)庫文件不存在就會創(chuàng)建一個,返回一個數(shù)據(jù)庫對象。
如果要關(guān)閉打開的數(shù)據(jù)庫可以使用 close 方法,如下:
db.close(err => { if (err) console.log(err); });
回調(diào)函數(shù)可以接收一個 err 也就是錯誤信息。
創(chuàng)建數(shù)據(jù)表
下面創(chuàng)建一張 user 數(shù)據(jù)表:
// SQL 語句 const sql = ` CREATE TABLE user ( id INTEGER PRIMARY KEY, user_name VARCHAR (30) NOT NULL, age TINYINT (3) NOT NULL DEFAULT 0 ) `; // 創(chuàng)建表格 db.run(sql, function(err) { if (err) console.log(err); // 如果出現(xiàn)錯誤就輸出錯誤信息 });
這里創(chuàng)建表使用的是 run 方法,run 方法可以執(zhí)行 SQL 語句,通過回調(diào)函數(shù)可以獲取受影響的行數(shù)。不過創(chuàng)建表格是無法獲取影響的行數(shù)的,只有在 增、刪、改 的時候才能獲取影響的行數(shù)。
添加數(shù)據(jù)
下面給 user 表添加一條數(shù)據(jù):
db.run('INSERT INTO user (user_name, age) VALUES (?, ?)', ['Mark', 28], function(err) { if (err) console.log(err); // 如果有錯誤就輸出錯誤信息 console.log(this.changes); // 輸出受影響的行數(shù) console.log(this.lastID); // 輸出 lastID });
run 方法可以用于插入、更新、刪除 數(shù)據(jù),第一個參數(shù)的 SQL 語句中包含一些 ?,這個 ? 就是占位符,第二個數(shù)組內(nèi)的內(nèi)容會替換占位符。上面的 SQL 語句執(zhí)行的時候如下:
INSERT INTO user (user_name, age) VALUES ('Mark', 28)
第三個參數(shù)是一個回調(diào)函數(shù),語句執(zhí)行完成后會執(zhí)行回調(diào)函數(shù),函數(shù)的 err 參數(shù)可以獲取錯誤信息,函數(shù)的 this.changes 可以獲取受影響的行數(shù),this.lastID 可以獲取 lastID 。
修改數(shù)據(jù)
修改數(shù)據(jù)還是用 run 方法,如下:
db.run('UPDATE user SET user_name = $newName WHERE user_name = $userName', { $userName: 'Mark', $newName: 'Jack' }, function(err) { if (err) console.log(err); // 如果有錯誤就輸出錯誤信息 console.log(this.changes); // 輸出受影響的行數(shù) console.log(this.lastID); // 輸出 lastID });
這里第二個參數(shù)是一個對象,對象的值會替換 SQL 語句中和屬性名相同的占位符,上面的語句執(zhí)行的時候如下:
UPDATE user SET user_name = 'Jack' WHERE user_name = 'Mark'
查詢數(shù)據(jù)
刪除數(shù)據(jù)還是用 run 方法,和上面差不多,只是 SQL 語句不一樣,這里就不寫了。
查詢用的表內(nèi)容如下:
id | user_name | age |
---|---|---|
1 | Alice | 30 |
2 | Steve | 26 |
下面查詢出上面表格中的所有內(nèi)容:
db.all('SELECT id, user_name, age FROM user', (err, rows) => { if (err) console.log(err); // 如果出現(xiàn)錯誤就輸出錯誤信息 console.log(rows); // 輸出查詢結(jié)果 });
查詢出的結(jié)果如下:
[ { id: 1, user_name: 'Alice', age: 30 }, { id: 2, user_name: 'Steve', age: 26 } ]
下面只查詢 user_name 為 Steve 的數(shù)據(jù):
db.all('SELECT id, user_name, age FROM user WHERE user_name = ?', ['Steve'], (err, rows) => { if (err) console.log(err); // 如果出現(xiàn)錯誤就輸出錯誤信息 console.log(rows); // 輸出查詢結(jié)果 });
這里的占位符還是和上面的一樣。
all 方法可以查詢多條數(shù)據(jù),第一個參數(shù)就是 SQL 語句,后面的參數(shù)可以是用來替換占位符的內(nèi)容,也可以是回調(diào)函數(shù),回調(diào)函數(shù)需要放在最后。回調(diào)函數(shù)可以接收 err 和 rows 兩個參數(shù),err 就是錯誤信息,rows 是查詢結(jié)果的數(shù)組,如果沒有查詢出內(nèi)容 rows 就是一個空數(shù)組。
如果你只需要查詢一條數(shù)據(jù),也就是查詢出的數(shù)據(jù)不會超過一條的話,可以考慮使用 get 方法,get 方法只會查詢一條數(shù)據(jù),如下:
db.get('SELECT id, user_name, age FROM user', (err, row) => { if (err) console.log(err); console.log(row); });
查詢結(jié)果如下:
{ id: 1, user_name: 'Alice', age: 30 }
雖然上面的表格中有兩條數(shù)據(jù),但 get 方法只查詢出一條。
get 方法的參數(shù)和 all 差不多,第一個參數(shù)是 SQL 語句,后面的參數(shù)可以是用來替換 SQL 中的占位符的內(nèi)容,也可以是一個回調(diào)函數(shù),回調(diào)函數(shù)需要在最后。函數(shù)可以接收 err 和 row ,err 是錯誤信息,row 是查詢結(jié)果,如果沒有查詢出數(shù)據(jù) row 就是 undefined 。
總結(jié)
到此這篇關(guān)于Node.js使用SQLite數(shù)據(jù)庫方法大全的文章就介紹到這了,更多相關(guān)Node.js操作SQLite內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解基于Koa2開發(fā)微信二維碼掃碼支付相關(guān)流程
這篇文章主要介紹了詳解基于Koa2開發(fā)微信二維碼掃碼支付相關(guān)流程,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-05-05淺談如何通過node.js對數(shù)據(jù)進(jìn)行MD5加密
本篇文章將主要針對于在NODE.JS中如何對數(shù)據(jù)進(jìn)行MD5加密,MD5是一種常用的哈希算法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-05-05使用 NodeJS+Express 開發(fā)服務(wù)端的簡單介紹
這篇文章主要介紹了使用 NodeJS+Express 開發(fā)服務(wù)端的簡單介紹,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-04-04npm 更改默認(rèn)全局路徑以及國內(nèi)鏡像的方法
今天小編就為大家分享一篇npm 更改默認(rèn)全局路徑以及國內(nèi)鏡像的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05使用NestJS開發(fā)Node.js應(yīng)用的方法
這篇文章主要介紹了使用NestJS開發(fā)Node.js應(yīng)用的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-12-12Node.JS在命令行中檢查Chrome瀏覽器是否安裝并打開指定網(wǎng)址
這篇文章主要介紹了Node.JS在命令行中檢查Chrome瀏覽器是否安裝,并打開指定網(wǎng)址,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-05-05node.js 微信開發(fā)之定時獲取access_token
本文給大家分享的是在使用node.js做微信開發(fā)的過程中如何定時獲取access_token的方法,有需要的小伙伴可以參考下2020-02-02