nodejs進階(6)—連接MySQL數(shù)據(jù)庫示例
1. 建庫連庫
連接MySQL數(shù)據(jù)庫需要安裝支持
npm install mysql
我們需要提前安裝按mysql sever端
建一個數(shù)據(jù)庫mydb1
mysql> CREATE DATABASE mydb1; mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | mydb1 | | performance_schema | +--------------------+ 4 rows in set (0.00 sec)
然后建一張表user如下
create table user( id int not null primary key auto_increment, name VARCHAR(100) not null, pwd VARCHAR(100) not null, create_date TIMESTAMP NULL DEFAULT now() )ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE UNIQUE INDEX t_quiz_IDX_0 on user(name);
接下來我們利用nodejs連接mysql數(shù)據(jù)庫
var mysql = require('mysql'); //調(diào)用MySQL模塊 //創(chuàng)建一個connection var connection = mysql.createConnection({ host: 'localhost', //主機 user: 'root', //MySQL認證用戶名 password: 'root', //MySQL認證用戶密碼 database: 'mydb1', port: '3306' //端口號 }); //創(chuàng)建一個connection connection.connect(function(err){ if(err){ console.log('[query] - :'+err); return; } console.log('[connection connect] succeed!'); }); //----插入 var userAddSql = 'insert into user (name,pwd) values(?,?)'; var param = ['fff','123']; connection.query(userAddSql,param,function(err,rs){ if(err){ console.log('insert err:',err.message); return; } console.log('insert success'); }); //執(zhí)行查詢 connection.query('SELECT * from user where id=?',[2], function(err, rs) { if (err) { console.log('[query] - :'+err); return; } for(var i=0;i<rs.length;i++){ console.log('The solution is: ', rs[i].uname); } }); //關(guān)閉connection connection.end(function(err){ if(err){ console.log(err.toString()); return; } console.log('[connection end] succeed!'); });
但是實際每次創(chuàng)建連接都需要一定的開銷,執(zhí)行效率就會有影響。下面介紹一種連接池連mysql的方法:node-mysql
2. 連接池配置使用
node-mysql是目前最火的node下的mysql驅(qū)動,是mysqlpool的一個模塊。
下面的代碼是提供一個連接池,getPool函數(shù)返回createPool創(chuàng)建的數(shù)據(jù)庫連接池對象。
var mysql = require('mysql'); //調(diào)用MySQL模塊 function OptPool(){ this.flag=true; //是否連接過 this.pool = mysql.createPool({ host: 'localhost', //主機 user: 'root', //MySQL認證用戶名 password: 'root', //MySQL認證用戶密碼 database: 'test', port: '3306' //端口號 }); this.getPool=function(){ return this.pool; } }; module.exports = OptPool;
下面的代碼展示如何使用這個連接池,插入和查詢的使用。需要注意的是conn.release(); //釋放一個連接放回連接池 需要再操作結(jié)束后再執(zhí)行,否則后面的數(shù)據(jù)庫操作會報錯。
var OptPool = require('./models/OptPool'); var optPool = new OptPool(); var pool = optPool.getPool(); //執(zhí)行SQL語句 //從連接池中獲取一個連接 pool.getConnection(function(err,conn){ //----插入 var userAddSql = 'insert into user (uname,pwd) values(?,?)'; var param = ['eee','eee']; conn.query(userAddSql,param,function(err,rs){ if(err){ console.log('insert err:',err.message); return; } console.log('insert success'); //conn.release(); //放回連接池 }) //查詢 conn.query('SELECT * from user', function(err, rs) { if (err) { console.log('[query] - :'+err); return; } for(var i=0;i<rs.length;i++){ console.log(rs[i].uname); } conn.release(); //放回連接池 }); });
下面介紹一個復(fù)雜一點的增刪查改的數(shù)據(jù)庫操作,因相互之間有依賴,所以代碼可讀性就變得特別差。
var OptPool = require('./models/OptPool'); var optPool = new OptPool(); var pool = optPool.getPool(); var insertSQL = 'insert into table1(name,pwd) values("conan","123"),("fens.me","456")'; var selectSQL = 'select * from table1 limit 10'; var deleteSQL = 'delete from table1'; var updateSQL = 'update table1 set name="conan update" where name="conan"'; pool.getConnection(function(err,conn){ //delete conn.query(deleteSQL, function (err0, res0) { if (err0) console.log(err0); console.log("DELETE Return ==> "); console.log(res0); //insert conn.query(insertSQL, function (err1, res1) { if (err1) console.log(err1); console.log("INSERT Return ==> "); console.log(res1); //query conn.query(selectSQL, function (err2, rows) { if (err2) console.log(err2); console.log("SELECT ==> "); for (var i in rows) { console.log(rows[i]); } //update conn.query(updateSQL, function (err3, res3) { if (err3) console.log(err3); console.log("UPDATE Return ==> "); console.log(res3); //query conn.query(selectSQL, function (err4, rows2) { if (err4) console.log(err4); console.log("SELECT ==> "); for (var i in rows2) { console.log(rows2[i]); } }); }); }); }); }); })
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- nodejs環(huán)境快速操作mysql數(shù)據(jù)庫的方法詳解
- nodejs連接mysql數(shù)據(jù)庫及基本知識點詳解
- nodejs簡單訪問及操作mysql數(shù)據(jù)庫的方法示例
- nodejs實現(xiàn)的連接MySQL數(shù)據(jù)庫功能示例
- NodeJS鏈接MySql數(shù)據(jù)庫的操作方法
- nodejs和C語言插入mysql數(shù)據(jù)庫亂碼問題的解決方法
- nodejs連接mysql數(shù)據(jù)庫簡單封裝示例-mysql模塊
- nodejs中操作mysql數(shù)據(jù)庫示例
- nodejs中關(guān)于mysql數(shù)據(jù)庫的操作
相關(guān)文章
詳解如何使用Node.js連接數(shù)據(jù)庫ORM
這篇文章主要為大家介紹了詳解如何使用Node.js連接數(shù)據(jù)庫ORM示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-12-12node作為中間服務(wù)層如何發(fā)送請求(發(fā)送請求的實現(xiàn)方法詳解)
node作為中間服務(wù)層如何發(fā)送請求?下面小編就為大家分享一下發(fā)送請求的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助2018-01-01windows 下安裝nodejs 環(huán)境變量設(shè)置
windows 下安裝nodejs 了,也安裝了npm, 但是有時候切不能直接用request(‘ws’)這一類的東西.我覺得是確實環(huán)境變量或其他設(shè)置有問題,能否給個完整的設(shè)置方案:2017-02-02Node.js?操作本地文件及深入了解fs內(nèi)置模塊
這篇文章主要介紹了Node.js?操作本地文件及深入了解fs內(nèi)置模塊,node.js作為服務(wù)端應(yīng)用,肯定少不了對本地文件的操作,像創(chuàng)建一個目錄、創(chuàng)建一個文件、讀取文件內(nèi)容等都是我們開發(fā)中經(jīng)常需要用到的功能2022-09-09node?gyp安裝canvas原生模塊編譯node?pregyp詳解
這篇文章主要為大家介紹了Nodejs關(guān)于原生模塊編譯node-gyp + node-pre-gyp (以安裝canvas為例)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11nodejs中轉(zhuǎn)換URL字符串與查詢字符串詳解
這篇文章主要介紹了nodejs中轉(zhuǎn)換URL字符串與查詢字符串詳解,需要的朋友可以參考下2014-11-11Nodejs處理Json文件并將處理后的數(shù)據(jù)寫入新文件中
這篇文章主要介紹了Nodejs處理Json文件并將處理后的數(shù)據(jù)寫入新文件中,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-10-10node.js的http.createServer過程深入解析
這篇文章主要給大家介紹了關(guān)于node.js的http.createServer過程的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用node.js具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06