Skip to main content Link Menu Expand (external link) Document Search Copy Copied

Extra: Try with resources

Javassa on olemassa try-with-resources -tyyppinen rakenne, joka huolehtii automaattisesti siinä määriteltyjen resurssien sulkemisesta, eli niiden close()-metodin kutsumisesta lohkon jälkeen.

Rakenne on syntaktisesti hieman muita tuntemiamme rakenteita hankalampi hahmottaa eikä se ole osa ohjelmointi 2:n oppimistavoitteita. Saatatte kuitenkin hyötyä myös siihen tutustumisesta esimerkiksi tutustuessanne muissa lähteissä löytämiinne esimerkkeihin.

Voit halutessasi tutustua tähän rakenteeseen tarkemmin esimerkiksi Jenkov.com-palvelussa tai Baeldung.com-palvelussa.

Close-metodin kutsuminen finally-lohkossa ilman try-with-resources -rakennetta

package tietokantaohjelmointi;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class TryWithResources {

    public static void main(String[] args) {

        final String SELECT_ALL = "select * from ShoppingListItem order by id asc";

        Connection connection = null;
        PreparedStatement statement = null;
        ResultSet result = null;

        try {
            connection = DriverManager.getConnection("jdbc:sqlite:shoppingList.sqlite");

            statement = connection.prepareStatement(SELECT_ALL);
            result = statement.executeQuery();

            while (result.next()) {
                String title = result.getString("title");
                System.out.println(title);
            }

        } catch (SQLException e) {
            e.printStackTrace();

        } finally {
            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

            if (statement != null) {
                try {
                    statement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

            if (result != null) {
                try {
                    result.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

Omat try-with-resources -lohkot eri resursseille

public static void main(String[] args) {

    final String SELECT_ALL = "select * from ShoppingListItem order by id asc";

    try (Connection connection = DriverManager.getConnection("jdbc:sqlite:c:/sqlite/shoppingList.sqlite")) {

        try (PreparedStatement statement = connection.prepareStatement(SELECT_ALL)) {

            try (ResultSet result = statement.executeQuery()) {

                while (result.next()) {
                    String title = result.getString("title");
                    System.out.println(title);
                }
            }
        }
    } catch (SQLException e) {
        e.printStackTrace();

    }
}

Kaikki suljettavat resurssit yhdistettynä yhteen try-with-resources-lohkoon

public static void main(String[] args) {

    final String SELECT_ALL = "select * from ShoppingListItem order by id asc";

    try (Connection connection = DriverManager.getConnection("jdbc:sqlite:c:/sqlite/shoppingList.sqlite");
            PreparedStatement statement = connection.prepareStatement(SELECT_ALL);
            ResultSet result = statement.executeQuery()) {

        while (result.next()) {
            String title = result.getString("title");
            System.out.println(title);
        }

    } catch (SQLException e) {
        e.printStackTrace();

    }
}