//由于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");