Problemas com Types.FLOAT

1 resposta
MarcusGoncalves
Criei uma função que recebe uma query (string) e retorna um ArrayList com as linhas do select.
ArrayList registros    = new ArrayList();
ResultSet rs           = stmt.executeQuery(query);
ResultSetMetaData rsmd = rs.getMetaData();

while (rs.next()) {
  ArrayList registro = new ArrayList();
  for (int i=1; i<=rsmd.getColumnCount(); i++) {
    if (rsmd.getColumnType(i) == Types.FLOAT) {
      if (String.valueOf(rs.getFloat(i)) != null) {
        registro.add(String.valueOf(rs.getFloat(i)));
      } else {
        registro.add("");
      }
    } else if (rsmd.getColumnType(i) == Types.VARCHAR) {
      ...
    }
  }
  registros.add(registro);
}
Faço o mesmo tratamento pros outros tipos (VARCHAR, INTEGER, ...).

Utilizo essa função na minha máquina (Win98, MySQL 3.23, jsdk1.3.1) e funciona muito bem, mas na máquina do cliente (WinXP, MySql 4.0.16, jsdk1.4.2) não.

Comportamento no cliente: Se eu passo a seguinte query:
select codigo, nome, valor
  from tabela;
as informações das posições 0 e 1 são recuperadas com sucesso, mas quando tento acessar arraylist.get(2) ocorre um erro IndexOutOfBoundsException, isto é, só retornou os campos codigo e nome.

Alguém tem alguma idéia? Será que pode ser as configurações regionais do WinXP (formato de número)?

1 Resposta

MarcusGoncalves

Pessoal,
resolvi o problema da seguinte forma:

if ((rsmd.getColumnType(i) == Types.FLOAT) || (rsmd.getColumnType(i) == Types.REAL)) { if (String.valueOf(rs.getFloat(i)) != null) { registro.add(String.valueOf(rs.getFloat(i))); } else { registro.add(""); } ... }
Por algum motivo, acho que pela versão, a função getColumnType() trata colunas float (tabela InnoDB do MySQL) retornando Types diferentes nos ambientes citados no post anterior.

É isso mesmo ou estou viajando?

Criado 19 de novembro de 2003
Ultima resposta 20 de nov. de 2003
Respostas 1
Participantes 1