数据库断连后如何重新获得数据库连接
前提:DBPool连接池自身有数据库断连后获取重连的机制
问题:执行某条sql时连接断开,此时此条sql不会被执行,并且若不进行特殊处理,程序会继续往下执行,
此时会出现数据丢失现象。
解决思路:1、判断是否是因为连接被断开引起的异常
2、若是连接被断开引发的异常,则循环持续等直到重新获得连接
3、重新获得连接后,先执行报错时执行的sql
4、接着往下执行原程序流程
package com.info.db.common;
import java.sql.Connection;
import java.sql.SQLException;
import com.info.db.DbHelper;
import com.info.db.DbOperate;
import com.info.log.SysLog;
/ **
* @description 测试连接池是否能自动重连接
* @author xiaoxiong
* @date 2012-10-23
* @version 1.0.0
* @since 1.0
*/
public class ConnectionPoolUtil {
private DbOperate operate;
private long second;
/ **
* 初始方法
*
* @param operate
* 数据库操作对象
* @param second
* 重连等待时间
*/
public ConnectionPoolUtil(DbOperate operate, long second) {
this.operate = operate;
this.second = second;
}
/ **
* 处理数据库断连引发的问题
*
* @description
* @author xiaoxiong
* @date 2012-10-23
* @version 1.0.0
* @param sql
* 异常产生时执行的sql,保证数据完整性
*/
public boolean ConncetionHandle(String sql) {
boolean result = ConncetionHandle(); // true为sql异常
// 数据库重连后继续执行原有sql
if ( !result) {
try {
operate.execute(sql);
} catch (Exception e) {
SysLog.error(sql);
}
} else {
SysLog.error(sql);
}
return result;
}
/ **
* 处理数据库断连引发的问题
*
* @description
* @author xiaoxiong
* @date 2012-10-23
* @version 1.0.0
*/
public boolean ConncetionHandle() {
Connection connetion = null;
long time = second * 1000; // 单位为毫秒
boolean flag = true; // 判断是否正常,默认为连接池是连接的
// 判断是sql语句异常还是断连引发的异常