[英]Retry JDBC connection in Java
我正在尝试使用重试逻辑来获取JDBC连接,以防出现类似以下内容的SQL异常:
int counter = 0;
Connection conn = null;
while (null == conn) {
try {
conn = GetConnectionObject;
} catch (SQLException e) {
if (++counter > MAX_RETRY) {
//Log ERROR
break;
}
} finally {
if (null != conn) {
try {
DbUtils.close(conn);
} catch (SQLException e) {
logger.error("Exception while closing the connection object");
}
}
}
}
我目前无法测试,因此需要一些帮助。
如果出现异常,则可以正常工作,然后重试后可以登录。 但是,如果我们没有得到异常,它将到达finally块并关闭连接。 Try-Catch-Finally在while循环中。
因此,如果我关闭连接,则流量达到
while(null == conn)
关闭后,我的连接对象会变为null吗?
或者,如果还有其他方法可以实现重试部分?
不,它在关闭后不会为空。 使用Connection.isClosed()代替while( null== conn)
。 此外,您还应该//Do some task.
出于此代码的目的,因为它的目标是获得JDBC连接。
这是针对您的问题的经过测试的方法。 此方法尝试3次连接,当它获得数据库连接时,它将打印成功消息,并运行查询并显示结果,否则将打印错误消息。 同样,如果连接成功,则它将在finally块中执行查询后关闭连接。
public void retryDBConnection(){
int counter = 0;
Connection con = null;
while(counter < 3 && con == null){
try{
String str = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
Class.forName(str).newInstance();
con = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;Database=TestDB;", "sa", "sqldb");
System.out.println("DB Connection Successful!");
PreparedStatement prep = con.prepareStatement("select ID, User_Name from tblUser where ID = 9");
ResultSet rs = prep.executeQuery();
if(rs.next()){
System.out.println("User ID = " + rs.getString(1));
//name = rs.getString(2);
}
}
catch(SQLException e){
// System.out.println(e.getSQLState());
if(e.getErrorCode() == 0 || e.getErrorCode() == 4060)
counter++;
System.out.println("Attempt: " + counter +", Could not establish DB Connection!");
System.out.println("Error Code: " + e.getErrorCode());
}
catch(Exception e){
e.printStackTrace();
}finally{
if(con != null){
try {
con.close();
System.out.println("Connection closed...");
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
这是该方法的输出。
尝试:1,无法建立数据库连接! 错误代码:0尝试:2,无法建立数据库连接! 错误代码:4060 DB连接成功! 用户ID = 9连接已关闭...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.