2010-04-23 6 views
5

Sé que esto debería ser simpel y estoy probablemente mirando directamente al problema, pero una vez más estoy atascado y necesito la ayuda de los gurús del código.Almacenamiento Resultado conjunto en una matriz

También estoy tratando de tomar una fila de una columna en jdbc, y ponerlos en una matriz.

puedo hacer esto de la siguiente manera:

public void fillContactList() 
     { 
      createConnection(); 
      try 
      { 
       Statement stmt = conn.createStatement(); 
       ResultSet namesList = stmt.executeQuery("SELECT name FROM Users"); 
       try 
       { 
        while (namesList.next()) 
        { 
         contactListNames[1] = namesList.getString(1); 
         System.out.println("" + contactListNames[1]); 
        } 
       } 
       catch(SQLException q) 
       { 

       } 
       conn.commit(); 
       stmt.close(); 
       conn.close(); 
      } 
      catch(SQLException e) 
      { 

      } 

creatConnection es un método ya definido que hace lo que obviamente hace. creo mi conjunto de resultados mientras hay otro, guardo la cadena de esa columna en una matriz. luego imprímalo para una buena medida. también asegúrate de que esté allí.

el problema es que su almacenamiento de toda la columna en contactListNames [1]

i quería hacerlo almacenar fila column1 1 en [1]

continuación, la columna 1 fila 2 en [2]

Sé que podría hacer esto con un ciclo. pero tampoco sé tomar solo una fila a la vez de una sola columna. ¿algunas ideas?

p.s ive lea la API, no puedo ver nada que se ajuste.

+0

El 'ResultSet' tiene una sola columna (es decir,' name' como puede verlo en su consulta), pero no conoce el número de filas con anticipación. Entonces, en lugar de usar una matriz, debes considerar usar 'List'. –

+0

El 'close' debería pasar en' finally'. Puede obtener [aquí] (http://balusc.blogspot.com/2008/07/dao-tutorial-data-layer.html) algunas ideas útiles. – BalusC

+0

y el tamaño máximo de la matriz era 5, así que eso es todo lo que realmente necesitaba – OVERTONE

Respuesta

20

Debe utilizar un ArrayList que proporciona toda la lógica para extender automáticamente el array.

List rowValues = new ArrayList(); 
while (namesList.next()) { 
    rowValues.add(namesList.getString(1)); 
} 
// You can then put this back into an array if necessary 
contactListNames = (String[]) rowValues.toArray(new String[rowValues.size()]); 
+1

O .. sólo se adhieren a 'list' en lugar de matriz. Para el OP: aprenda [aquí] (http://java.sun.com/docs/books/tutorial/collections/index.html) más sobre la API de recopilación. – BalusC

+0

nunca he utilizado el arraylist antes. Tengo problemas para seguir el código allí. le daría una oportunidad en un segundo – OVERTONE

+0

@BalusC: de acuerdo, no hay necesidad de la matriz a menos que otra API lo requiera. –

0

¿Se refiere a algo como:

int i = 0; 
ResultSet rs = stmt.executeQuery("select name from users"); 
while (rs.next()) { 
    String name = rs.getString("name"); 
    names[i++] = name; 
} 
+0

Esto requiere asignar la matriz 'names' al tamaño correcto. Una forma sería ejecutar primero una instrucción SQL count(). Yo recomendaría usar una colección (por ejemplo, ArrayList). –

+0

prácticamente. eso es lo que comenzó como likle. pero me deshice del lazo hasta que pude descifrar cómo tomar una fila a la vez. somethign liek este \t \t \t \t \t mientras (rs.next()) \t \t \t \t \t { \t \t \t \t \t \t int i = 0; \t \t \t \t \t \t contactListNames [i] = namesList.getString (i); \t \t \t \t \t \t System.out.println ("" + ContactListNames [i]); \t \t \t \t \t \t \t \t \t \t \t} – OVERTONE

Cuestiones relacionadas