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

1. 建库连库

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

rush:bash;"> npm install MysqL

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

一个数据库mydb1

CREATE DATABASE mydb1; MysqL> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | MysqL | | mydb1 | | performance_schema | +--------------------+ 4 rows in set (0.00 sec)

然后建一张表user如下

rush:sql;"> 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数据库

rush:js;"> 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],rs) { if (err) { console.log('[query] - :'+err); return; } for(var i=0;i//关闭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创建的数据库连接池对象。

rush:js;"> 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(); //释放一个连接放回连接池 需要再操作结束后再执行,否则后面的数据库操作会报错。

rush:js;"> 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,?)';
var param = ['eee','eee'];
conn.query(userAddsql,rs){
if(err){
console.log('insert err:',err.message);
return;
}
console.log('insert success');
//conn.release(); //放回连接池
})
//查询
conn.query('SELECT * from user',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 = 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(insert<a href="https://www.jb51.cc/tag/sql/" target="_blank" class="keywords">sql</a>,function (err1,res1) {
  if (err1) console.log(err1);
  console.log("INSERT Return ==> ");
  console.log(res1);

  //query
  conn.query(select<a href="https://www.jb51.cc/tag/sql/" target="_blank" class="keywords">sql</a>,function (err2,rows) {
    if (err2) console.log(err2);

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

    //update
    conn.query(update<a href="https://www.jb51.cc/tag/sql/" target="_blank" class="keywords">sql</a>,function (err3,res3) {
      if (err3) console.log(err3);
      console.log("UPDATE Return ==> ");
      console.log(res3);

      //query
      conn.query(select<a href="https://www.jb51.cc/tag/sql/" target="_blank" class="keywords">sql</a>,function (err4,rows2) {
        if (err4) console.log(err4);

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

});
})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...