nodejs进阶(6)—连接MySQL数据库示例


Posted in NodeJs onJanuary 07, 2017

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数据库

var mysql = require('mysql'); //调用MySQL模块
//创建一个connection 
var connection = mysql.createConnection({   
  host: 'localhost',    //主机 
  user: 'root',        //MySQL认证用户名 
  password: 'root',    //MySQL认证用户密码 
  database: 'mydb1', 
  port: '3306'          //端口号 
});
//创建一个connection 
connection.connect(function(err){ 
  if(err){     
    console.log('[query] - :'+err); 
    return; 
  } 
  console.log('[connection connect] succeed!'); 
}); 
//----插入
var userAddSql = 'insert into user (name,pwd) values(?,?)';
var param = ['fff','123'];
connection.query(userAddSql,param,function(err,rs){
  if(err){
    console.log('insert err:',err.message);
    return;
  }
    console.log('insert success');
});
//执行查询 
connection.query('SELECT * from user where id=?',[2], function(err, rs) { 
  if (err) { 
    console.log('[query] - :'+err); 
    return; 
  } 
  for(var i=0;i<rs.length;i++){
    console.log('The solution is: ', rs[i].uname); 
  }
});  

//关闭connection 
connection.end(function(err){ 
  if(err){ 
    console.log(err.toString());
    return; 
  } 
  console.log('[connection end] succeed!'); 
});

但是实际每次创建连接都需要一定的开销,执行效率就会有影响。下面介绍一种连接池连mysql的方法:node-mysql

2. 连接池配置使用

node-mysql是目前最火的node下的mysql驱动,是mysqlpool的一个模块。

下面的代码是提供一个连接池,getPool函数返回createPool创建的数据库连接池对象。 

var mysql = require('mysql'); //调用MySQL模块 
function OptPool(){ 
  this.flag=true; //是否连接过 
  this.pool = mysql.createPool({   
    host: 'localhost',    //主机 
    user: 'root',        //MySQL认证用户名 
    password: 'root',    //MySQL认证用户密码 
    database: 'test', 
    port: '3306'          //端口号 
  }); 
 
  this.getPool=function(){ 
     return this.pool; 
  } 
}; 
module.exports = OptPool;

下面的代码展示如何使用这个连接池,插入和查询的使用。需要注意的是conn.release(); //释放一个连接放回连接池 需要再操作结束后再执行,否则后面的数据库操作会报错。

var OptPool = require('./models/OptPool'); 
 
var optPool = new OptPool(); 
var pool = optPool.getPool(); 

//执行SQL语句 
//从连接池中获取一个连接
pool.getConnection(function(err,conn){ 
  //----插入 
  var userAddSql = 'insert into user (uname,pwd) values(?,?)'; 
  var param = ['eee','eee'];
  conn.query(userAddSql,param,function(err,rs){
    if(err){ 
      console.log('insert err:',err.message); 
      return; 
    } 
    console.log('insert success'); 
    //conn.release(); //放回连接池
  })
  //查询 
  conn.query('SELECT * from user', function(err, rs) { 
    if (err) { 
      console.log('[query] - :'+err); 
      return; 
    }  
    for(var i=0;i<rs.length;i++){
      console.log(rs[i].uname); 
    }
    conn.release(); //放回连接池
  });
});

下面介绍一个复杂一点的增删查改的数据库操作,因相互之间有依赖,所以代码可读性就变得特别差。

var OptPool = require('./models/OptPool'); 
 
var optPool = new OptPool(); 
var pool = optPool.getPool(); 

var insertSQL = 'insert into table1(name,pwd) values("conan","123"),("fens.me","456")';
var selectSQL = 'select * from table1 limit 10';
var deleteSQL = 'delete from table1';
var updateSQL = 'update table1 set name="conan update" where name="conan"';

pool.getConnection(function(err,conn){ 
//delete
  conn.query(deleteSQL, function (err0, res0) {
    if (err0) console.log(err0);
    console.log("DELETE Return ==> ");
    console.log(res0);

    //insert
    conn.query(insertSQL, function (err1, res1) {
      if (err1) console.log(err1);
      console.log("INSERT Return ==> ");
      console.log(res1);

      //query
      conn.query(selectSQL, function (err2, rows) {
        if (err2) console.log(err2);

        console.log("SELECT ==> ");
        for (var i in rows) {
          console.log(rows[i]);
        }

        //update
        conn.query(updateSQL, function (err3, res3) {
          if (err3) console.log(err3);
          console.log("UPDATE Return ==> ");
          console.log(res3);

          //query
          conn.query(selectSQL, function (err4, rows2) {
            if (err4) console.log(err4);

            console.log("SELECT ==> ");
            for (var i in rows2) {
              console.log(rows2[i]);
            }
          });
        });
      });
    });
  });
})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

