簡體   English   中英

Java范圍嘗試/捕獲

[英]Java Scope Try/Catch

對Java來說還很陌生,並且正在嘗試更好地理解一些內容。 我知道try / catch語句變量僅在該語句內具有作用域。 我正在嘗試學習java db sql並遇到問題。

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);}

您可以通過在try / catch塊之外聲明Connection對象,然后在try {}中創建它來完成此操作

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);
}

解決方案是將變量聲明與其實例化分開。 在您的課程的頂部,放置聲明:

Connection conn = null;

然后,您可以將實例化放在try / catch塊中。

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

最后,在清理時,添加一個空檢查。

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

您應該在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
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM