2010-10-15 42 views
20

Tener rs, una instancia de java.sql.ResultSet, cómo comprobar que contiene una columna llamada "theColumn"?¿Cómo comprobar que un ResultSet contiene un campo específicamente nombrado?

+2

posible duplicado de [¿Cómo puedo determinar si el nombre de la columna existe en el conjunto de resultados?] (Http://stackoverflow.com/questions/3599861/how-can-i-determine-if-the- column-name-exist-in-the-resultset) – Riduidel

+0

posible duplicado de [¿Cómo puedo verificar para ver si existe un nombre de columna en un CachedRowSet?] (http://stackoverflow.com/questions/462534/how-do- i-check-to-see-if-a-column-name-exists-in-a-cachedrowset) – bluish

Respuesta

26

Puede utilizar ResultSetMetaData para iterar a través de las columnas de ResultSet y ver si la columna nombre coincide con su nombre de columna especificado.

Ejemplo:

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, tenga en cuenta que hay algunas complejidades si usa un alias (SELECCIONE col AS foo). http://bugs.mysql.com/bug.php?id=43684 –

+1

@JoshuaMartell, 'ResultSetMetaData.getColumnLabel' se puede utilizar si está interesado en obtener el nombre definido por la cláusula' AS' de la consulta SQL – Santosh

13

Trate de usar el método 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

¿No son lentas las excepciones? – Ivan

+3

Se puede comparar con una ejecución regular de Java. Tenga en cuenta que, por lo general, el cuello de botella no es el código de Java sino el delgadez que se está ejecutando en el otro lado: la base de datos. Lo más probable es que la ejecución de la consulta y el transporte de datos sean pocos órdenes de magnitud más lentos que el manejo de excepciones. –

+0

Este método funciona bien con alias en mysql. – bancer

3

que puede hacer:

rs.findColumn("theColum") 

y comprobar si SQLException

+0

Sí, la manera más fácil que creo es tratar de recuperar la columna de una forma u otra y atrapar la excepción. – Jay

+1

esto es generalmente una mala solución ya que a sabiendas lanza una excepción para un caso común, lanzar excepciones es raro y costoso en términos de recursos –

2

Utilice la clase 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; 
} 
Cuestiones relacionadas