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