zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    启明星门户网站Portal发布V4.5,并兼论部分功能的实现
    修改SQL数据库dbo所有者
    iphone& android 开发指南 http://mobile.tutsplus.com
    启明星会议室预定系统V5.0.0.0版本说明
    启明星Portal企业内部网站V4.3版 附演示地址 http://demo.dotnetcms.org
    在winform程序里实现最小化隐藏到windows右下角
    【门户网站】启明星Portal系统里,关于天气预报调用的说明
    获取客户端经纬度坐标
    修改表名或者列名SQL
    ER图
  • 原文地址:https://www.cnblogs.com/syfwhu/p/5522803.html
Copyright © 2011-2022 走看看