Pregunta

Estoy creando una aplicación en Java para recuperar datos de la base de datos MySQL. Después de ejecutar una consulta, obtengo un ResultSet y hago lo siguiente para extraer registros:

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

donde rs = ResultSet y rm = ResultSetMetaData

El problema es que tengo que hacer result.add (row.toString ()); en lugar de solo result.add (row); (con lo cual Me gustaría crear una ArrayList bidimensional. De lo contrario obtengo resultados vacíos.

He intentado poner row.clear (); al principio, antes del bucle for , pero eso hace que todos mis resultados se llenen con varias instancias de último disco Al igual que row no se agregó al resultado hasta el final, cuando es igual al último registro. ¿Necesito " cometer " la fila ArrayList antes de agregarla como un elemento a otra ArrayList? ¿Si es así, cómo? Además, por curiosidad, ¿por qué .toString () funciona de manera diferente?

¿Fue útil?

Solución

Al agregar row.toString (), estás creando un nuevo objeto String para agregarlo al resultado.

Por otro lado, al agregar una fila, estás agregando el mismo objeto al resultado, por lo tanto, cada vez que se llama a row.clear (), se vacían todas las filas en el resultado.

Lo que debes hacer es crear un nuevo objeto de fila antes del bucle for, y no hacer row.clear (). A continuación se muestra un ejemplo.

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

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

            result.add(row);
        }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top