Pour accéder à une base de données de façon programmatique, on utilise un connecteur de base de données (lié au SGBD choisi).
Version de base
Il faut ajouter “PostgreSQL JDBC Driver” dans le bibliothèques (Libraries) du projet netbeans.
Il faut définir l’URL de la base de données à laquelle on se connecte :
- protocole :
jdbc:postgresql - ip ou fqdn de l’hôte, par exemple
192.168.56.101 - port, par exemple
5432 - nom de la base, par exemple
dbimoca
<jdbc:postgresql://192.168.56.101:5432/dbimoca>
- protocole :
On utilise un objet de la classe java.sql.Connection et la méthode statique DriverManager.getConnection pour se connecter à la base :
String url = "jdbc:postgresql://192.168.56.101:5432/dbimoca"; String role = "robert"; String mdp = "Password"; Connection con = DriverManager.getConnection(url, role, mdp);Remarque : cette dernière ligne peut échouer et donc lancer une exception
SQLExceptionqu’il conviendra de rattraper.On crée une requête (un PreparedStatement) avec la méthode
prepareStatementde la classeConnectionen mettant des ‘?’ à la place des valeurs qui seront remplies par l’utilisateur, puis on remplace ces ‘?’ par les valeurs souhaitées avecsetInt(pour des entiers) et enfin on exécute cette requête :int id = 12; PreparedStatement req = con.prepareStatement("SELECT rang, nombateau FROM classement WHERE idc = ?"); req.setInt(1, id); // remplace le premier ? par la valeur de la variable id. ResultSet rs = req.executeQuery();On parcourt le résultat de la requête :
while (rs.next()) { String ligne = rs.getInt(rang) + " " + rs.getString("nombateau"); System.out.println(ligne); }On ferme la connexion à la base de données :
con.close();Une bonne pratique consiste à écrire cette ligne aussitôt après celle où on crée la connexion avec le DriverManager.
Le code ci-dessus nécessite les import suivants :
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;Version json
Au lieu d’afficher les valeurs trouvées nous allons vouloir renvoyer un fichier json contenant les données. Pour cela, nous utilisons une Collection qui sera implémentée à l’aide d’une ArrayList. Nous allons également utiliser la bibliothèque de manipulation de json com.google.gson.
Ajouter dans les Bibliothèques/Libraries du projet le fichier
gson.jar.Créer une classe qui va encapsuler les données obtenues dans la requête, ici le rang et le nombateau :
public class LigneClassement { int rang; String nombateau; public LigneClassement(int rang, String nombateau) { this.rang = rang; this.nombateau = nombateau; } }Pour le parcours du résultat de requête, nous allons créer une collection de
LigneClassements et la remplir :Collection<LigneClassement> cl = new ArrayList<>(); while (rs.next()) { LigneClassement ligne = new LigneClassement(rs.getInt("rang") rs.getString("nombateau")); cl.add(ligne); }Nous allons créer un objet Gson à partir de cette collection :
Gson gson = new GsonBuilder().setPrettyPrinting().create(); String res = gson.toJson(cl); System.out.println(res);
Remarque : il faut ajouter un certain nombre d’imports :
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.util.ArrayList;
import java.util.Collection;