valores una resultados objetos nuevo llenar guardar elementos elemento consulta como array agregar agrega java jdbc resultset loops

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 es null : 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)