8

最終ブロックに適しているのは次のとおりです。

finally {
        try {
            con.close();
            stat.close();
        } catch (SQLException sqlee) {
            sqlee.printStackTrace();
        }
    }

または:

finally {
        try {
            if (con != null) {
                con.close();
            }
            if (stat != null) {
                stat.close();
            }
        } catch (SQLException sqlee) {
            sqlee.printStackTrace();
        }
    }
4

5 に答える 5

7

それらのどれも十分ではありません。これを使って:

public static void closeQuietly(AutoCloseable ... closeables) {
    for (AutoCloseable c : closeables) {
        if (c != null) {
            try {
                c.close();
            } catch (Exception e) {
                // log or ignore, we can't do anything about it really
            }
        }
    }
}

そして、それを次のように呼び出しますcloseQuietly(stat, con);

または、Java 7 を使用しますtry-with-resource

    List<String> results = new ArrayList<>();
    try (Statement statement = conn.createStatement();
         ResultSet rs = statement.executeQuery(query)) {

        int numberOfColumns = getColumnCount(rs);
        while (rs.next()) {
            int i = 1;
            while (i <= numberOfColumns) {
                results.add(rs.getString(i++));
            }
        }
    }
于 2013-08-07T22:37:14.997 に答える
6

Java 7 以降、finally ブロックを使用して Connection オブジェクトまたは Statement オブジェクトを閉じる必要はなくなりました。代わりに、'try-with-resources' と呼ばれる新機能を利用できます。

最初に、try-catch ブロックの新しい構文を次のように使用して、Connection オブジェクトと Statament オブジェクトを宣言します。

try(Connection con =  DriverManager.getConnection(database-url, user, password); Statement st = conn.createStatement()) {

 //your stuffs here
} catch (SQLException e) {
   e.printStackTrace();
}    

そうすることで、データベースとのリンケージを finally ブロックで明示的に閉じる必要がなくなります。jvm がそれを行うからです。

良いコーディングをしてください....

于 2013-08-07T22:43:59.020 に答える