NodeJs 相关文章推荐
NodeJS框架Express的模板视图机制分析
Jul 19 NodeJs
nodejs中exports与module.exports的区别详细介绍
Jan 14 NodeJs
Nodejs Post请求报socket hang up错误的解决办法
Sep 25 NodeJs
Nodejs进阶:如何将图片转成datauri嵌入到网页中去实例
Nov 21 NodeJs
搭建简单的nodejs http服务器详解
Mar 09 NodeJs
解析NodeJS异步I/O的实现
Apr 13 NodeJs
用Nodejs搭建服务器访问html、css、JS等静态资源文件
Apr 28 NodeJs
NodeJS链接MySql数据库的操作方法
Jun 27 NodeJs
nodejs多版本管理总结
Apr 03 NodeJs
详解redis在nodejs中的应用
May 02 NodeJs
nodejs简单抓包工具使用详解
Aug 23 NodeJs
使用 Koa + TS + ESLlint 搭建node服务器的过程详解
May 30 NodeJs
详解NodeJs支付宝移动支付签名及验签
Jan 06 #NodeJs
nodejs和php实现图片访问实时处理
Jan 05 #NodeJs
nodejs实例解析(输出hello world)
Jan 03 #NodeJs
Highcharts+NodeJS搭建数据可视化平台示例
Jan 01 #NodeJs
nodejs利用http模块实现银行卡所属银行查询和骚扰电话验证示例
Dec 30 #NodeJs
浅谈Nodejs中的作用域问题
Dec 26 #NodeJs
nodeJS删除文件方法示例
Dec 25 #NodeJs
You might like
PHP URL参数获取方式的四种例子
2014/02/28 PHP
2014最热门的24个php类库汇总
2014/12/18 PHP
深入研究PHP中的preg_replace和代码执行
2018/08/15 PHP
javascript轻松实现当鼠标移开时已弹出子菜单自动消失
2013/12/29 Javascript
IE下双击checkbox反应延迟问题的解决方法
2014/03/27 Javascript
JavaScript中数组成员的添加、删除介绍
2014/12/30 Javascript
JavaScript中判断变量是数组、函数或是对象类型的方法
2015/02/25 Javascript
js实现的页面矩阵图形变换特效
2016/01/26 Javascript
浅谈AngularJs指令之scope属性详解
2016/10/24 Javascript
JavaScript常见的五种数组去重的方式
2016/12/15 Javascript
JS实现给对象动态添加属性的方法
2017/01/05 Javascript
jQuery Ajax实现跨域请求
2017/01/21 Javascript
从零学习node.js之详解异步控制工具async(八)
2017/02/27 Javascript
jQuery实现条件搜索查询、实时取值及升降序排序的方法分析
2019/05/04 jQuery
js实现类似iphone的网页滑屏解锁功能示例【附源码下载】
2019/06/10 Javascript
js实现跟随鼠标移动的小球
2019/08/26 Javascript
python 表达式和语句及for、while循环练习实例
2017/07/07 Python
python如何为创建大量实例节省内存
2018/03/20 Python
DES加密解密算法之python实现版(图文并茂)
2018/12/06 Python
Python3 Post登录并且保存cookie登录其他页面的方法
2018/12/28 Python
Python实现的线性回归算法示例【附csv文件下载】
2018/12/29 Python
Python实现爬取亚马逊数据并打印出Excel文件操作示例
2019/05/16 Python
python爬虫 Pyppeteer使用方法解析
2019/09/28 Python
Pycharm 2020年最新激活码(亲测有效)
2020/09/18 Python
Restful_framework视图组件代码实例解析
2020/11/17 Python
详解通过HTML5 Canvas实现图片的平移及旋转变化的方法
2016/03/22 HTML / CSS
世界上最大的罕见唱片、CD和音乐纪念品网上商店:991.com
2018/05/03 全球购物
购买英国原创艺术:Art Gallery
2018/08/25 全球购物
加拿大最大的体育用品、鞋类和服装零售商:Sport Chek
2018/11/29 全球购物
美工的岗位职责
2013/11/14 职场文书
优秀员工个人的自我评价
2013/11/29 职场文书
中国入世承诺
2014/04/01 职场文书
企业理念标语
2014/06/09 职场文书
手术室护士节演讲稿
2014/08/27 职场文书
房地产销售员岗位职责
2015/04/11 职场文书
python 爬取吉首大学网站成绩单
2021/06/02 Python