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 |
+--------------------+
rows in set (0.00 sec)
然后建一張表user如下
create table user(
id int not null primary key auto_increment,
name VARCHAR() not null,
pwd VARCHAR() 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', //主機(jī)
user: 'root', //MySQL認(rèn)證用戶名
password: 'root', //MySQL認(rèn)證用戶密碼
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!');
});
但是實(shí)際每次創(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', //主機(jī)
user: 'root', //MySQL認(rèn)證用戶名
password: 'root', //MySQL認(rèn)證用戶密碼
database: 'test',
port: '3306' //端口號
});
this.getPool=function(){
return this.pool;
}
};
module.exports = OptPool;
下面的代碼展示如何使用這個連接池,插入和查詢的使用。需要注意的是conn.release();?//釋放一個連接放回連接池 需要再操作結(jié)束后再執(zhí)行,否則后面的數(shù)據(jù)庫操作會報錯。
下面介紹一個復(fù)雜一點(diǎn)的增刪查改的數(shù)據(jù)庫操作,因相互之間有依賴,所以代碼可讀性就變得特別差。這樣就引出了我們接下來要介紹餓流程控制的內(nèi)容《nodejs進(jìn)階(7)—async異步流程控制》
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]);
}
});
});
});
});
});
})
運(yùn)行結(jié)果
文章來源:http://www.zghlxwxcb.cn/news/detail-449201.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-449201.html
到了這里,關(guān)于nodejs進(jìn)階(6)—連接MySQL數(shù)據(jù)庫的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!