2014-09-20 111 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 
     }