JDBC DatabaseMetaData.getColumns () retorna colunas duplicadas

Estou ocupado com um pedaço de código para obter todos os nomes de colunas de uma tabela de um banco de dados Oracle. O código que eu criei é assim:

DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver());
Connection conn = DriverManager.getConnection(
  "jdbc:oracle:thin:@<server>:1521:<sid>", <username>, <password>);

DatabaseMetaData meta = conn.getMetaData();
ResultSet columns = meta.getColumns(null, null, "EMPLOYEES", null);
int i = 1;
while (columns.next())
{
  System.out.printf("%d: %s (%d)\n", i++, columns.getString("COLUMN_NAME"), 
    columns.getInt("ORDINAL_POSITION"));
}

Quando eu corri este código para minha surpresa, muitas colunas foram retornadas. Um exame mais detalhado revelou que o ResultSet continha um conjunto duplicado de todas as colunas, ou seja, cada coluna era retornada duas vezes. Aqui está a saída que recebi:

1: ID (1)
2: NAME (2)
3: CITY (3)
4: ID (1)
5: NAME (2)
6: CITY (3)

Quando olho para a tabela usando o Oracle SQL Developer, mostra que a tabela tem apenas três colunas (ID, NOME, CITY). Eu tentei este código contra várias tabelas diferentes no meu banco de dados e alguns funcionam muito bem, enquanto outros exibem esse comportamento estranho.

Poderia haver um bug no driver Oracle JDBC? Ou estou fazendo algo errado aqui?

Atualizar: Graças aKenster Agora tenho uma maneira alternativa de recuperar os nomes das colunas. Você pode obtê-los de um ResultSet, como este:

DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver());
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@<server>:1521:<sid>", <username>, <password>);

Statement st = conn.createStatement();
ResultSet rset = st.executeQuery("SELECT * FROM \"EMPLOYEES\"");
ResultSetMetaData md = rset.getMetaData();
for (int i=1; i<=md.getColumnCount(); i++)
{
    System.out.println(md.getColumnLabel(i));
}

Isso parece funcionar muito bem e não há duplicações são retornadas! E para quem se pergunta: de acordo comeste blog você deve usar getColumnLabel () em vez de getColumnName ().

questionAnswers(5)

yourAnswerToTheQuestion