//由于nodejs版本更新很快，所以下面的代码需要随着nodejs版本的调整而调整。还不太稳定。
//Error:Connection Lost:The Server closed the connection。长时间连接，会报连接错误。
var mysql = require('mysql'); //包含mysql驱动程序

//----------------------------------mysql 连接池--------------------------------------
var pool = mysql.createPool({
    //10个连接后重新再建立连接？为0则永远不丢失？如果此处修改为10,数据库只能连接10次，然后会取不到数据，报504 Gateway Time-out错误
    //mysql连接池还需要再研究
    connectionLimit: 0,
    host: 'db.1473.cn',
    user: 'root',
    password: 'usestudio-1',
    database: "UseStudio_Develop",
    port: 14062
});


//----------------------------------统一执行mysql存储过程函数-----------------------------
exports.usselect = function (pArr, callback) {

    var _pro, i; //定义循环变量,对字符串解密
    for (i = 0; i < pArr.length; i++) { pArr[i] = decodeURIComponent(pArr[i]); } //解密中文字符串。

    var _pro = "CALL " + "" + pArr[0] + "('"; //命令拼凑
    for (i = 1; i < pArr.length; i++) { _pro += pArr[i]; if (i < pArr.length - 1) _pro += "','"; } //拼凑参数
    _pro += "')"; //拼凑结束。

    console.log("拼凑的MySQl语句为：" + _pro);

    //使用连接池技术连接数据库
    pool.getConnection(function (err, connection) {
        //以后还需要加上断线重连问题
        if (err) { console.log("连接池:" + err); }
        else {
            connection.query(_pro, function (err, results, fields) {
                connection.release(); //释放连接池,使用此方法需要更新nodejs的mysql模块： npm install mysql@2.0.0-alpha9 
                if (err) { console.log("MySql查询语句出错:" + err); }
                else if (results) {
                    callback(JSON.stringify(results)); //返回json数据
                    console.log("MySql执行成功！");
                }
                else { callback('false'); }
            });
        }
    });
}




//选取数据
//exports.usselect1 = function (sql, callback) {
//    //---------------------------------查询，并设置回调函数------------------------------
//    //mysql guid支持得不太好，由于Http是传输文本，定为char36 
//    //如果定义为二进制binary16则设计到转义过程，消耗cpu，存储空间相对较小
//    connection.query(sql, function aa(err, results, fields) {
//        console.log(sql);
//        if (err) { throw err; }
//        if (results) {
//            //在控制台输出使用的语句，暂时屏蔽 //console.log(results); //console.log(fields);
//            //如果在这里关闭连接，当有第二个用户连接进来，会报错如下：“Error:cannot enqueue query ater invoking quit”,所以暂时屏蔽，以后再考虑关闭连接问题。
//            //应该和sql连接数有关。1个连接可以有多少用户可以连进来。超过多少用户开启第二个连接，这样可以算出用户数量。
//            //这个地方还涉及到如何查看mysql开启了多少个连接。每个连接支撑了多少用户，mysql一共可以同时开启多少个连接。
//            //connection.end();//关闭sql连接，何时需要关闭此连接？
//            //结果给回调函数，和传统return有区别,需要特别注意。
//            callback(JSON.stringify(results)); //返回json数据
//            console.log("my sql success.");
//        }
//        else { callback('false'); }
//    });
//}


//--------------------------------------------nodejs执行存储过程------------------------
//exports.usproselect = function (sql, callback) {
//    //console.log(sql);
//    connection.query(sql[0], function (err, rows, fields) {
//        if (err) { throw err; }
//        callback(JSON.stringify(rows));
//    });
//}

//exports.USselect = function (sql, rp, callback) {
//    //console.log(sql);
//    connection.query(sql, function (err, rows, fields) {
//        if (err) { throw err; }
//        var _cb = [rp, rows];
//        callback(JSON.stringify(_cb));
//    });
//}


//------------------------------------创建数据库-------------------------------
/*connection.query('CREATE DATABASE '+TEST_DATABASE, function(err) {
if (err && err.number != mysql.ERROR_DB_CREATE_EXISTS) {
throw err;
}
});*/
//不指定回调函数，如果出错，则体现为客户端错误
//connection.query('USE '+TEST_DATABASE);

//-------------------------------------创建表格,插入数据---------------------------------
/*connection.query(
'CREATE TABLE '+TEST_TABLE+
'(id INT(11) AUTO_INCREMENT, '+
'name VARCHAR(255), '+
'PRIMARY KEY (id))'
);*/

//-----------------------------------插入数据---------/------------------------------
/*connection.query(
'INSERT INTO '+TEST_TABLE+' '+
'SET name = ?',
['nodejs1']
);
var query = connection.query(
'INSERT INTO '+TEST_TABLE+' '+
'SET name = ?',
['nodejs2']
);*/

/*exports.usproselect = function (sql, callback) {
connection.query(sql, function (err, rows, fields) {
if (err) { throw err; }
callback(JSON.stringify(rows));
});
}
exports.aa = function () { console.log("####"); }*/
//exports.USselect = function (callback, sql) {
//    connection.query(sql, function (err, rows, fields) {
//        if (err) { throw err; }
//        if (sql.length != 2)
//            exports.usproselect(rows, callback, sql);
//    });
//    //exports.usproselect("CALL PB_Select();", function (results) { _replys.concat(results); });
//}

//exports.usproselect = function (sql, callback) {
//    if (sql.length > 1) {
//        console.log(sql[0]);
//        connection.query(sql[0], function (err, rows, fields) {
//            if (err) { throw err; }
//            exports.USselect(sql[1], rows, callback);
//        });
//    }
//    else {
//        connection.query(sql[0], function (err, rows, fields) {
//            if (err) { throw err; }
//            callback(JSON.stringify(rows));
//        });
//    }
//}
//-----------------------连接数据库---------------------------------------------------
//var connection = mysql.createConnection({ host: '192.168.65.18', user: 'root', password: 'usestudio-1' });
//连接错误，断线重连
//connection.on('error', function (err) {
//    console.log('连接Mysql发生错误,自动重连', err);
//    // 如果是连接断开，自动重新连接
//    if (err.code === 'PROTOCOL_CONNECTION_LOST') {
//        connection = mysql.createConnection({ host: '192.168.65.18', user: 'root', password: 'usestudio-1' });
//        connection.query('USE ' + db);
//    } else {
//        throw err;
//    }
//});
//连接错误，2秒重试
//connection.connect(function (err) {
//    if (err) {
//        console.log('重新连接时发生错误，2秒后重试:', err);
//        setTimeout(connection = mysql.createConnection({ host: '192.168.65.18', user: 'root', password: 'usestudio-1' }), 2000);
//        connection.query('USE ' + db);
//    }
//});
//指定数据库
//connection.query('USE ' + db);
//console.log("connect");

