FAQ JDBCConsultez toutes les FAQ

Nombre d'auteurs : 8, nombre de questions : 162, dernière mise à jour : 3 juin 2015  Ajouter une question

 

Cette FAQ a été réalisée à partir des questions fréquemment posées sur les forums de http://www.developpez.com et de l'expérience personnelle des auteurs.

Nous tenons à souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose sont correctes. Les auteurs font leur maximum, mais l'erreur est humaine. Cette FAQ ne prétend pas non plus être complète. Si vous trouvez une erreur, ou que vous souhaitez nous aider en devenant rédacteur, lisez ceci.


SommaireLes métadonnées - MetaDataInformations sur les ResultSet (6)
précédent sommaire suivant
 

Pour connaître le nombre de colonnes d'un ResultSet, il suffit d'utiliser ResultSetMetaData. Par exemple :

Code java : Sélectionner tout
1
2
3
4
5
6
String sql  = "SELECT * FROM MATABLE"; 
Statement statement = connection.createStatement(); 
ResultSet resultat = statement.executeQuery(sql); 
ResultSetMetaData metadata = resultat.getMetaData(); 
int nombreColonnes = metadata.getColumnCount(); 
System.out.println("Ce ResultSet contient "+nombreColonnes+" colonnes.");
Par contre, il n'existe pas de méthode toute faite pour récupérer le nombre de lignes d'un ResultSet. Cette fonctionnalité a été retirée des premières spécifications, car les implémentations étaient trop gourmandes en ressources. Il existe plusieurs possibilités pour connaître cette valeur.

Si le ResultSet est de type TYPE_SCROLL_XXX

Code java : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
String sql  = "SELECT * FROM MATABLE"; 
Statement statement = connection.createStatement(); 
ResultSet resultat = statement.executeQuery(sql); 
//on place le curseur sur le dernier tuple 
resultat.last(); 
//on récupère le numéro de la ligne 
int nombreLignes = resultat.getRow(); 
//on replace le curseur avant la première ligne 
resultat.beforeFirst(); 
System.out.println("Ce ResultSet contient "+nombreLignes+" lignes.");
Si le ResultSet est de type TYPE_FORWARD_ONLY, la seule possibilité est d'utiliser une autre requête faisant un COUNT.

Une dernière possibilité est d'utiliser les RowSet qui proposent une méthode toute faite pour récupérer cette information.

Mis à jour le 11 avril 2013 Ioan

L'interface ResultSetMetaData permet de récupérer les noms des colonnes d'un ResultSet. Deux méthodes sont à notre disposition :

  • getColumnName(int column) : String : Cette méthode renvoie le nom de la colonne dont l'index est column.
  • getColumnLabel(int column) : String : Cette méthode renvoie le nom, suggéré pour l'affichage, de la colonne dont l'index est column

Attention : en pratique les implémentations renvoient souvent les mêmes chaînes de caractères pour les deux méthodes.

Voici une méthode pour récupérer les noms des colonnes d'un ResultSet sous forme de tableau de String :

Code java : Sélectionner tout
1
2
3
4
5
6
7
8
9
public String[] getNomsColonnes(ResultSet resultat) throws SQLException{ 
   ResultSetMetaData metadata = resultat.getMetaData(); 
   String[] noms = new String[metadata.getColumnCount()]; 
   for(int i = 0; i < noms.length; i++){ 
      String nomColonne = metadata.getColumnName(i+1); 
      noms[i] = nomColonne; 
   } 
   return noms; 
}
Pour récupérer les noms de toutes les colonnes d'une table, on pourrait utiliser cette méthode comme ceci :

Code java : Sélectionner tout
1
2
3
4
5
6
7
8
Connection connection = DriverManager.getConnection(url,user,password); 
String sql = "SELECT * FROM MaTable"; 
Statement statement = connection.createStatement(); 
ResultSet resultat = statement.executeQuery(sql); 
String[] noms = getNomsColonnes(resultat); 
for(int i = 0; i < noms.length; i++){ 
   System.out.println(noms[i]); 
}

