Problema com ArrayList.add() dentro de um while

Galera, ajuda ai…

Eu to iterando em um ResultSet e jogando pra dentro de um ArrayList.
A tabela tem 499 registros… so que meu arraylist ta ficando com
499 vezes o último registro!! vê ai se vcs identificam onde ta o erro…

ArrayList dados = new ArrayList(); String[] registro; try { stmt = CONN.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); rs = stmt.executeQuery(x); registro = new String[rs.getMetaData().getColumnCount()]; rs.beforeFirst(); while (rs.next()) { for (int i=0; i<rs.getMetaData().getColumnCount(); i++) { registro[i] = rs.getString(i+1); } dados.add(registro); }

onde ta o erro de lógica aqui?

valeu!!!

F.L>

O problema eh que vc esta usando a mesma referencia do “registro”. Declare o array de Strings dentro do while e ira funcionar.
O teu codigo pode ser melhorado um pouco, especialmente em relacao a performance:

List dados = new ArrayList();
try {
	stmt = CONN.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
		ResultSet.CONCUR_UPDATABLE); 
	rs = stmt.executeQuery(x);

	int total = rs.getMetaData().getColumnCount()
	String[] registro = new String[total];

	while (rs.next()) {
		for (int i = 0; i < total; i++) {
			registro[i] = rs.getString(i + 1);
		}

		 dados.add(registro);
	}
}

Rafael

Valeu, rafael, funcionou… Entendi a questão da referência…

Agora, qto aquela dica que tu me deu sobre meu código, o que poderia
deixá-lo mais otimizado?

[]s

F.L

Olhe o exemplo que eu passei na resposta. A maior coisa eh que vc usava rs.getMetaData().getColumnCount() constantemente, quando uma unica vez eh necessaria. Outra boa pratica de programacao eh usar interfaces sempre quando possivel. Assim, ao inves de fazer

ArrayList l = new ArrayList();

utilize a inteface List:

List l = new ArrayList();

Isso vale para qualquer caso aplicavel.

Rafael