JDBC ResultSet get columns with table alias JDBC ResultSet get columns with table alias java java

JDBC ResultSet get columns with table alias


JDBC will simply name the columns by what is specified in the query - it doesn't know about table names etc.

You have two options:

Option 1: Name the columns differently in the query, ie

SELECT    a.columnName as columnNameA,    b.columnName as columnNameB,    ...from table1 a, table2 b where (WHATEVER)

then in your java code refer to the column aliases:

resultSet.getString("columnNameA");resultSet.getString("columnNameB");


Option 2: Refer to the column position in your call to the JDBC API:

resultSet.getString(1);resultSet.getString(2);

Note that the JDBC API uses one-based indexes - ie they count from 1 (not from 0 like java indexes), so use 1 for the first column, 2 for the second column, etc


I would recommend option 1, because it's safer to refer to named columns: Someone may change the order of the columns in the query and it would silently break your code (you would be accessing the wrong column but would not know), but if they change the columns names, you'll at least get a "no such column" exception at runtime.


ResultSetMetadata.getColumnLabel() is what you need

(edit)sample example, as stated by bharal in comment

SELECT * from table1 a, table2 b where (WHATEVER)ResultSetMetaData rsmd = rset.getMetaData();rsmd.getColumnLabel(1);


Use column aliases like:

SELECT A.ID 'A_ID', B.ID 'B_ID' FROM TABLE1 AS A, TABLE2 AS B...

And specify all the columns you are retrieving (is a good practice).