java - objetos - guardar resultados de una consulta sql en un array c#
Iterando sobre ResultSet y agregando su valor en un ArrayList (2)
Si he entendido tu problema correctamente, aquí hay dos problemas posibles:
-
resultset
esnull
: supongo que este no puede ser el caso como si fuera a tener una excepción en su bucle while y no se generaría nada - el segundo problema es que
resultset.getString(i++)
obtendrá las columnas 1,2,3 y así sucesivamente de cada fila posterior
Creo que el segundo punto es probablemente tu problema aquí.
Digamos que solo devolvió 1 fila, de la siguiente manera
Col 1, Col 2, Col3
A , B, C
Su código tal como está ahora solo obtendría A - no obtendría el resto de las columnas.
Le sugiero que cambie su código de la siguiente manera:
ResultSet resultset = ...;
ArrayList<String> arrayList = new ArrayList<String>();
while (resultset.next()) {
int i = 1;
while(i <= numberOfColumns) {
arrayList.add(resultset.getString(i++));
}
System.out.println(resultset.getString("Col 1"));
System.out.println(resultset.getString("Col 2"));
System.out.println(resultset.getString("Col 3"));
System.out.println(resultset.getString("Col n"));
}
Editar:
Para obtener el número de columnas:
ResultSetMetaData metadata = resultset.getMetaData();
int numberOfColumns = metadata.getColumnCount();
Estoy iterando sobre un ResultSet
y tratando de copiar sus valores en un ArrayList
. El problema es que está atravesando solo una vez. Pero el uso de resultset.getString("Col 1")
para resultset.getString(''Col n")
muestra todas las entradas de todas las columnas. A continuación se muestra el fragmento de código:
ResultSet resultset = null;
ArrayList<String> arrayList = new ArrayList<String>();
int i = 1;
while (resultset.next()) {
arrayList.add(resultset.getString(i++));
System.out.println(resultset.getString("Col 1"));
System.out.println(resultset.getString("Col 2"));
System.out.println(resultset.getString("Col n"));
}
El único valor de ResultSet
que se copia en ArrayList
es para la columna 1. Y luego, mientras sale. Pero puedo ver el valor de todas las columnas. ¿Por qué?
Solo por diversión, ofrezco una solución alternativa utilizando jOOQ y Java 8. En lugar de usar jOOQ, podría estar usando cualquier otra API que asigne el conjunto de resultados de JDBC a la List
, como Spring JDBC o Apache DbUtils , o escriba su propio ResultSetIterator
:
jOOQ 3.8 o menos
List<Object> list =
DSL.using(connection)
.fetch("SELECT col1, col2, col3, ...")
.stream()
.flatMap(r -> Arrays.stream(r.intoArray()))
.collect(Collectors.toList());
jOOQ 3.9
List<Object> list =
DSL.using(connection)
.fetch("SELECT col1, col2, col3, ...")
.stream()
.flatMap(Record::intoStream)
.collect(Collectors.toList());
(Descargo de responsabilidad, trabajo para la empresa detrás de jOOQ)