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.
- Comment connaître le nombre de lignes/colonnes d'un ResultSet ?
- Comment récupérer les noms des colonnes d'un ResultSet ?
- Comment récupérer les types SQL et Java des colonnes d'un ResultSet ?
- Quelles informations peut-on avoir sur les colonnes de type numérique d'un ResultSet ?
- À quelle table correspond la colonne x de mon ResultSet ?
- Quels types de ResultSet supporte le Driver ?
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."); |
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."); |
Une dernière possibilité est d'utiliser les RowSet qui proposent une méthode toute faite pour récupérer cette information.
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; } |
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]); } |
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); } |
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); |
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; } |
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); |
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 çaLes 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 © 2024 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.