It looks like getColumnName() is incorrectly returning the column label. They are normally the same, but I have a query "select add as Address" and resultsetmetadata.getColumnName(1) is retuning "Address" instead of "add".
In the source code of AbstractJdbc2ResultsetMetadata I see this ...
public String getColumnName(int column) throws SQLException { return getColumnLabel(column); }