nodeJS操作MySQL

官方参考文档:https://www.npmjs.com/package/mysql#preparing-queries
1 在module路径下安装MySQL模块(mysql驱动)
npm install mysql –save
2 在NodeJS中使用mysql

var mysql      = require('mysql');
var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'me',
  password : 'secret',
  database : 'my_db'
});

connection.connect();//隐式使用

connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
  if (err) throw err;

  console.log('The solution is: ', rows[0].solution);
});

connection.end();
显示连接
connection.connect(function(err) {
  if (err) {
    console.error('error connecting: ' + err.stack);//打印当前错误栈
    return;
  }

  console.log('connected as id ' + connection.threadId);//打印当前连接的线程id,用于调试
});
下面的使用方式也是正确的
然而,也可以隐式地建立连接通过调用查询:
var mysql      = require('mysql');
var connection = mysql.createConnection(...);

connection.query('SELECT 1', function(err, rows) {
  // connected! (unless `err` is set) 
});
当然下面的连接方式也是没有问题的,字符串连接方式
var connection = mysql.createConnection('mysql://user:pass@host/db?debug=true&charset=BIG5_CHINESE_CI&timezone=-0700');


创建加密连接(要有crt证书)
var connection = mysql.createConnection({
  host : 'localhost',
  ssl  : {
    ca : fs.readFileSync(__dirname + '/mysql-ca.crt')
  }
});
你也可以连接到一个MySQL服务器没有正确提供适当的CA的信任
var connection = mysql.createConnection({
  host : 'localhost',
  ssl  : {
    // DO NOT DO THIS 
    // set up your ca correctly to trust the connection 
    rejectUnauthorized: false
  }
});

两种结束连接的区别connection.end();结束的回调函数是可选的 connection.destroy();
End方式 是在确保当前正在处理的SQL语句正常完成后断开连接
Destroy方式 立即结束连接,不管当前是否正在执行任务

并发执行查询任务
并发执行查询操作,就需要创建连接池

var mysql = require('mysql');
var pool  = mysql.createPool({
  connectionLimit : 10,
  host            : 'example.org',
  user            : 'bob',
  password        : 'secret',
  database        : 'my_db'
});

pool.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
  if (err) throw err;

  console.log('The solution is: ', rows[0].solution);
});

Rows是查询结果数组 数组长度代表 查询记录条数 rows[0]表示第一行数据,rows[0]的数据类型为对象,可以通过对象名访问字段值 ;可以通过判断rows数组的长度来判断是否有满足查询条件的结果(如果没有匹配结果,访问rows[i].xxx会报对象属性错误)
NodeJS实现的MySQL连接池 封装模块

var mysql  = require('mysql');
var pool  = mysql.createPool({
    connectionLimit : 10,
    host     : '192.168.5.92',
    user     : 'root',
    password : '',
    database : 'rdms'
});
function query(sql,callback){
    pool.getConnection(function(err,conn){
        if(err){
            callback(err,null,null);
        }else{
            conn.query(sql,function(qerr,vals,fields){
                //释放连接
                conn.release();
                //事件驱动回调
                callback(qerr,vals,fields);
            });
        }
    });
};
exports.mysql_query =query ;

该query函数 接收一个SQL字符串,从连接池中取一个连接,如果取出错误则回调err,否则执行传递来的SQL语句,查询成功后(回调执行时)断开本连接给连接池,并将查询结果回调调用者
连接池参数配置
acquireTimeout:接收连接超时设置。(默认:10000)
waitForConnections:决定了可用的行动当没有连接池和限制。如果这是真的,池将队列连接请求并调用它时可用。如果错误,池将与一个错误立即回电话。(默认值是真实的)
connectionLimit:创建连接的最大数量。(默认值:10)
queueLimit:连接池的连接请求的队列数限制。如果设置为0,没有限制排队连接请求的数量。(默认值:0)
Pool events 连接池事件
‘connection’
连接事件<’connection’> 使用方式pool.on(‘event’); 当pool有新的连接时触发
pool.on(‘connection’, function (connection) {
connection.query(‘SET SESSION auto_increment_increment=1’)
});
enqueue
回调时的池将发出一个排队的事件一直在排队等待一个可用的连接。
pool.on(‘enqueue’, function () {
console.log(‘Waiting for available connection slot’);
});
Closing all the connections in a pool
关闭连接池里所有连接触发事件
当你完成使用池,你必须结束所有的连接或节点。js事件循环将保持活跃,直到连接MySQL服务器关闭的。这样做通常是如果池中使用脚本或在优雅地关闭服务器。结束所有的连接池,池结束使用方法:
pool.end(function (err) {
// all connections in the pool have ended
});
一旦执行连接池断开,所有的连接都将不可用
PoolCluster
连接池集群 PoolCluster提供多个主机连接。(集团和重试和选择器)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值