nodejs連接mysql

index

nodejs連接mysql __veblen

一、安裝

npm install mysql

二、引入模塊,并連接mysql

var mysql  = require('mysql');  //調用MySQL模塊

//創(chuàng)建一個connection
var connection = mysql.createConnection({     
  host     : '127.0.0.1',       //主機
  user     : 'root',               //MySQL認證用戶名
  password : 'abcd',        //MySQL認證用戶密碼
  port: '3306',                   //端口號
  database: 'school',                   //數(shù)據(jù)庫名稱
}); 
//創(chuàng)建一個connection
connection.connect(function(err){
    if(err){        
          console.log('[query] - :'+err);
        return;
    }
      console.log('[connection connect]  succeed!');
});  
//執(zhí)行SQL語句
connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) { 
     if (err) {
             console.log('[query] - :'+err);
        return;
     }
     console.log('The solution is: ', rows[0].solution);  
});  
//關閉connection
connection.end(function(err){
    if(err){        
        return;
    }
      console.log('[connection end] succeed!');
});


  • test->插入數(shù)據(jù)

var mysql  = require('mysql');  

var connection = mysql.createConnection({     
  host     : '192.168.0.200',       
  user     : 'root',              
  password : 'abcd',       
  port: '3306',                   
  database: 'nodesample', 
}); 

connection.connect();

var  userAddSql = 'INSERT INTO userinfo(Id,UserName,UserPass) VALUES(0,?,?)';
var  userAddSql_Params = ['Wilson', 'abcd'];
//增
connection.query(userAddSql,userAddSql_Params,function (err, result) {
        if(err){
         console.log('[INSERT ERROR] - ',err.message);
         return;
        }        

       console.log('--------------------------INSERT----------------------------');
       //console.log('INSERT ID:',result.insertId);        
       console.log('INSERT ID:',result);        
       console.log('-----------------------------------------------------------------

');  
});

connection.end();

從執(zhí)行結果可以看出,result中包含一些有用的信息,affectedRows(受影響的行數(shù)) insertId(插入的主鍵ID)等等。 有受影響的行數(shù)和插入數(shù)據(jù)的ID,就可以很方便進行后續(xù)的一些操作(比如判斷是否成功或者繼續(xù)根據(jù)插入數(shù)據(jù)的ID進行其它操作)

  • test->查詢數(shù)據(jù)

var mysql  = require('mysql');  

var connection = mysql.createConnection({     
  host     : '192.168.0.200',       
  user     : 'root',              
  password : 'abcd',       
  port: '3306',                   
  database: 'nodesample', 
}); 

connection.connect();

var  userGetSql = 'SELECT * FROM userinfo';
//查
connection.query(userGetSql,function (err, result) {
        if(err){
          console.log('[SELECT ERROR] - ',err.message);
          return;
        }        

       console.log('--------------------------SELECT----------------------------');
       console.log(result);        
       console.log('-----------------------------------------------------------------

');  
});

connection.end();

從查詢出來的結果可以看出,result返回了一個JSON格式的數(shù)據(jù)


三、結束數(shù)據(jù)庫連接兩種方法和區(qū)別

前面的示例中我在結尾處都會調用一個connection.end()方法,這個方法connection.connect()對應,一個開始,一個結束!

結束連接其實有兩種方法end(),destory();

end()

end()方法在queries都結束后執(zhí)行,end()方法接收一個回調函數(shù),queries執(zhí)行出錯,仍然后結束連接,錯誤會返回給回調函數(shù)err參數(shù),可以在回調函數(shù)中處理!

destory()

比較暴力,沒有回調函數(shù),即刻執(zhí)行,不管queries是否完成!


四、連接池Pooling connections(生產(chǎn)環(huán)境請使用連接池)

1.連接池的創(chuàng)建,使用createPool方法,optionscreateConntion一致,可以監(jiān)聽connection事件。

var mysql = require('mysql');

//創(chuàng)建連接池
var pool  = mysql.createPool({
  host     : '192.168.0.200',
  user     : 'root',
  password : 'abcd'
});

連接池可以直接使用,也可以共享一個連接或管理多個連接(引用官方示例)

//直接使用
pool.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
  if (err) throw err;

  console.log('The solution is: ', rows[0].solution);
});

//共享
pool.getConnection(function(err, connection) {
  // connected! (unless `err` is set)
});

3.釋放

調用connection.release()方法,會把連接放回連接池,等待其它使用者使用!

var mysql = require('mysql');

var pool  = mysql.createPool({
  host     : '192.168.0.200',       
  user     : 'root',              
  password : 'abcd',       
  port: '3306',                   
  database: 'nodesample'  
});

pool.getConnection(function(err, connection) {

    connection.query( 'SELECT * FROM userinfo;', function(err, result) {    
        console.log(result);
        connection.release();
    });

    connection.query( 'SELECT * FROM userinfo;', function(err, result) {

        console.log(result);
        connection.release();

    });
});


五、斷線重連

數(shù)據(jù)庫可以因為各種原因導致連接不上,這種就必須有重連接機制! 主要判斷errorcode:PROTOCOL_CONNECTION_LOST

var mysql = require('mysql');
var db_config = {
  host     : '192.168.0.200',       
  user     : 'root',              
  password : 'abcd',       
  port: '3306',                   
  database: 'nodesample'  
};

var connection;
function handleDisconnect() {
  connection = mysql.createConnection(db_config);                                               
  connection.connect(function(err) {              
    if(err) {                                     
      console.log("進行斷線重連:" + new Date());
      setTimeout(handleDisconnect, 2000);   //2秒重連一次
      return;
    }         
     console.log("連接成功");  
  });                                                                           
  connection.on('error', function(err) {
    console.log('db error', err);
    if(err.code === 'PROTOCOL_CONNECTION_LOST') { 
      handleDisconnect();                         
    } else {                                      
      throw err;                                 
    }
  });
}
handleDisconnect();
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 一、安裝 npm install mysql 二、引入模塊,并連接mysql varmysql =require(...
    木汐易陽閱讀 271評論 0 1
  • 一、安裝 二、引入模塊,并連接mysql test->插入數(shù)據(jù) 從執(zhí)行結果可以看出,result中包含一些有用的信...
    Veb閱讀 822評論 0 20
  • Nodejs連接mysql的增、刪、改、查操作 一、準備 nodejs的教程,大多以操作mongodb為示例。但是...
    Utopi_a閱讀 642評論 0 7
  • 應小姑娘的要求,從今開始,記錄下我們備戰(zhàn)中考的點點滴滴。 今天根據(jù)蔡老師的安排,下午四點到五點半去工學院參...
    三胖二狗的幸福Life閱讀 189評論 0 1
  • -----1----- 經(jīng)??吹酵氯ジI導反饋什么事時,同事說了一大堆,領導聽得還是云里霧里,最后極其不耐煩地說...
    桂子二姐閱讀 1,078評論 0 2

友情鏈接更多精彩內容