2010-10-15 4 views
20

Ayant rs, une instance de java.sql.ResultSet, comment vérifier qu'il contient une colonne nommée "theColumn"?Comment vérifier qu'un ResultSet contient un champ spécifiquement nommé?

+2

double possible de [Comment puis-je déterminer si le nom de colonne existe dans le ResultSet?] (Http://stackoverflow.com/questions/3599861/how-can-i-determine-if-the- nom-colonne-existant-dans-le-jeu de résultats) – Riduidel

+0

duplication possible de [Comment vérifier si un nom de colonne existe dans un CachedRowSet?] (http://stackoverflow.com/questions/462534/how-do- i-check-to-see-if-a-column-name-exists-in-a-cachedrowset) – bluish

Répondre

26

Vous pouvez utiliser ResultSetMetaData pour parcourir les colonnes ResultSet et voir si la colonne Le nom correspond à votre nom de colonne spécifié.

Exemple:

ResultSetMetaData rsMetaData = rs.getMetaData(); 
int numberOfColumns = rsMetaData.getColumnCount(); 

// get the column names; column indexes start from 1 
for (int i = 1; i < numberOfColumns + 1; i++) { 
    String columnName = rsMetaData.getColumnName(i); 
    // Get the name of the column's table name 
    if ("theColumn".equals(columnName)) { 
     System.out.println("Bingo!"); 
    } 
} 
+2

@Ivan, sachez qu'il y a quelques complexités si vous utilisez un alias (SELECT col AS truc). http://bugs.mysql.com/bug.php?id=43684 –

+1

@JoshuaMartell, 'ResultSetMetaData.getColumnLabel' peut être utilisé si vous souhaitez obtenir le nom tel que défini par la clause' AS' de la requête SQL – Santosh

13

Essayez d'utiliser la méthode ResultSet#findColumn(String)

private boolean isThere(ResultSet rs, String column) 
{ 
    try 
    { 
    rs.findColumn(column); 
    return true; 
    } catch (SQLException sqlex) 
    { 
    logger.debug("column doesn't exist {}", column); 
    } 
    return false; 
} 
+0

Les exceptions ne sont-elles pas lentes? – Ivan

+3

Il peut être comparé à une exécution régulière de Java. Gardez à l'esprit que le goulot d'étranglement n'est généralement pas le code Java, mais les liens qui s'exécutent de l'autre côté - la base de données. L'exécution de la requête et le transport des données sont très probablement plus lents que la gestion des exceptions. –

+0

Cette méthode fonctionne bien avec les alias dans mysql. – bancer

3

Vous pouvez faire:

rs.findColumn("theColum") 

et vérifier SQLException

+0

Ouais, le moyen le plus simple que je pense est d'essayer simplement de récupérer la colonne d'une façon ou d'une autre et attraper l'exception. – Jay

+1

Ceci est généralement une mauvaise solution puisque vous êtes en train de lancer une exception pour un cas courant, en lançant des exceptions pour des cas rares et des ressources coûteuses –

2

Utilisez la classe ResultSetMetaData.

public static boolean hasColumn(ResultSet rs, String columnName) throws SQLException { 
    ResultSetMetaData rsmd = rs.getMetaData(); 
    int columns = rsmd.getColumnCount(); 
    for (int x = 1; x <= columns; x++) { 
     if (columnName.equals(rsmd.getColumnName(x))) { 
      return true; 
     } 
    } 
    return false; 
} 
Questions connexes