zoukankan      html  css  js  c++  java
  • 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 })

     运行结果

  • 相关阅读:
    iOS企业版打包 发布在线安装包 plist
    iOS企业版打包(转载)
    微信小程序开发入门教程
    SVN常用命令说明
    高仿QQ、微信效果的图片浏览器(支持原图和缩略图、多种手势、CocoaPods)
    iOS 调试大法
    MFMailComposeViewController发送邮件的实例
    自定义UISearchBar外观
    npm 包命令:不是内部或外部命令 问题分析
    angular 子路由跳转出现Navigation triggered outside Angular zone, did you forget to call ‘ngZone.run() 的问题修复
  • 原文地址:https://www.cnblogs.com/fangsmile/p/6257450.html
Copyright © 2011-2022 走看看