Java范围尝试/捕获

Java范围尝试/捕获,java,try-catch,Java,Try Catch,对Java相当陌生,我正在尝试更好地理解一些事情。我知道try/catch语句变量只在该语句中有作用域。我试图学习JavaDBSQL,但遇到了一个问题 final String DB_URL = "jdbc:derby://localhost:1527/Customers"; Connection conn = DriverManager.getConnection(DB_URL); 这将创建与我的数据库的连接。我需要在try/catch语句中包含这一点。我想在程序结束时再次访问con

对Java相当陌生,我正在尝试更好地理解一些事情。我知道try/catch语句变量只在该语句中有作用域。我试图学习JavaDBSQL,但遇到了一个问题

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

解决方案是将变量声明与其实例化分开。在班级的最顶端,写下以下声明:

Connection conn = null;
然后可以将实例化放在try/catch块中

try {
    conn = DriverManager.getConnection(DB_URL);
}
catch (SQLException exception) {
    // Handle error.
}
最后,在清理时,添加一个空检查

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

可以通过在try/catch块之外声明连接对象来实现, 并在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);
}

您应该在try块之外声明
连接
变量

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
        }
可能重复的