Mis à jour le 11 avril 2013 Ioan

Trois méthodes de ResultSetMetaData peuvent nous renseigner sur le type SQL et sur la classe Java correspondante d'une colonne donnée.

  • getColumnClassName(int index) : renvoie une chaîne de caractères correspondant au nom complet de la classe Java de la colonne ciblée par index.
  • getColumnType(int index) : renvoie un entier correspondant au type SQL de la colonne ciblée par index. Cet entier est un de ceux définis dans java.sql.Types.
  • getColumnTypeName(int index) : renvoie une chaîne de caractères correspondant au type SQL de la colonne ciblée par index. Cette chaîne est le nom de la variable renvoyée par getColumnType dans java.sql.Types.

Par exemple :

Code java : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Connection connection = DriverManager.getConnection(url,user,password); 
String sql = "SELECT * FROM MaTable"; 
Statement statement = connection.createStatement(); 
ResultSet resultat = statement.executeQuery(sql); 
ResultSetMetaData metadata = resultat.getMetaData(); 
for(int i = 0; i< metadata.getColumnCount(); i++){ 
int index = i+1; 
int typeSQL = metadata.getColumnType(index);  
String nomTypeSQL = metadata.getColumnTypeName(index);  
String typeJava = metadata.getColumnClassName(index); 
   System.out.println("INFORMATIONS SUR LA COLONNE D'INDEXE "+index); 
   System.out.println("Type SQL dans java.sql.Types : "+typeSQL); 
   System.out.println("Nom du type SQL : "+nomTypeSQL); 
   System.out.println("Classe java correspondante : "+typeJava); 
}

Mis à jour le 11 avril 2013 Ioan

ResultSetMetaData possède plusieurs méthodes spécifiques aux colonnes contenant des données numériques. Par exemple :

Code java : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
ResultSet resultat = ...; 
ResultSetMetaData = resultat.getMetaData();  
//index de la colonne à étudier 
int index = ...;  
//contient des valeurs signées 
boolean valeursSignees = metadata.isSigned(index); 
//est auto-incrémentée 
boolean auto = metadata.isAutoIncrement(index); 
//précision 
int precision = metadata.getPrecision(index); 
//nombre de chiffres après la virgule 
int scale = metadata.getScale(index); 
//est une valeur monétaire 
boolean monetaire = metadata.isCurrency(index);

Mis à jour le 11 avril 2013 Ioan

Le nom de la table à laquelle appartient une colonne donnée est accessible avec la méthode getTableName de ResultSetMetaData. Voici une méthode permettant de récupérer la liste de toutes les tables d'où proviennent les données d'un ResultSet.

Code java : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
public List getTables(ResultSet resultat) throws SQLException{ 
   List liste = new ArayList(); 
   ResultSetMetaData metadata = resultat.getMetaData(); 
   for(int i = 0; i<metadata.getColumnCount(); i++){ 
      String nomTable = metadata.getTableName(i); 
      if(!liste.contains(nomTable)&&!nomTable.equals("")){ 
         liste.add(nomTable); 
      } 
   } 
   return liste; 
}
La méthode getTableName renvoie une chaîne vide si la colonne n'est pas remplie à partir d'une table. C'est la seconde vérification que nous faisons dans le if.

Mis à jour le 11 avril 2013 Ioan

Pour avoir accès à cette information, vous pouvez utiliser DatabaseMetaData. Par exemple :

Code java : Sélectionner tout
1
2
3
4
DatabaseMetadata metadata = ...;  
boolean b1 = metadata.supportsResultSetType(ResultSet.TYPE_SCROLL_INSENSITIVE); 
boolean b2 = metadata.supportsResultSetConcurrency(ResultSet.TYPE_SCROLL_SENSITIVE, 
                                    ResultSet.CONCUR_UPDATABLE);

Mis à jour le 11 avril 2013 Ioan

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2017 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

 
Responsables bénévoles de la rubrique Java : Mickael Baron - Robin56 -