Maison > base de données > tutoriel mysql > Comment puis-je renvoyer en toute sécurité des ensembles de résultats de base de données en Java et éviter les fuites de ressources ?

Comment puis-je renvoyer en toute sécurité des ensembles de résultats de base de données en Java et éviter les fuites de ressources ?

Barbara Streisand
Libérer: 2024-11-29 02:24:09
original
422 Les gens l'ont consulté

How Can I Safely Return Database Result Sets in Java and Avoid Resource Leaks?

Renvoyer des jeux de résultats en toute sécurité

Renvoyer un ensemble de résultats à partir d'une requête de base de données peut être une tâche complexe en raison du risque de fuite de ressources. Ici, nous abordons ce défi en explorant une approche alternative pour renvoyer les données efficacement.

Problème :

Lorsque vous tentez de renvoyer directement un ensemble de résultats, le code renvoie un java.sql.SQLException due à la fermeture du jeu de résultats après l'exécution de la méthode.

Solution : mappage vers JavaBeans

Au lieu de renvoyer l'ensemble de résultats lui-même, mappez les données à une collection de JavaBeans. Cette approche vous permet de garder la connexion et l'instruction ouvertes tout en parcourant l'ensemble de résultats. Voici un exemple :

public List<Biler> list() throws SQLException {
    Connection connection = null;
    PreparedStatement statement = null;
    ResultSet resultSet = null;
    List<Biler> bilers = new ArrayList<>();

    try {
        connection = database.getConnection();
        statement = connection.prepareStatement("SELECT id, name, value FROM Biler");
        resultSet = statement.executeQuery();

        while (resultSet.next()) {
            Biler biler = new Biler();
            biler.setId(resultSet.getLong("id"));
            biler.setName(resultSet.getString("name"));
            biler.setValue(resultSet.getInt("value"));
            bilers.add(biler);
        }
    } finally {
        if (resultSet != null) try { resultSet.close(); } catch (SQLException ignore) {}
        if (statement != null) try { statement.close(); } catch (SQLException ignore) {}
        if (connection != null) try { connection.close(); } catch (SQLException ignore) {}
    }

    return bilers;
}
Copier après la connexion

Déclaration Try-with-Resources

Si vous utilisez Java 7 ou une version ultérieure, vous pouvez utiliser l'instruction try-with-resources déclaration de fermeture automatique des ressources :

public List<Biler> list() throws SQLException {
    List<Biler> bilers = new ArrayList<>();

    try (
        Connection connection = database.getConnection();
        PreparedStatement statement = connection.prepareStatement("SELECT id, name, value FROM Biler");
        ResultSet resultSet = statement.executeQuery();
    ) {
        while (resultSet.next()) {
            Biler biler = new Biler();
            biler.setId(resultSet.getLong("id"));
            biler.setName(resultSet.getString("name"));
            biler.setValue(resultSet.getInt("value"));
            bilers.add(biler);
        }
    }

    return bilers;
}
Copier après la connexion

Supplémentaire Considérations

Il est important d'éviter de déclarer la connexion, l'instruction et l'ensemble de résultats en tant que variables d'instance (problème de sécurité des threads). De plus, il est crucial de gérer les SQLExceptions de manière appropriée et de fermer les ressources dans le bon ordre. En suivant ces directives, vous pouvez renvoyer efficacement des ensembles de résultats tout en conservant la gestion des ressources.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal