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中的非阻塞方法介绍
Jun 05 NodeJs
基于promise.js实现nodejs的promises库
Jul 06 NodeJs
Nodejs学习笔记之Global Objects全局对象
Jan 13 NodeJs
Nodejs实现批量下载妹纸图
May 28 NodeJs
详谈Angular路由与Nodejs路由的区别
Mar 05 NodeJs
nodejs获取微信小程序带参数二维码实现代码
Apr 12 NodeJs
nodejs mysql 实现分页的方法
Jun 06 NodeJs
nodejs微信扫码支付功能实现
Feb 17 NodeJs
详解Nodejs内存治理
May 13 NodeJs
解决Nodejs全局安装模块后找不到命令的问题
May 15 NodeJs
Mac下通过brew安装指定版本的nodejs教程
May 17 NodeJs
nodejs开发一个最简单的web服务器实例讲解
Jan 02 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中的事务使用实例
2015/05/26 PHP
PHP函数引用返回的实例详解
2016/09/11 PHP
详解使用php调用微信接口上传永久素材
2017/04/11 PHP
使用PHP连接数据库_实现用户数据的增删改查的整体操作示例
2017/09/01 PHP
yii2 上传图片的示例代码
2018/11/02 PHP
php面向对象重点知识分享
2019/09/27 PHP
图片自动缩小的js代码,用以防止图片撑破页面
2007/03/12 Javascript
JS保留小数点(四舍五入、四舍六入)实现思路及实例
2013/04/25 Javascript
原始XMLHttpRequest方法详情回顾
2013/11/28 Javascript
关于JS数组追加数组采用push.apply的问题
2014/06/09 Javascript
深入解析JavaScript编程中的this关键字使用
2015/11/09 Javascript
JavaScript中利用jQuery绑定事件的几种方式小结
2016/03/06 Javascript
基于HTML模板和JSON数据的JavaScript交互(移动端)
2016/04/06 Javascript
jquery+html仿翻页相册功能
2016/12/20 Javascript
微信小程序中使用ECharts 异步加载数据的方法
2018/06/27 Javascript
Vuex的初探与实战小结
2018/11/26 Javascript
详解vue中使用微信jssdk
2019/04/19 Javascript
vue 使用 canvas 实现手写电子签名
2020/03/06 Javascript
JS倒计时两种实现方式代码实例
2020/07/27 Javascript
基于JS实现快速读取TXT文件
2020/08/25 Javascript
跟老齐学Python之玩转字符串(1)
2014/09/14 Python
深入解析Python中的线程同步方法
2016/06/14 Python
Python将多个list合并为1个list的方法
2018/06/27 Python
Python基于matplotlib画箱体图检验异常值操作示例【附xls数据文件下载】
2019/01/07 Python
python 将大文件切分为多个小文件的实例
2019/01/14 Python
全面了解django的缓存机制及使用方法
2019/07/22 Python
Python使用itchat 功能分析微信好友性别和位置
2019/08/05 Python
python3正则模块re的使用方法详解
2020/02/11 Python
Python Django中的STATIC_URL 设置和使用方式
2020/03/27 Python
Python 实现敏感目录扫描的示例代码
2020/05/21 Python
机关单位动员会主持词
2014/03/20 职场文书
党课培训心得体会
2014/09/02 职场文书
2014年驾驶员工作总结
2014/11/18 职场文书
大学生暑假实习总结
2015/07/13 职场文书
Python爬取某拍短视频
2021/06/11 Python
Python字符串常规操作小结
2022/04/03 Python