[英]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.