As the ResultSet contains the data returned from the dynamic SQL, if there are any method to determine if the ResultSet contains a particular column name ? For example , if I run rs.getString("Column_ABC");
but Column_ABC does not really exist, it will throw out the exception . How can I test if the ResultSet can get a data from a column named "Column_ABC" ?
views:
54answers:
3This is a bad idea, and it's also wrong. When a column doesn't exist, it doesn't return nothing. It throws an SQLException, which you have to catch and handle. You should never use an exception being thrown for a simple check like this. You should always look for a method that would actually return a boolean - something that will actually perform a proper check.
Erick Robertson
2010-08-30 11:41:27
+3
A:
function boolean hasColumn(ResultSet rs, String columnName) { boolean hasColumn = false; ResultSetMetaData rsmd = rs.getMetaData(); int columns = rsmd.getColumnCount(); for (int x = 0; x < columns; x++) { if (columnName.equals(rsmd.getColumnName(x))) { hasColumn = true; break; } } return hasColumn; }
The thing I don't understand is why this function would ever be needed. The query or stored procedure being executed should have known results. The columns of the query should be known. Needing a function like this may be a sign that there is a design problem somewhere.
Erick Robertson
2010-08-30 11:38:52
When executing user queries in tools like TOAD the application does not know the query structure and must use `ResultSetMetaData`. But yes, searching for a particular column name is strange.
gpeche
2010-08-31 07:05:21
Just commenting... in your example, you're retrieving all column info. For a user query, I expect this to be standard. This is still not searching to see if a specific column is included.
Erick Robertson
2010-08-31 11:12:12