1. 建庫連庫 連接MySQL資料庫需要安裝支持 npm install mysql 我們需要提前安裝按mysql sever端 建一個資料庫mydb1 然後建一張表user如下 接下來我們利用nodejs連接mysql資料庫 但是實際每次創建連接都需要一定的開銷,執行效率就會有影響。下麵介紹一種連 ...
1. 建庫連庫
連接MySQL資料庫需要安裝支持
npm install mysql
我們需要提前安裝按mysql sever端
建一個資料庫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資料庫
1 var mysql = require('mysql'); //調用MySQL模塊 2 //創建一個connection 3 var connection = mysql.createConnection({ 4 host: 'localhost', //主機 5 user: 'root', //MySQL認證用戶名 6 password: 'root', //MySQL認證用戶密碼 7 database: 'mydb1', 8 port: '3306' //埠號 9 }); 10 //創建一個connection 11 connection.connect(function(err){ 12 if(err){ 13 console.log('[query] - :'+err); 14 return; 15 } 16 console.log('[connection connect] succeed!'); 17 }); 18 //----插入 19 var userAddSql = 'insert into user (name,pwd) values(?,?)'; 20 var param = ['fff','123']; 21 connection.query(userAddSql,param,function(err,rs){ 22 if(err){ 23 console.log('insert err:',err.message); 24 return; 25 } 26 console.log('insert success'); 27 }); 28 //執行查詢 29 connection.query('SELECT * from user where id=?',[2], function(err, rs) { 30 if (err) { 31 console.log('[query] - :'+err); 32 return; 33 } 34 for(var i=0;i<rs.length;i++){ 35 console.log('The solution is: ', rs[i].uname); 36 } 37 }); 38 39 //關閉connection 40 connection.end(function(err){ 41 if(err){ 42 console.log(err.toString()); 43 return; 44 } 45 console.log('[connection end] succeed!'); 46 });
但是實際每次創建連接都需要一定的開銷,執行效率就會有影響。下麵介紹一種連接池連mysql的方法:node-mysql
2. 連接池配置使用
node-mysql是目前最火的node下的mysql驅動,是mysqlpool的一個模塊。
下麵的代碼是提供一個連接池,getPool函數返回createPool創建的資料庫連接池對象。
1 var mysql = require('mysql'); //調用MySQL模塊 2 function OptPool(){ 3 this.flag=true; //是否連接過 4 this.pool = mysql.createPool({ 5 host: 'localhost', //主機 6 user: 'root', //MySQL認證用戶名 7 password: 'root', //MySQL認證用戶密碼 8 database: 'test', 9 port: '3306' //埠號 10 }); 11 12 this.getPool=function(){ return this.pool; 21 } 22 }; 23 module.exports = OptPool;
下麵的代碼展示如何使用這個連接池,插入和查詢的使用。需要註意的是conn.release(); //釋放一個連接放回連接池 需要再操作結束後再執行,否則後面的資料庫操作會報錯。
1 var OptPool = require('./models/OptPool'); 2 3 var optPool = new OptPool(); 4 var pool = optPool.getPool(); 5 6 //執行SQL語句 7 //從連接池中獲取一個連接 8 pool.getConnection(function(err,conn){ 9 //----插入 10 var userAddSql = 'insert into user (uname,pwd) values(?,?)'; 11 var param = ['eee','eee']; 12 conn.query(userAddSql,param,function(err,rs){ 13 if(err){ 14 console.log('insert err:',err.message); 15 return; 16 } 17 console.log('insert success'); 18 //conn.release(); //放回連接池 19 }) 20 //查詢 21 conn.query('SELECT * from user', function(err, rs) { 22 if (err) { 23 console.log('[query] - :'+err); 24 return; 25 } 26 for(var i=0;i<rs.length;i++){ 27 console.log(rs[i].uname); 28 } 29 conn.release(); //放回連接池 30 }); 31 });
下麵介紹一個複雜一點的增刪查改的資料庫操作,因相互之間有依賴,所以代碼可讀性就變得特別差。這樣就引出了我們接下來要介紹餓流程式控制制的內容《nodejs進階(7)—async非同步流程式控制制》
1 var OptPool = require('./models/OptPool'); 2 3 var optPool = new OptPool(); 4 var pool = optPool.getPool(); 5 6 var insertSQL = 'insert into table1(name,pwd) values("conan","123"),("fens.me","456")'; 7 var selectSQL = 'select * from table1 limit 10'; 8 var deleteSQL = 'delete from table1'; 9 var updateSQL = 'update table1 set name="conan update" where name="conan"'; 10 11 pool.getConnection(function(err,conn){ 12 //delete 13 conn.query(deleteSQL, function (err0, res0) { 14 if (err0) console.log(err0); 15 console.log("DELETE Return ==> "); 16 console.log(res0); 17 18 //insert 19 conn.query(insertSQL, function (err1, res1) { 20 if (err1) console.log(err1); 21 console.log("INSERT Return ==> "); 22 console.log(res1); 23 24 //query 25 conn.query(selectSQL, function (err2, rows) { 26 if (err2) console.log(err2); 27 28 console.log("SELECT ==> "); 29 for (var i in rows) { 30 console.log(rows[i]); 31 } 32 33 //update 34 conn.query(updateSQL, function (err3, res3) { 35 if (err3) console.log(err3); 36 console.log("UPDATE Return ==> "); 37 console.log(res3); 38 39 //query 40 conn.query(selectSQL, function (err4, rows2) { 41 if (err4) console.log(err4); 42 43 console.log("SELECT ==> "); 44 for (var i in rows2) { 45 console.log(rows2[i]); 46 } 47 }); 48 }); 49 }); 50 }); 51 }); 52 })