2012-01-25 16 views
10

El conjunto de resultados que estoy hablando de esto: http://docs.oracle.com/javase/1.4.2/docs/api/java/sql/ResultSet.html¿Cómo realizo una iteración a través de los valores de una fila desde un conjunto de resultados en java?

Lo que me gustaría hacer es esto ...

for row in rows 
    for col in row 
     //col is the name of the column, row[col] is the value. 

estoy más profecient en PHP, JSP que, para tu información. Esto se haría en PHP, así:

foreach($rs as $row) 
    foreach($row as $col => $val) 
     //val is the cell value, and column is the column name 

EDIT: Estoy buscando una solución genérica. observe cómo col es una variable, no literal.

+6

Si bien es perfectamente posible leer los resultados en JSP, esa no es la forma correcta de hacerlo en Java. Tales cosas siempre se deben realizar en una clase de Java separada cuyo resultado será meramente iterado en el JSP. – adarshr

+0

Aprecio el consejo genérico. Puedo asegurarle que manejaré esos detalles más tarde ... aunque sinceramente estoy odiando cada momento que estoy programando en Java. –

+0

Ninguna solución proporcionada no incluirá la declaración implícita, "debe aprender algo nuevo". Si está recuperando el conjunto de resultados usando java, recorra el conjunto de resultados, usando java, y cree algo que sea consumible en PHP, como una lista de filas donde cada fila es una lista de columnas. – DwB

Respuesta

15

Esto es solo una variación de la respuesta a_horse_with_no_name.

final ResultSetMetaData meta = rs.getMetaData(); 
final int columnCount = meta.getColumnCount(); 
final List<List<String>> rowList = new LinkedList<List<String>>(); 
while (rs.next()) 
{ 
    final List<String> columnList = new LinkedList<String>(); 
    rowList.add(columnList); 

    for (final int column = 1; column <= columnCount; ++column) 
    { 
     final Object value = rs.getObject(column); 
     columnList.add(String.valueOf(value)); 
    } 
} 

// add the rowList to the request. 

Editar añadida final para todas las variables.

+0

que 'if ... else ...' es obligatorio. –

0

Asegúrese de leer primero The Tutorial.

while(rs.next()) { 
    String col1 = rs.getString("NAME"); // if NAME is VARCHAR2, for eg. 
} 

Si bien es perfectamente posible leer conjuntos de resultados en JSP, que no es la forma correcta de hacerlo en Java. Tales cosas siempre se deben realizar en una clase de Java separada cuyo resultado será meramente iterado en el JSP.

+0

Ya leí el tutorial. Necesito una forma más genérica. –

1

Es fácil si usa el Java Standard Tag Library.

mira esto, también:

http://docs.oracle.com/javaee/1.4/tutorial/doc/JSTL3.html

que sería desalentar fuertemente desde incrustación de código scriptlet en las JSP. No es el camino a seguir.

Si acepta eso, entonces cualquier otra respuesta dada aquí tiene que ser descartada. Todos ellos pertenecen a las clases de Java del lado del servidor, no a un JSP.

+0

Agradezco el enlace de la biblioteca de etiquetas; sin embargo, ¿todavía no existe una desconexión entre obtener las filas y columnas en una matriz para usar con la etiqueta foreach? No tengo idea de cómo obtendría mi conjunto de resultados en dicha matriz. –

+0

No si miras las etiquetas sql ...... – duffymo

+0

Oh, no noté la mención de las etiquetas SQL existentes en el tutorial que mencionaste. cosas geniales. Aunque definitivamente aprecio su consejo, creo que un enlace a un tutorial usando etiquetas sql hubiera sido más informativo que solo un enlace a un tutorial de etiquetas. solo crítica constructiva. Realmente aprecio tu sugerencia! –

10
ResultSetMetaData meta = rs.getMetaData(); 
int colCount = meta.getColumnCount(); 
while (rs.next()) 
{ 
    for (int col=1; col <= colCount; col++) 
    { 
     Object value = rs.getObject(col); 
     if (value != null) 
     { 
      System.out.print(value.toString()); 
     } 
    } 
} 

Pero no recomendaría hacer algo como esto directamente en la página JSP. Desarrolle algún tipo de titular de valor (por ejemplo, una Lista de Listas) en el servidor e itere sobre eso.

+0

Gracias por la respuesta. Tomaré tu consejo y usaré la respuesta de DwB ya que puedo arrojar eso en una función. Me gustaría poder marcar ambas respuestas como la respuesta, pero porque no puedo dar las gracias y sentir que usted fue el primero en responder mi pregunta;). –

Cuestiones relacionadas