mysql连接池模块

如果不想程序在查询数据时卡死或等待过长时间,一般不推荐在node中开启一个连接后全部查询都用这个链接并且不关闭。因为node里面的mysql不像php里的那样会在完成查询后断开,只要不主动断开,连接一直存在,当连接数量达到一定数量时就会产生严重的阻塞,出现各种延时和卡死现象。在并发量较大时,可以通过建立连接池来缓解并发压力。

在node中的mysql模块里其用来操作数据的query()方法接收的参数是不同的,在使用时需要特别注意。具体模块如下:

复制代码
/**
 * mysql连接池模块
 * @author jeri
 * @time  2016.5.24           
 */

var mysql=require("mysql");
/**
 * 连接池建立
 * @pool {object}
 */
var pool = mysql.createPool({  
    host: 'localhost',  
    user: 'root',  
    password: '',  
    database: 'movielens',  
    port: 3306  
});  

/**
 * select和delete操作
 * @param  {string}   sql      sql语句
 * @param  {Function} callback 回调函数
 * @return {none}            
 */
var sdQuery=function(sql,callback){  
    pool.getConnection(function(err,conn){  
        if(err){ 

            console.log('CONNECT ERROR:', err.message); 
            callback(err,null,null);  
        }else{  
            conn.query(sql,function(qerr,vals,fields){  
                //释放连接  
                conn.release();  
                //事件驱动回调  
                callback(qerr,vals,fields);  
            });  
        }  
    });  
};  

/**
 * update和insert操作
 * @param  {string}   sql      sql语句
 * @param  {array}    params   参数数组 
 * @param  {Function} callback 回调函数
 * @return {none}            
 */
var uiQuery=function(sql,params,callback){  
    pool.getConnection(function(err,conn){  
        if(err){ 
            
            console.log('CONNECT ERROR:', err.message); 
            callback(err,null,null);  
        }else{  
            conn.query(sql,params,function(qerr,vals,fields){  
                //释放连接  
                conn.release();  
                //事件驱动回调  
                callback(qerr,vals,fields);  
            });  
        }  
    });  
};  

/**
 * query函数重载
 * @return {none}
 */
var query = function(){

    var len = arguments.length;
    if(len==2) {
        var sql = arguments[0];
        var cb = arguments[1];
        sdQuery(sql, cb);
    } else if(len == 3){
        var sql = arguments[0];
        var params = arguments[1];
        var cb = arguments[2];
        uiQuery(sql, params, cb);

    } else {
        console.log('ERROR:', '传参不对');
    }
};

// 暴露接口
module.exports = query;
复制代码

 

posted @   默语  阅读(1270)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示