GVKun编程网logo

nodejs连接mysql突然中断问题解决方案(nodejs连接mysql的历程)

6

本文将带您了解关于nodejs连接mysql突然中断问题解决方案的新内容,同时我们还将为您解释nodejs连接mysql的历程的相关知识,另外,我们还将为您提供关于mybatis连接MySQL8出现的

本文将带您了解关于nodejs连接mysql突然中断问题解决方案的新内容,同时我们还将为您解释nodejs连接mysql的历程的相关知识,另外,我们还将为您提供关于mybatis连接MySQL8出现的问题解决方法、node.js实现js连接mysql数据库、node.js连接mysql与基本用法示例、Node.js连接Mysql并进行数据库操作的实用信息。

本文目录一览:

nodejs连接mysql突然中断问题解决方案(nodejs连接mysql的历程)

nodejs连接mysql突然中断问题解决方案(nodejs连接mysql的历程)

db/index.js数据库配置文件

一、在数据库连接失败的情况下,回调函数,再次发起连接,直到连接成功为止。

handleDisconnect(){
   this.connection.connect(function(err) {              
        if(err) {                                    
        //   console.log(''error when connecting to db:'', err);
          setTimeout(_this.handleDisconnect, 2000);
        }                                    
    });                                  
    this.connection.on(''error'', function(err) {
        if(err.code === ''PROTOCOL_CONNECTION_LOST'') { 
            _this.handleDisconnect();                         
        } else {                                     
            throw err;                                 
        }
    }); 
}

二、mysql在8个小时内没有任何操作,就会自动中断连接 因此,每个三个小时每个小时ping一次数据库,保持数据库连接状态

clearInterval(pingInterval);
pingInterval = setInterval(() => {
    _this.connection.ping((err) => {
        if (err) {
            console.log(''ping error: '' + JSON.stringify(err));
        }
    });
}, 3600000*3);

三、完整代码如下:

// 加载数据库模块
var mysql = require(''mysql'');
var _this;
var pingInterval = null;
var db_config = {
    host: "host",  //主机地址
    user: "user", //数据库用户名
    password: "password", //数据库用户密码
    database: "database"  //数据库名
}
class DB{
    constructor(){
        _this = this;
        this.connection = null;
    }
    handleDisconnect(){
        this.connection = mysql.createConnection(db_config);
        //数据库连接 
        this.connection.connect(function(err) {              
            if(err) {                                    
            //   console.log(''error when connecting to db:'', err);
              setTimeout(_this.handleDisconnect, 2000);
            }                                    
        });                                  
        this.connection.on(''error'', function(err) {
            if(err.code === ''PROTOCOL_CONNECTION_LOST'') { 
                _this.handleDisconnect();                         
            } else {                                     
                throw err;                                 
            }
        });
        // 每个小时ping一次数据库,保持数据库连接状态
        clearInterval(pingInterval);
        pingInterval = setInterval(() => {
            _this.connection.ping((err) => {
                if (err) {
                    console.log(''ping error: '' + JSON.stringify(err));
                }
            });
        }, 3600000*3);
        return this.connection;
    }
}

module.exports = DB;
使用数据库的文件controller/query.js

在开启事务的时候判断数据库连接是否连接错误, 如果连接错误,再次发起连接。

db.beginTransaction((err)=>{
    if(err!==null){
        db = _this.handleDisconnect();
        db.beginTransaction((err)=>{
            callback(err)
        })
    }else{
        callback(err)
    }
})

完整代码如下:

const DB = require("../../db/index");
const Async = require("async");
var db;
class Query extends DB{
    constructor(){
        super()
        db = this.handleDisconnect()
    }
    async getList(limit,page,cate,keywords,grade){
        return new Promise((resolve, reject) => {
            var mydatas = {data:[],total:0};
            
            // ....此处省略业务代码
            
            // 用Async代替嵌套
            var task = [
                (callback)=>{
                    // 开启事务
                    db.beginTransaction((err)=>{
                        if(err!==null){
                            db = _this.handleDisconnect();
                            db.beginTransaction((err)=>{
                                callback(err)
                            })
                        }else{
                            callback(err)
                        }
                    })
                },
                (callback)=>{
                    const sql = `...`;
                    db.query(sql,(err,res)=>{
                        callback(err);
                    })
                },
                (callback)=>{
                    // 提交事务
                    db.commit((err)=>callback(err));
                }
            ];
            Async.waterfall(task,(err,res)=>{
                if(err){
                    // 事务回滚
                    db.rollback();
                }else{
                    resolve(mydatas);
                }
            })
        })
    }
}

mybatis连接MySQL8出现的问题解决方法

mybatis连接MySQL8出现的问题解决方法

这篇文章主要介绍了mybatis连接MysqL8出现的问题解决方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

使用MysqL8,在整合ssm框架,用mybatis逆向工程生成的代码测试时,执行到数据库查询前均正常,但进行查询时,便卡主没有反应了,设置了日志、try catch等也不报错,页面就在那一直转,之前mybatis自动生成代码都是正常的,然后在测试类中,使用Connection进行连接测试并查询数据库,也是能够正常查询到数据的:

