tete du loic

 Loïc YON [KIUX]

  • Enseignant-chercheur
  • Référent Formation Continue
  • Responsable des contrats pros ingénieur
  • Référent entrepreneuriat
  • Responsable de la filière F2 ingénieur
  • Secouriste Sauveteur du Travail
mail
loic.yon@isima.fr
phone
(+33 / 0) 4 73 40 50 42
location_on
ISIMA
  • twitter
  • linkedin
  • viadeo

[JavaSE] JDBC

Date de première publication : 2016/11/16

Java DataBase Connectivity (JDBC) est un mécanisme qui permet d'utiliser une base de données (relationnelle) au travers d'un programme Java. La connexion se fait en téléchargeant préalablement un driver de connexion spécifique à la base utilisée. Les classes du package java.sql permettront de manipuler les données.

Pour la découverte de JDBC, nous allons utiliser un moteur de base de données très simple puisque orienté fichiers, SQLITE installé sur etud et berzet. En adaptant le driver, on pourrait faire la même chose avec une base MySQL, Oracle ou JavaDB par exemple.

Préparation de l'environnement

Driver et paramétrage de l'EDI

Télécharger le driver SQLite sur le site officiel ou ici (pas forcément à jour)

Le driver est un fichier jar (archive java) qu'il faut ajouter au classpath pour être utilisé. Si vous êtes sous Eclipse, vous avez deux solutions :

Une fois que vous avez choisi l'emplacement, accéder à la fenêtre des bibliothèques du projet

Fenetre des bibliotheques d'un projet eclipse

Données

Les données que nous allons utiliser sont des données "communautaires" provenant de Pokedex VEEKUN. Vous pouvez télécharger une copie de la base SQLite ici

Pour utiliser SQLite, c'est facile, il faut lier le fichier avec le gestionnaire de la base de données :

$ sqlite3 nom_de_la_base

Les commandes "admin" de SQLite sont préfixées par ".". Essayer les commandes suivantes en mode interactif :

.help
.exit

Pour connaître le nombre de pokemons dans la base :

select count(*) from pokemon;

Un schéma regroupe un utilisateur et tout ce qui appartient à cet utilisateur (structures et données)

Manipulation des données

On cherche à afficher les données sous forme d'une page EXCEL

Utiliser une base de données relationelle avec JDBC

import java.io.*;
import java.sql.*;

public class Bdd {
 public static void main(String[] argv) {
  try {
    Class.forName("org.sqlite.JDBC");
    Connection conn = DriverManager.getConnection("jdbc:sqlite:pokemon.sqlite");
    Statement stmt = conn.createStatement();
    ResultSet rs = stmt.executeQuery("select * from pokemon");
    while (rs.next()) {
      String nom  = rs.getString("identifier");
      String h = rs.getString("height");
      String w = rs.getString("weight");
      System.out.println(nom+" "+h+" "+w); //  StringBuffer serait plus intelligent
    }
  } catch (Exception e) {
    e.printStackTrace();
  }
 }
}

En toute rigueur, on doit appeler les méthodes close() des objets Connection, Statement et ResultSet.

Deux autres méthodes utiles au cas où (je vous laisse deviner ce que l'on peut faire avec) :

stmt.executeUpdate( "drop table if exists dummy" );
stmt.setQueryTimeout(temps_max);

Si vous voulez faire deux parcours imbriqués de la base de données, il faudra deux ResultSets mais aussi deux Statements.

Mettre sous forme de tableau...

Comme pour le TP Houzehou, utilisez un JTable pour afficher les données. J'aimerai que vous affichiez les noms des pokemons et leurs capacités dans un tableau (avec le nom des capacités en français).

Aller plus loin...

Nous avons manipulé au plus bas niveau une base de données en Java. JDBC sert de base pour des manipulations de plus haut niveau, notamment lorsque l'on fait du Java Entreprise. On ajoute une couche logicielle entre la base de données et JDBC et les classes utilisées. Une mise en correspondance (Object Relation Mapping) est faite entre les classes objets (appelées alors des entités) et les données en base, la norme la plus populaire est JPA ou Java Persistence API implémentée par EclipseLink et Hibernate notamment.

Java
ORM
JDBC
Base de données