nodejs進階(6)—連接MySQL資料庫

来源:http://www.cnblogs.com/fangsmile/archive/2017/01/06/6257450.html
-Advertisement-
Play Games

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             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 })

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ThinkPHP 模板substr的截取字元串函數在Common/function.php加上以下代碼 前端頁面需要截取字元串時 /********************************************案例************************************** ...
  • 前端獲取數據: thinkphp讀取資料庫數據: ...
  • 寫了一個圖片處理的Image類,1.能生成縮略圖,不失真,不出現黑邊;2.添加水印圖,能根據圖片大小,自動縮放水印圖。 ...
  • 前言 在最近看了APUE的標準IO部分之後感覺對標準IO的緩存太模糊,沒有搞明白,APUE中關於緩存的部分一筆帶過,沒有深究緩存的實現原理,這樣一本被吹上天的書為什麼不講透徹呢?今天早上爬起來趕緊找了幾篇文章看看,直到發現了這篇博客:http://blog.sina.com.cn/s/blog_65 ...
  • Calendar.getInstance().getTime() 獲取當前時間(包括星期和時區 CST China Standard Time): Fri Jan 06 21:03:36 CST 2017 Calendar cal = Calendar.getInstance(); 完整顯示今天當前 ...
  • EC筆記:第4部分:22、所有成員都應該是private的 更簡單的訪問 用戶不用記得什麼時候該帶上括弧,什麼時候不用帶上括弧(因為很確定的就要帶上括弧) 訪問限制 對於public的成員變數,我們可以隨意對其設置值(無論合法還是非法,它都會無條件接受) 但是我們如果將其設置為private的,那麼... ...
  • abalone.data.rar ...
  • Python基礎教程 網易雲課堂-零基礎入門學習Python ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...