• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

NodeJs使用mysql.createPool连接池

武飞扬头像
大猫会长
帮助1

1. 建库连库

连接MySQL数据库需要安装支持

npm install mysql

我们需要提前安装按mysql sever端

建一个数据库mydb1

  1.  
    mysql> CREATE DATABASE mydb1;
  2.  
    mysql> SHOW DATABASES;
  3.  
    --------------------
  4.  
    | Database |
  5.  
    --------------------
  6.  
    | information_schema |
  7.  
    | mysql |
  8.  
    | mydb1 |
  9.  
    | performance_schema |
  10.  
    --------------------
  11.  
    rows in set (0.00 sec)

然后建一张表user如下

  1.  
    create table user(
  2.  
    id int not null primary key auto_increment,
  3.  
    name VARCHAR() not null,
  4.  
    pwd VARCHAR() not null,
  5.  
    create_date TIMESTAMP NULL DEFAULT now()
  6.  
    )ENGINE=InnoDB DEFAULT CHARSET=utf8;
  7.  
    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(){
  13.  
    return this.pool;
  14.  
    }
  15.  
    };
  16.  
    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.  
    return;
  16.  
    }
  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.  
    return;
  25.  
    }
  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.  
    })
学新通

运行结果

学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhggggkf
系列文章
更多 icon
同类精品
更多 icon
继续加载