2010-10-15 7 views
20

Mit rs, eine Instanz von java.sql.ResultSet, wie Sie überprüfen, dass es eine Spalte namens "theColumn" enthält?Wie überprüft man, ob ein ResultSet ein speziell benanntes Feld enthält?

+2

möglich Duplikat [Wie kann ich feststellen, ob die Spaltennamen in der ResultSet existieren?] (Http://stackoverflow.com/questions/3599861/how-can-i-determine-if-the- Spaltenname-exist-in-the-resultset) – Riduidel

+0

mögliches Duplikat von [Wie überprüfe ich, ob in einem CachedRowSet ein Spaltenname existiert?] (http://stackoverflow.com/questions/462534/how-do- i-check-zu-sehen-wenn-eine-Spalte-Name-existiert-in-cachedrowset) – bluish

Antwort

26

können Sie ResultSetMetaData verwenden, um durch die ResultSet Spalten zu durchlaufen und sehen, ob die Spalte name entspricht dem angegebenen Spaltennamen.

Beispiel:

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, beachten Sie, dass es einige Komplexitäten gibt, wenn Sie einen Alias ​​verwenden (SELECT col AS foo). http://bugs.mysql.com/bug.php?id=43684 –

+1

@JoshuaMartell, 'ResultSetMetaData.getColumnLabel' kann verwendet werden, wenn der Name von der AS-Klausel der SQL-Abfrage definiert werden soll – Santosh

13

Versuchen Sie, die Methode 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

Sind Ausnahmen nicht langsam? – Ivan

+3

Es kann mit einer regulären Ausführung von Java verglichen werden. Bedenken Sie, dass der Flaschenhals normalerweise nicht der Java-Code ist, sondern die Thins, die auf der anderen Seite laufen - die Datenbank. Höchstwahrscheinlich ist die Ausführung der Abfrage und des Transports von Daten um einige Größenordnungen langsamer als die Behandlung von Ausnahmebedingungen. –

+0

Diese Methode funktioniert gut mit Aliasen in MySQL. – bancer

3

Sie tun können:

rs.findColumn("theColum") 

und prüfen SQLException

+0

Ja, der einfachste Weg, den ich denke, ist, einfach versuchen, die Spalte auf die eine oder andere Weise abzurufen und die Ausnahme zu fangen. – Jay

+1

Dies ist im Allgemeinen eine schlechte Lösung, da Sie wissentlich eine Exception für einen häufigen Fall werfen, Exceptions werfen ist in seltenen Fällen und ist in Bezug auf Ressourcen teuer –

0

Verwenden Sie die ResultSetMetaData Aufgabe durch das ResultSet Objekt vorgesehen, über rs.getMetaData()

2

Verwenden der ResultSetMetaData Klasse.

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; 
}