La JDBC

Une présentation de la JDBC et des principaux appels de bases pour établir une connexion à un serveur de bases de données.

Les Pilotes JDBC

Quelques adresses à connaître :

Se connecter à JDBC :

  • Les adresses sont de la forme: jdbc:driver:nomDeLaBase (exemple pour odbc : jdbc:odbc://adresseHote:port/nomBase;PWD=passwd)
  • Enregistrer le pilote : Class.forName(“driver”);;
  • Se Connecter : DriverManager.getConnection(url, username, pwd);
  • Déboguer : DriverManager.setLogWriter(stream);

Utiliser un contexte de connexions :

  • Context jndiContext = …
  • DataSource ds = jndiContext.lookUp(“adresse”);
  • source.getConnection(user, password);

Les requêtes

Les requêtes de mise à jour :

  • connexion.createStatement();
  • statement.executeUpdate(); : utilisé pour les requetes INSERT, UPDATE, CREATE TABLE, DROP TABLE
  • Renvoit le nombre de lignes modifiées.

Les requêtes de transactions :

  • connexion.getAutoCommit : retourne un booléean indiquant si les requêtes sont automatiquement commitées.
  • connexion.setAutoCommit(boolean)
  • Exécuter x requetes
  • ok : commit(); sinon rollback(); (SQLException retournée sur une des requêtes);

Les requêtes de sélection :

  • executeQuery : retourne un ResultSet.
  • Parcourir ce ResultSet :
// N'agit pas comme un iterator : le premier next place le pointeur sur le premier élément 
while result.next() 
result.getString(noColonne ou nomcolonne);
result.getDouble(...); ...
// retourne l'index de la colonne (>=1 si elle existe).
result.findColumn(nom) 
result.close();

Grouper un ensemble de commandes :

  • statement.addBatch(requete);
  • statement.executeBatch(); retourne un tableau d’int représentant le nombre de lignes modifiées par commande.

Les instructions préparées :

  • requete paramétrée : Plus performant, le moteur ne la prépare qu’une fois.
  • chaque champ modifiable est noté par un “?”
  • connexion.preparetatement(requeteParamétrée);
  • preparedStatement.setString(index(>=1), valeur);
  • .setDouble, .setXXX…
  • preparaedStatement.clearParameters();

Les métadonnées :

  • Database.getMetaData : founit les meta de la base; ensemble très complet, voir la doc java.
  • Resultset.getMetaData : fournit des indications telles que le nombre de colonnes du resultSet, leur Label (titre suggéré), leur nom, etc.

La mise à jour des données

La modification d’un resultSet permet de mettre à jour les donneés en base sans avoir à recréer de requête.

Il faut pour cela définir un type de scrolling, et définir une concurrence lorsqu’on crée un preparedStatement ou un statement.

Les types :

  • TYPE_FORWARD_ONLY
  • TYPE_SCROLL_SENSITIVE
  • TYPE_SCROLL_INSENSITIVE

Les concurrences :

  • CONCUR_READ_ONLY
  • CONCUR_UPDATABLE

Pour déterminier si des modifications sont possibles il faut que les clauses suivantes existent :

  • Database.MetaData.supportsResultSetConcurrency, et Database.MetaData.supportsResultSetType soient ok.
  • Aucun retour de Warning sur le resultset (resultSet.getWarnings)

Autrement, la tentavie de modification d’une des données engendrera une SQLException.

Le parcours d’un resultSet peut se faire grâce à :

  • first, previous, relative(i), absolute(i), getRow, last, beforeFirst, afterLast, isFirst, isLast ,etc.

Pour insérer un nouvel enregistrement dans un resultSet :

rs.cancelUpdates()
rs.moveToInsertRow()
rs.updateString(...)
rs.updateXXX(...)
rs.insertRow();
// retour à l'ancienne position.
rs.moveToCurrentRow() 

Pour supprimer un enregistrement :

rs.deleteRow();

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *