2014-09-20 41 views
1

Java相當新穎,我正試圖更好地理解一些東西。我明白,try/catch語句變量只在該語句中有作用域。我正在嘗試學習java db sql,並且遇到問題。Java Scope Try/Catch

final String DB_URL = "jdbc:derby://localhost:1527/Customers";  
Connection conn = DriverManager.getConnection(DB_URL); 

這會創建與我的數據庫的連接。我需要在try/catch語句中有這個。我想在程序結束時再次訪問conn變量來關閉連接。我試圖在我的程序的頂部聲明這個變量,但它不會讓我,因爲它需要一個try/catch。解決這個問題的最好方法是什麼?

如下所示,我將它創建爲一個變量。我試圖關閉與退出按鈕的連接,但代碼沒有執行。使用if語句,程序不會關閉,System.out.print消息也不會觸發。連接開始正常但不關閉。

if (conn != null){ 
    conn.close(); 
    System.out.println("Connection Closed"); 
    System.exit(0);} 
+0

的可能重複[如何避免在try語句設置變量(http://stackoverflow.com/questions/845155/how-to-avoid-setting-variable-in-a-try-聲明) – Nateowami 2014-09-20 04:39:48

回答

1

你可以通過聲明Connection對象的try/catch塊外, 和創建它的嘗試{}

final String DB_URL = "jdbc:derby://localhost:1527/Customers";  
Connection conn = null; 
try { 
    conn = DriverManager.getConnection(DB_URL); 
} catch(Exception e) { 
    System.out.println("Exception "+e); 
} 
0

解決方法是將變量聲明與實例化分開。在你的類的頂部,把聲明:

Connection conn = null; 

然後你就可以把實例在try/catch塊。

try { 
    conn = DriverManager.getConnection(DB_URL); 
} 
catch (SQLException exception) { 
    // Handle error. 
} 

最後,當您清理時,添加一個空檢查。

if (conn != null) { 
    conn.close(); 
} 
0

你應該申報try塊外connection變量中做

Connection conn = null; 
try { 
conn = Connection conn = DriverManager.getConnection(url) 
} catch (SQLException e) {//log exception} 


並且在程序結束時可以像這樣關閉它

if (conn != null) { 
    try{conn.close();} 
    catch(Exception e) {//log exception} 
    } 

從Java 7開始,你可以使用try with resource,它會自動釋放資源,但是變量conn是隻有try塊內的訪問。

try (Connection conn = DriverManager.getConnection(url)) { 
      System.out.println("Connecting..."); 

      System.out.println("Connected"); 


     } catch (SQLException e) { 
      //log exception 
     }