Connection conn = null; try { String userName = "root"; String password = "111@tesT"; String jdbcurl = "jdbc:MysqL://localhost:3306/test?useUnicode=true&useSSL=false&autoReconnect=true&characterEncoding=UTF-8"; Class.forName("com.MysqL.jdbc.Driver").newInstance(); conn = DriverManager.getConnection(jdbcurl, userName, password); String sql = "select * from tb_user"; PreparedStatement pstmt = conn.prepareStatement(sql); ResultSet rs = pstmt.executeQuery(); String result = ""; while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("username"); String status = rs.getString("phone"); result += id + "t" + name + "t" + status + "n"; } System.out.println(result);

而逆向工程的却不行:

UserExample example = new UserExample(); UserExample.Criteria criteria = example.createCriteria(); criteria.andIdEqualTo(userId); List list = userMapper.selectByExample(example);//这一步进去后就出不来了。。。

经过确认ssm其他配置文件都没有发现有问题,然后就想是不是自己用的MysqL8版本的问题,毕竟之前使用Navicat连接MysqL8也是出了好几个问题,于是便将mysql-connect-java版本由5.1.6升级为8.0.11,并修改了db.properties文件:

#数据库连接 注意 文件内不要留有空格 jdbc.driver=com.MysqL.cj.jdbc.Driver jdbc.url=jdbc:MysqL://localhost:3306/test?useSSL=false&useUnicode=true&characterEncoding=UTF8&serverTimezone=GMT jdbc.username=root jdbc.password=111@tesT

重启项目后,一切终于正常了。。。。。。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小编。

node.js实现js连接mysql数据库

node.js实现js连接mysql数据库

一、安装包

在对应的目录打开cmd

npm i mysql

二、代码&接口

var _mysql = require(''mysql'');
var HOST = ''localhost'';
var PORT = 3306;
var MYSQL_USER = ''root'';
var MYSQL_PASS = ''123456'';
var DATABASE = ''js_login'';
var mysql = _mysql.createConnection({
    host: HOST,
    port: PORT,
    user: MYSQL_USER,
    password: MYSQL_PASS,
});
var user = [];
mysql.query(''use '' + DATABASE, function(error, results) {
    if(error) {
        console.log(''ClientConnectionReady Error: '' + error.message);
        mysql.end();
        return;
    }
});
//查 GetData
= function(client) { client.query( ''select * from user order by score DESC'', function selectCb(error, results, fields) { if (error) { console.log(''GetData Error: '' + error.message); client.end(); return; } for(var i = 0; i < Math.max(10, results.length); i ++) { user[i] = results[i]; } }); };
//改 Update
= function(client,userid,score) { var userModSql = ''UPDATE user SET score = ? WHERE userid = ?''; var userModSql_Params = [score,userid]; client.query(userModSql,userModSql_Params,function (err, result) { if(err){ console.log(''[UPDATE ERROR] - '',err.message); return; } }); for(var i in user) { if(user[i].userid == userid) { user[i].score = score; break; } } };
//删 Delete
= function(client,userid) { var userModSql = ''UPDATE user SET score = ? WHERE userid = ?''; var userModSql_Params = [0,userid]; client.query(userModSql,userModSql_Params,function (err, result) { if(err){ console.log(''[DELETE ERROR] - '',err.message); return; } }); for(var i in user) { if(user[i].userid == userid) { user[i].score = 0; break; } } };
//增 Insert
= function(client,userid,pwd) { var userModSql = ''INSERT INTO user(userid,pwd,score) value(?,?,?)''; var userModSql_Params = [userid,pwd,0]; client.query(userModSql,userModSql_Params,function (err, result) { if(err){ console.log(''[DELETE ERROR] - '',err.message); return; } }); user.add({userid:userid,pwd:pwd,score:0}); };
GetData(mysql);

 

node.js连接mysql与基本用法示例

node.js连接mysql与基本用法示例

本文实例讲述了node.js连接mysql与基本用法。分享给大家供大家参考,具体如下:

下载mysql模块

使用命令npm install mysql下载mysql模块

mysql引入模块

var mysql = require("mysql");

创建连接池

使用createPool()创建一个mysql连接池,传入一个表参数作为连接信息

var pool = mysql.createPool({
  host:"127.0.0.1",
  port:3306, //默认端口3306
  database:"student", //需要连接的数据库
  user:"root", //用户名
  password:"123456", //密码
});

编写操作函数

使用连接池的方法getConnection()获取连接方法

参数callback方法有三个参数错误信息err,SQL语句的结果sql_result,字段说明fields_desc

conn.query(sql,callback) 执行发送来的sql语句,然后调用callback

function mysql_exec(sql,callback){
  //getConnection是从连接池获得mysql的连接通道
  //异步获取,成功就会调用callback,conn就会返回一个
  //与mysql通讯句柄
  pool.getConnection(function(err,conn){
    if(err){
      if(callback){
        callback(err,null,null);
      }
      return;
    }
    conn.query(sql,function(sql_err,sql_result,fields_desc){
      if(sql_err){
        if(callback){
          callback(sql_err,null,null);
        }
        return;
      }
      //sql_result返回结果
      //field_desc
      if(callback){
        callback(null,sql_result,fields_desc);
      }
    })
  });
}

