2013-01-05 23 views
10

Sto cercando di ottenere il comando mysql come mysql_insert_id(); che recupera l'id auto_increment dell'ultima riga inserita. Cosa posso fare per averlo in Java?Ottieni l'ultimo ID auto incrementato inserito in mysql

rs = st.executeQuery("select last_insert_id() from schedule"); 
lastid = rs.getString("last_insert_id()"); 

il mio lastid è stato dichiarato come INT. Io dono cosa usare in rs.get e anche il parametro ..

risposta

19

Prova ad utilizzare un alias

rs = st.executeQuery("select last_insert_id() as last_id from schedule"); 
lastid = rs.getString("last_id"); 
+0

grazie, ha funzionato. :) – Maki92

+0

Perché si aggiunge la dichiarazione FROM? È dannoso perché se la tua tabella contiene 2 righe otterrai 2 righe come risultato. "SELEZIONA LAST_INSERT_ID();" è abbastanza. – realmfoo

+3

E invece di rs.getString ("last_id") puoi chiamare rs.getString (1). – realmfoo

3

Perché non

SELECT MAX(id) FROM schedule 

Se id vostra colonna ha un nome diverso da quello id, è necessario sostituirlo di conseguenza nella query precedente.

Si può usare come:

rs = st.executeQuery("SELECT MAX(id) AS id FROM schedule"); 
int lastid = rs.getInt("id"); 
+0

Non ci penso .. haha ​​.. L'ultima volta che ho usato PHP con mysql_insert_id() ;, improvvisamente sono passato a java quindi mi concentro solo su di esso. Grazie per il suggerimento. :) – Maki92

+0

'int lastid = rs.getInt (" id ");' genererà un errore poiché 'id' non esiste. devi prima aggiungere un alias alla tua istruzione select. 'rs = st.executeQuery (" SELEZIONA MAX (id) id FROM schedule ");' –

+0

@JW. Grazie per il suggerimento. Aggiornato la mia risposta. – jlordo

23

Uso di JDBC, è possibile utilizzare Connection.PreparedStatement(query, int) metodo.

PreparedStatement pstmt = conn.prepareStatement(Query, Statement.RETURN_GENERATED_KEYS); 
pstmt.executeUpdate(); 
ResultSet keys = pstmt.getGeneratedKeys();  
keys.next(); 
key = keys.getInt(1); 
+2

Ho provato questo metodo, ma restituisce sempre 1. In qualche modo ho pensato che questo è per il controllo ha inserito qualsiasi query nel database? – Maki92

+2

@ Maki92 Non capisco davvero il tuo commento. questo pezzo di codice restituisce solo l'ultimo auto-increment_id dalla tua tabella. BTW, ASAIK questo è il modo standard per fare uso di JDBC. – PermGenError

+1

Ho visto persone che lo usano, ma hanno affrontato lo stesso problema come il mio. Il codice restituisce sempre 1 dalla tabella. – Maki92

5

vedere this postale per risposta & spiegazione

Statement stmt = db.prepareStatement(query, Statement.RETURN_GENERATED_KEYS); 
numero = stmt.executeUpdate(); 

ResultSet rs = stmt.getGeneratedKeys(); 
if (rs.next()){ 
    risultato=rs.getInt(1); 
} 
0

È possibile utilizzare seguente query per ottenere ultimo ID auto_incremented di ultima riga inserita.

SELECT (max(auto_incr_id)) from table_name; 
Problemi correlati