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