Pergunta

Estou construindo uma aplicação em Java para recuperar dados do banco de dados MySQL. Depois de executar uma consulta eu recebo um ResultSet e fazer o seguinte para registros extrato:

while (rs.next())
        {
            for (int column = 1; column <= rm.getColumnCount(); column++) {
                row.add(rs.getObject(column));
            }
            result.add(row.toString());
            row.clear();
        }

que rs = ResultSet e rm = ResultSetMetaData

O problema é que eu tenho que fazer result.add (row.toString ()); ao invés de apenas result.add (linha); (com o qual eu gostaria de criar um ArrayList bidimensional). Caso contrário, eu obter resultados vazios.

Eu tentei colocar row.clear (); no início, antes do para loop, mas que resulta em todos os meus resultados a ser preenchido com várias instâncias do último registro. Assim como linha não foi adicionado ao Resultado até o fim, quando é igual ao último registro. Preciso "comprometer" o ArrayList linha antes de adicionar-lo como um elemt para outro ArrayList? Se sim, como? Além disso, por curiosidade, por que é .toString () trabalhar de forma diferente?

Foi útil?

Solução

Ao adicionar row.toString (), você está criando um novo objeto String para adicionar em resultado.

Por outro lado, através da adição de linha, você está adicionando o mesmo objeto em resultado, portanto, cada row.clear time () é chamado, ele esvaziar todas as linhas de resultado.

O que você deve fazer é criar um novo objeto de linha antes do loop for, e não fazer row.clear (). A seguir é um exemplo.

while (rs.next())
        {
            row = new ArrayList();

            for (int column = 1; column <= rm.getColumnCount(); column++) {
                row.add(rs.getObject(column));
            }

            result.add(row);
        }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top