在 Java 中重试 JDBC 连接
Posted
技术标签:
【中文标题】在 Java 中重试 JDBC 连接【英文标题】:Retry JDBC connection in Java 【发布时间】:2019-03-22 00:49:34 【问题描述】:我正在尝试使用重试逻辑来获取 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)
我的连接对象关闭后会变成空吗?
或者如果有其他方法可以实现重试部分?
【问题讨论】:
只有将conn
显式设置为null
才能使其变为null
。关闭连接不会使变量为空,它只是关闭连接。
请注意,我们更喜欢这里的技术写作风格。我们轻轻地劝阻问候,希望你能帮助,谢谢,提前感谢,感谢信,问候,亲切的问候,签名,请你能帮助,聊天材料和缩写 txtspk,恳求,你多久了被卡住、投票建议、元评论等。只需解释您的问题,并展示您尝试过的内容、预期的内容以及实际发生的情况。
【参考方案1】:
这是针对您的问题的测试方法。此方法尝试连接 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 数据库 连接成功!用户 ID = 9 连接已关闭...
【讨论】:
【参考方案2】:不,关闭后它不会变为null。使用Connection.isClosed() 而不是while( null== conn)
。此外,您应该从这段代码中获得//Do some task.
,因为它的目标是获得 JDBC 连接。
【讨论】:
是的。除此之外,没有实际测试,这看起来不错。正确的 ?与空运行和所有。我的意思是寻求第二意见。以上是关于在 Java 中重试 JDBC 连接的主要内容,如果未能解决你的问题,请参考以下文章