us.mysql.js 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. //由于nodejs版本更新很快,所以下面的代码需要随着nodejs版本的调整而调整。还不太稳定。
  2. //Error:Connection Lost:The Server closed the connection。长时间连接,会报连接错误。
  3. var mysql = require('mysql'); //包含mysql驱动程序
  4. //----------------------------------mysql 连接池--------------------------------------
  5. var pool = mysql.createPool({
  6. //10个连接后重新再建立连接?为0则永远不丢失?如果此处修改为10,数据库只能连接10次,然后会取不到数据,报504 Gateway Time-out错误
  7. //mysql连接池还需要再研究
  8. connectionLimit: 0,
  9. host: 'db.1473.cn',
  10. user: 'root',
  11. password: 'usestudio-1',
  12. database: "UseStudio_Develop",
  13. port: 14062
  14. });
  15. //----------------------------------统一执行mysql存储过程函数-----------------------------
  16. exports.usselect = function (pArr, callback) {
  17. var _pro, i; //定义循环变量,对字符串解密
  18. for (i = 0; i < pArr.length; i++) { pArr[i] = decodeURIComponent(pArr[i]); } //解密中文字符串。
  19. var _pro = "CALL " + "" + pArr[0] + "('"; //命令拼凑
  20. for (i = 1; i < pArr.length; i++) { _pro += pArr[i]; if (i < pArr.length - 1) _pro += "','"; } //拼凑参数
  21. _pro += "')"; //拼凑结束。
  22. console.log("拼凑的MySQl语句为:" + _pro);
  23. //使用连接池技术连接数据库
  24. pool.getConnection(function (err, connection) {
  25. //以后还需要加上断线重连问题
  26. if (err) { console.log("连接池:" + err); }
  27. else {
  28. connection.query(_pro, function (err, results, fields) {
  29. connection.release(); //释放连接池,使用此方法需要更新nodejs的mysql模块: npm install mysql@2.0.0-alpha9
  30. if (err) { console.log("MySql查询语句出错:" + err); }
  31. else if (results) {
  32. callback(JSON.stringify(results)); //返回json数据
  33. console.log("MySql执行成功!");
  34. }
  35. else { callback('false'); }
  36. });
  37. }
  38. });
  39. }
  40. //选取数据
  41. //exports.usselect1 = function (sql, callback) {
  42. // //---------------------------------查询,并设置回调函数------------------------------
  43. // //mysql guid支持得不太好,由于Http是传输文本,定为char36
  44. // //如果定义为二进制binary16则设计到转义过程,消耗cpu,存储空间相对较小
  45. // connection.query(sql, function aa(err, results, fields) {
  46. // console.log(sql);
  47. // if (err) { throw err; }
  48. // if (results) {
  49. // //在控制台输出使用的语句,暂时屏蔽 //console.log(results); //console.log(fields);
  50. // //如果在这里关闭连接,当有第二个用户连接进来,会报错如下:“Error:cannot enqueue query ater invoking quit”,所以暂时屏蔽,以后再考虑关闭连接问题。
  51. // //应该和sql连接数有关。1个连接可以有多少用户可以连进来。超过多少用户开启第二个连接,这样可以算出用户数量。
  52. // //这个地方还涉及到如何查看mysql开启了多少个连接。每个连接支撑了多少用户,mysql一共可以同时开启多少个连接。
  53. // //connection.end();//关闭sql连接,何时需要关闭此连接?
  54. // //结果给回调函数,和传统return有区别,需要特别注意。
  55. // callback(JSON.stringify(results)); //返回json数据
  56. // console.log("my sql success.");
  57. // }
  58. // else { callback('false'); }
  59. // });
  60. //}
  61. //--------------------------------------------nodejs执行存储过程------------------------
  62. //exports.usproselect = function (sql, callback) {
  63. // //console.log(sql);
  64. // connection.query(sql[0], function (err, rows, fields) {
  65. // if (err) { throw err; }
  66. // callback(JSON.stringify(rows));
  67. // });
  68. //}
  69. //exports.USselect = function (sql, rp, callback) {
  70. // //console.log(sql);
  71. // connection.query(sql, function (err, rows, fields) {
  72. // if (err) { throw err; }
  73. // var _cb = [rp, rows];
  74. // callback(JSON.stringify(_cb));
  75. // });
  76. //}
  77. //------------------------------------创建数据库-------------------------------
  78. /*connection.query('CREATE DATABASE '+TEST_DATABASE, function(err) {
  79. if (err && err.number != mysql.ERROR_DB_CREATE_EXISTS) {
  80. throw err;
  81. }
  82. });*/
  83. //不指定回调函数,如果出错,则体现为客户端错误
  84. //connection.query('USE '+TEST_DATABASE);
  85. //-------------------------------------创建表格,插入数据---------------------------------
  86. /*connection.query(
  87. 'CREATE TABLE '+TEST_TABLE+
  88. '(id INT(11) AUTO_INCREMENT, '+
  89. 'name VARCHAR(255), '+
  90. 'PRIMARY KEY (id))'
  91. );*/
  92. //-----------------------------------插入数据---------/------------------------------
  93. /*connection.query(
  94. 'INSERT INTO '+TEST_TABLE+' '+
  95. 'SET name = ?',
  96. ['nodejs1']
  97. );
  98. var query = connection.query(
  99. 'INSERT INTO '+TEST_TABLE+' '+
  100. 'SET name = ?',
  101. ['nodejs2']
  102. );*/
  103. /*exports.usproselect = function (sql, callback) {
  104. connection.query(sql, function (err, rows, fields) {
  105. if (err) { throw err; }
  106. callback(JSON.stringify(rows));
  107. });
  108. }
  109. exports.aa = function () { console.log("####"); }*/
  110. //exports.USselect = function (callback, sql) {
  111. // connection.query(sql, function (err, rows, fields) {
  112. // if (err) { throw err; }
  113. // if (sql.length != 2)
  114. // exports.usproselect(rows, callback, sql);
  115. // });
  116. // //exports.usproselect("CALL PB_Select();", function (results) { _replys.concat(results); });
  117. //}
  118. //exports.usproselect = function (sql, callback) {
  119. // if (sql.length > 1) {
  120. // console.log(sql[0]);
  121. // connection.query(sql[0], function (err, rows, fields) {
  122. // if (err) { throw err; }
  123. // exports.USselect(sql[1], rows, callback);
  124. // });
  125. // }
  126. // else {
  127. // connection.query(sql[0], function (err, rows, fields) {
  128. // if (err) { throw err; }
  129. // callback(JSON.stringify(rows));
  130. // });
  131. // }
  132. //}
  133. //-----------------------连接数据库---------------------------------------------------
  134. //var connection = mysql.createConnection({ host: '192.168.65.18', user: 'root', password: 'usestudio-1' });
  135. //连接错误,断线重连
  136. //connection.on('error', function (err) {
  137. // console.log('连接Mysql发生错误,自动重连', err);
  138. // // 如果是连接断开,自动重新连接
  139. // if (err.code === 'PROTOCOL_CONNECTION_LOST') {
  140. // connection = mysql.createConnection({ host: '192.168.65.18', user: 'root', password: 'usestudio-1' });
  141. // connection.query('USE ' + db);
  142. // } else {
  143. // throw err;
  144. // }
  145. //});
  146. //连接错误,2秒重试
  147. //connection.connect(function (err) {
  148. // if (err) {
  149. // console.log('重新连接时发生错误,2秒后重试:', err);
  150. // setTimeout(connection = mysql.createConnection({ host: '192.168.65.18', user: 'root', password: 'usestudio-1' }), 2000);
  151. // connection.query('USE ' + db);
  152. // }
  153. //});
  154. //指定数据库
  155. //connection.query('USE ' + db);
  156. //console.log("connect");