判断 Mysql服务端是否在线

在操作MySQL时候需要判断Connection连接是否可用。
本人试验2种方式:
1.Socket(直连通过MySQL服务端IP、port来连接)
2.使用查询是否可用,否则抛异常来判断

本人选择第二种方式来判断

第一种:Socket
(直连通过MySQL服务端IP、port来连接)

Socket s_client = null;
try {
SocketAddress sa_add = new InetSocketAddress(cbd_obj.getUser_Ip().trim(),Integer.parseInt(cbd_obj.getUser_Port().trim()));
s_client = new Socket();
s_client.connect(sa_add,1000);//连接超过1秒则,抛SocketTimeoutException 异常
} catch (UnknownHostException e) {
System.out.println(e.getMessage());
return true;
} catch (SocketTimeoutException e) {
System.out.println(e.getMessage());
return true;
} catch (IOException e) {
System.out.println(e.getMessage());
return true;
}finally{
try {
if(s_client != null)
s_client.close();
} catch (IOException e) {
}
}


Socket频率过高会导致,多次建立连接会报 Host is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts' 同一个ip在短时间内产生太多(超过mysql数据库max_connection_errors的最大值)中断的数据库连接而导致的阻塞;,[color=darkred]所以不可行[/color]。


第二种 查询抛异常

Statement pingStatement = null;
try
{
pingStatement = cbd_obj.getC_Connection().createStatement();

pingStatement.executeQuery("/* ping */ SELECT 1").close();

return false;
}catch(CommunicationsException ce_sql){
try {
cbd_obj.getC_Connection().close();
} catch (SQLException e) {
}
return true;
} catch (SQLException e) {
return false;
}finally {
if (pingStatement != null)
try {
pingStatement.close();
}
catch (SQLException sqlEx)
{
}
}

使用正常
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值