2011-10-04 18 views
28

En Java, tengo una consulta como esta:Java, un bucle a través del conjunto de resultados

String querystring1= "SELECT rlink_id, COUNT(*)" 
        + "FROM dbo.Locate " 
        + "GROUP BY rlink_id "; 

El rlink_id tabla tiene estos datos:

Sid  lid 
3   2 
4   4 
7   3 
9   1 

¿Cómo extraigo estos valores con un conjunto de resultados de Java ?

Esto es lo que tengo hasta ahora:

String show[] = {rs4.getString(1)}; 
String actuate[] = {rs4.getString(2)}; 
asString = Arrays.toString(actuate); 

Respuesta

13

Result Set son en realidad contiene varias filas de datos, y utilizar un cursor para señalar la posición actual. Entonces, en su caso, rs4.getString(1) solo obtendrá los datos en la primera columna de la primera fila. Con el fin de cambiar a la siguiente fila, es necesario llamar a next()

un ejemplo rápido

while (rs.next()) { 
    String sid = rs.getString(1); 
    String lid = rs.getString(2); 
    // Do whatever you want to do with these 2 values 
} 

hay muchos método útil en ResultSet, usted debe echar un vistazo :)

+1

cuando llamo a esta tapa sid n en algún lugar a través del ciclo me da solo la primera fila de valores – user977830

+0

¿El rs.next() en el ciclo while no pasa el primer resultado? – Durin

+2

@Durin: compruebe javadoc de [ResultSet.next()] (http://docs.oracle.com/javase/6/docs/api/java/sql/ResultSet.html#next%28%29), el " cursor "en realidad es el punto ** antes ** de la primera fila cuando se crea :) –

30
List<String> sids = new ArrayList<String>(); 
List<String> lids = new ArrayList<String>(); 

String query = "SELECT rlink_id, COUNT(*)" 
      + "FROM dbo.Locate " 
      + "GROUP BY rlink_id "; 

Statement stmt = yourconnection.createStatement(); 
try { 
    ResultSet rs4 = stmt.executeQuery(query); 

    while (rs4.next()) { 
     sids.add(rs4.getString(1)); 
     lids.add(rs4.getString(2)); 
    } 
} finally { 
    stmt.close(); 
} 

String show[] = sids.toArray(sids.size()); 
String actuate[] = lids.toArray(lids.size()); 
+0

¿No debería ser eso un "do- while"? ¿El iterador ya está en la posición correcta para acceder a la primera fila al comienzo? (sino, ¿por qué los tutoriales que acceden a la primera fila solo funcionan de otro modo)? – GameDeveloper

+0

Definitivamente no (la consulta no puede devolver ninguna fila). ¿De qué tutorial estás hablando? –

+0

ok gracias por haber solucionado mi problema ... U.U había un tutorial incorrecto en primer lugar en una búsqueda en google, parece haber desaparecido ahora. – GameDeveloper

-3

El problema con su código es:

 String show[]= {rs4.getString(1)}; 
    String actuate[]={rs4.getString(2)}; 

Esto creará una nueva matriz cada cronometra tu ciclo (no se agrega como podrías estar asumiendo) y, por lo tanto, al final solo tendrás un elemento por conjunto.

Aquí es una forma más de resolver esto:

StringBuilder sids = new StringBuilder(); 
    StringBuilder lids = new StringBuilder(); 

    while (rs4.next()) { 
     sids.append(rs4.getString(1)).append(" "); 
     lids.append(rs4.getString(2)).append(" "); 
    } 

    String show[] = sids.toString().split(" "); 
    String actuate[] = lids.toString().split(" "); 

Estas matrices tendrán todo el elemento requerido.

+1

Esta es la forma más extraña de crear matrices que he visto en mi vida. Además, ¿qué ocurre si una de las cadenas que contiene contiene un espacio? –

+0

¿Alguna razón para votar a la baja? – Santosh

+0

OP está almacenando un int y no una cadena. Entonces no habrá ningún espacio seguro. Es solo otra forma de crear una matriz aparte de las formas sugeridas por otras personas. – Santosh

Cuestiones relacionadas