JDBC : Interroger la base de données

Interroger une base de données signifie rechercher dans ses données. Pour ce faire, vous envoyez des instructions SQL à la base de données. Pour ce faire, vous avez d’abord besoin d’une connexion ouverte à la base de données. Une fois que vous avez une connexion ouverte, vous devez créer un objet Statement, comme ceci:

Statement statement = connection.createStatement();

Une fois que vous avez créé le Statement, vous pouvez l’utiliser pour exécuter des requêtes SQL, comme ceci:

String sql = "select * from people";ResultSet result = statement.executeQuery(sql);

Lorsque vous exécutez une requête SQL, vous obtenez en retour un ResultSet. Le ResultSet contient le résultat de votre requête SQL. Le résultat est renvoyé en lignes avec des colonnes de données. Vous itérez les lignes du ResultSet comme ceci :

while(result.next()) { String name = result.getString("name"); long age = result.getLong ("age");}

La méthode ResultSet.next() passe à la ligne suivante dans le ResultSet, s’il y a encore des lignes. S’il y a d’autres lignes, elle renvoie true. S’il n’y avait plus de rangées, elle renvoie false.

Vous devez appeler next() au moins une fois avant de pouvoir lire des données. Avant le premier appel de next(), le ResultSet est positionné avant la première ligne.

Vous pouvez obtenir des données de colonne pour la ligne actuelle en appelant certaines des méthodes getXXX(), où XXX est un type de données primitif. Par exemple:

 result.getString ("columnName"); result.getLong ("columnName"); result.getInt ("columnName"); result.getDouble ("columnName"); result.getBigDecimal("columnName"); etc.

Le nom de la colonne dont on veut obtenir la valeur est passé en paramètre à n’importe lequel de ces appels de méthode getXXX().

Vous pouvez aussi passer un index de la colonne à la place, comme ceci:

 result.getString (1); result.getLong (2); result.getInt (3); result.getDouble (4); result.getBigDecimal(5); etc.

Pour que cela fonctionne, vous devez savoir quel index a une colonne donnée dans le ResultSet. Vous pouvez obtenir l’index d’une colonne donnée en appelant la méthode ResultSet.findColumn(), comme ceci:

 int columnIndex = result.findColumn("columnName");

Si vous itérez de grandes quantités de lignes, référencer les colonnes par leur index pourrait être plus rapide que par leur nom.

Lorsque vous avez fini d’itérer le ResultSet, vous devez fermer à la fois le ResultSet et l’objet Statement qui l’a créé (si vous en avez fini avec lui, bien sûr). Vous le faites en appelant leurs méthodes close(), comme ceci:

result.close();statement.close();

Bien sûr, vous devriez appeler ces méthodes à l’intérieur d’un bloc finally pour vous assurer qu’elles sont appelées même si une exception se produit pendant l’itération de ResultSet.

Exemple complet

Voici un exemple de code de requête complet:

Statement statement = connection.createStatement();String sql = "select * from people";ResultSet result = statement.executeQuery(sql);while(result.next()) { String name = result.getString("name"); long age = result.getLong("age"); System.out.println(name); System.out.println(age);}result.close();statement.close();

Et voici à nouveau l’exemple, avec des blocs try-finally ajoutés. Remarquez, j’ai laissé de côté les blocs catch pour rendre l’exemple plus court.

Statement statement = null;try{ statement = connection.createStatement(); ResultSet result = null; try{ String sql = "select * from people"; ResultSet result = statement.executeQuery(sql); while(result.next()) { String name = result.getString("name"); long age = result.getLong("age"); System.out.println(name); System.out.println(age); } } finally { if(result != null) result.close(); }} finally { if(statement != null) statement.close();}

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.