nodejs進階(6)—連接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             return16         } 
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             return25         }   
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 })

 運行結果

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM