Domanda

Sto creando un'applicazione in Java per recuperare i dati dal database MySQL. Dopo aver eseguito una query ottengo un ResultSet ed eseguo le seguenti operazioni per estrarre i record:

while (rs.next())
        {
            for (int column = 1; column <= rm.getColumnCount(); column++) {
                row.add(rs.getObject(column));
            }
            result.add(row.toString());
            row.clear();
        }

dove rs = ResultSet e rm = ResultSetMetaData

Il problema è che devo fare result.add (row.toString ()); piuttosto che solo result.add (riga); (con cui ho mi piacerebbe creare una ArrayList bidimensionale). Altrimenti ottengo risultati vuoti.

Ho provato a mettere row.clear (); all'inizio, prima del ciclo for , ma questo porta a riempire tutti i miei risultati con più istanze del ultimo record. Proprio come riga non è stato aggiunto al risultato fino alla fine, quando è uguale all'ultimo record. Devo " commit " la ArrayList riga prima di aggiungerla come elemt a un'altra ArrayList? Se é cosi, come? Inoltre, per curiosità, perché .toString () funziona in modo diverso?

È stato utile?

Soluzione

Aggiungendo row.toString (), stai creando un nuovo oggetto String da aggiungere al risultato.

D'altra parte, aggiungendo riga, si aggiunge lo stesso oggetto nel risultato, quindi, ogni volta che viene chiamato row.clear (), svuota tutte le righe nel risultato.

Quello che dovresti fare è creare un nuovo oggetto riga prima del ciclo for e non eseguire row.clear (). Di seguito è riportato un esempio.

while (rs.next())
        {
            row = new ArrayList();

            for (int column = 1; column <= rm.getColumnCount(); column++) {
                row.add(rs.getObject(column));
            }

            result.add(row);
        }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top