Java Scope Try / Catch

时间:2014-09-20 04:30:36

标签: java 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);}

3 个答案:

答案 0 :(得分:1)

你可以通过在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);
}

答案 1 :(得分:0)

解决方案是将变量声明与其实例化分开。在课程的顶部,输入声明:

Connection conn = null;

然后你可以将实例化放在try / catch块中。

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

最后,当你清理时,添加一个空检查。

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

答案 2 :(得分: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
        }