2013-07-09 12 views
8

Eseguo una query di database e memorizza gli oggetti Account nello ResultSet. Ecco il codice:Metodo getObject() di Resultset - come usarlo correttamente?

try { 
    ResultSet rs = queryDatabase(); 
    int i=0; 
    while (rs.next()) { 
     Account account= rs.getObject(i, Account); //ERROR 
     accounts.add(account); 
     i++; 
    } 
} catch (Exception e) { 
} 

Questo codice restituisce 3 oggetti e li memorizza nella RS. Quindi voglio ottenere quegli oggetti nel ResultSet e inserirli in un ArrayList come si vede nel codice. Ma dà un errore nella linea specificata dicendo che è previsto ;. Come posso usare correttamente il metodo getObject?

+0

Perché ci sono doppie parentesi accanto a 'getObject':' (('e')) '? – rgettman

+0

Ti dice che hai un * errore di sintassi *. Ad esempio, troppe parentesi e un tipo a cui non appartiene, ad esempio. –

+0

beh, mi dispiace per le parestes li ho riparati – yrazlik

risposta

3

ResultSet.getObject (e gli altri metodi getXxx) sarà recuperare i dati dalla riga corrente del ResultSet e inizia nell'indice 1. È stata impostata la variabile i con valore 0.

basta cambiare questo

int i=0; 

Per

int i=1; 

Inoltre, getObject ha bisogno di un unico parametro, ma sei in modo errato invio di due:

Account account= rs.getObject(i, Account); 

Probabilmente si stava tentando di utilizzare ResultSet#getObject(int, Class) (disponibile da Java 7), ma è necessario prendere in Conta che la tua classe Account non può essere magicamente convertita da una colonna del database in un'istanza di questo oggetto.

Sembra che sarebbe meglio rivedere JDBC trial prima, quindi riprovare per risolvere il problema.

Ecco un'altra buona fonte di rivedere: Using Customized Type Mappings

+0

l'ho provato, e ho anche cambiato la riga errata in Account account = rs.getObject (i, Account.class); ora nessun errore di sintassi, ma restituisce null, eseguirò il debug e modificherò la domanda, grazie per il modo in cui l'aggiornamento alla mia risposta è controllato da – yrazlik

+1

@iceface. –

+0

che ha senso, ho trovato un modo per farlo grazie. Quando creiamo String s = rs.getString (0); non dà errore quindi ho pensato che se facessi lo stesso per l'oggetto Account, sarebbe ok ma non è – yrazlik

1

nostro obiettivo:

import java.io.Serializable; 
... 
class Account implements Serializable{ 
    public String data; 
} 

Come ottenere il nostro oggetto da BD:

while (rs.next()) { 
     Object accountJustObject = rs.getObject(i); 
     Account account = (Account)accountJustObject; 
     accounts.add(account); 
     i++; 
} 

Come salvare il nostro oggetto:

public void InsertAccount(int id, Account newaccount){ 
reparedStatement insertNew = conn.prepareStatement(
    "INSERT INTO root(id,account) VALUES (?,?)"; 
    insertNew.setInt(1, id);    //INT field type 
    insertNew.setObject(2, newaccount); //OTHER field type 
    insertNew.executeUpdate(); 
) 
} 

Testato sotto il database H2.

Problemi correlati