使用操作函数

sql操作基本都是异步进行的

mysql_exec("select * from mess",function(err,sql_result,fields_desc){
  if(err){
    console.log(err);
    return;
  }
  if(sql_result){
    console.log(sql_result); //此处会打印出sql返回结果
  }
  if(fields_desc){
    console.log(fields_desc); //此处会打印出每个字段的说明
  }
});

希望本文所述对大家nodejs程序设计有所帮助。

您可能感兴趣的文章:
  • nodejs连接mysql数据库简单封装示例-mysql模块
  • 解决Node.js mysql客户端不支持认证协议引发的问题
  • nodejs同步调用获取mysql数据时遇到的大坑
  • node+express框架中连接使用mysql(经验总结)
  • node+koa2+mysql+bootstrap搭建一个前端论坛
  • nodejs连接mysql数据库及基本知识点详解
  • nodejs简单访问及操作mysql数据库的方法示例
  • node基于async/await对mysql进行封装

Node.js连接Mysql并进行数据库操作

Node.js连接Mysql并进行数据库操作

1. [代码]安装 node-mysql     

1 $ npm install mysql

2. [代码]创建测试表     

1 //数据库名 NodeSample
2  
3 CREATE TABLE `NodeSample`.`MyTable` (
4   `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
5   `firstname` VARCHAR( 20 ) NOT NULL ,
6   `lastname` VARCHAR( 20 ) NOT NULL ,
7   `message` TEXT NOT NULL
8 ) ENGINE = MYISAM ;

3. [代码]连接数据库     

01 var sys = require(''sys'');
02   
03 var Client = require(''mysql'').Client;
04 var client = new Client();
05   
06 client.user = ''someuser'';
07 client.password = ''password'';
08   
09 client.connect(function(error, results) {
10   if(error) {
11     console.log(''Connection Error: '' + error.message);
12     return;
13   }
14   console.log(''Connected to MySQL'');
15 });

4. [代码]打开数据库     

01 ClientConnectionReady = function(client)
02 {
03     client.query(''USE NodeSample'', function(error, results) {
04         if(error) {
05             console.log(''ClientConnectionReady Error: '' + error.message);
06             client.end();
07             return;
08         }
09     });
10 };

5. [代码]完成数据库操作程序     

01 var sys = require(''sys'');
02   
03 var Client = require(''mysql'').Client;
04 var client = new Client();
05   
06 client.user = ''someuser'';
07 client.password = ''password'';
08   
09 console.log(''Connecting to MySQL...'');
10   
11 client.connect(function(error, results) {
12   if(error) {
13     console.log(''Connection Error: '' + error.message);
14     return;
15   }
16   console.log(''Connected to MySQL'');
17   ClientConnectionReady(client);
18 });
19   
20 ClientConnectionReady = function(client)
21 {
22     client.query(''USE NodeSample'', function(error, results) {
23         if(error) {
24             console.log(''ClientConnectionReady Error: '' + error.message);
25             client.end();
26             return;
27         }
28         ClientReady(client);
29     });
30 };
31   
32 ClientReady = function(client)
33 {
34   var values = [''Chad'', ''Lung'', ''Hello World''];
35   client.query(''INSERT INTO MyTable SET firstname = ?, lastname = ? , message = ?'', values,
36     function(error, results) {
37       if(error) {
38         console.log("ClientReady Error: " + error.message);
39         client.end();
40         return;
41       }
42       console.log(''Inserted: '' + results.affectedRows + '' row.'');
43       console.log(''Id inserted: '' + results.insertId);
44     }
45   );
46   GetData(client);
47 }
48   
49 GetData = function(client)
50 {
51   client.query(
52     ''SELECT * FROM MyTable'',
53     function selectCb(error, results, fields) {
54       if (error) {
55           console.log(''GetData Error: '' + error.message);
56           client.end();
57           return;
58       }
59       // Uncomment these if you want lots of feedback
60       //console.log(''Results:'');
61       //console.log(results);
62       //console.log(''Field metadata:'');
63       //console.log(fields);
64       //console.log(sys.inspect(results));
65   
66       if(results.length > 0)
67       {
68         var firstResult = results[0];
69         console.log(''First Name: '' + firstResult[''firstname'']);
70         console.log(''Last Name: '' + firstResult[''lastname'']);
71         console.log(''Message: '' + firstResult[''message'']);
72       }
73   });
74   
75   client.end();
76   console.log(''Connection closed'');
77 };

6. [图片] 程序执行结果    

今天关于nodejs连接mysql突然中断问题解决方案nodejs连接mysql的历程的分享就到这里,希望大家有所收获,若想了解更多关于mybatis连接MySQL8出现的问题解决方法、node.js实现js连接mysql数据库、node.js连接mysql与基本用法示例、Node.js连接Mysql并进行数据库操作等相关知识,可以在本站进行查询。

本文标签: