us.mysql.js 7.2 KB

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