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?
Antwort
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!");
}
}
@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 –
@JoshuaMartell, 'ResultSetMetaData.getColumnLabel' kann verwendet werden, wenn der Name von der AS-Klausel der SQL-Abfrage definiert werden soll – Santosh
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;
}
Sind Ausnahmen nicht langsam? – Ivan
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. –
Diese Methode funktioniert gut mit Aliasen in MySQL. – bancer
Sie tun können:
rs.findColumn("theColum")
und prüfen SQLException
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
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 –
Verwenden Sie die ResultSetMetaData Aufgabe durch das ResultSet
Objekt vorgesehen, über rs.getMetaData()
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;
}
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
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