2013-01-05 8 views
10

Próbuję uzyskać polecenie mysql jak mysql_insert_id(); który pobiera identyfikator auto_increment ostatniego wstawionego wiersza. Co mogę zrobić, aby uzyskać go w Javie?Pobierz ostatnio wstawiony identyfikator automatycznej inkrementacji w mysql

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

mój lastid został zadeklarowany jako INT. I dono co do wykorzystania w rs.get a także parametr ..

Odpowiedz

19

Spróbuj użyć aliasu

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

dziękuję, zadziałało. :) – Maki92

+0

Dlaczego dodajesz instrukcję FROM? Jest to szkodliwe, ponieważ jeśli twoja tabela zawiera 2 wiersze, otrzymasz 2 wiersze. "SELECT LAST_INSERT_ID();" wystarczy. – realmfoo

+3

Zamiast rs.getString ("last_id") możesz wywołać rs.getString (1). – realmfoo

3

Dlaczego nie

SELECT MAX(id) FROM schedule 

Jeśli id ​​kolumnie ma inną nazwę niż id, musisz zastąpić go odpowiednio w powyższym zapytaniu.

Można go używać jak:

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

Nie myślę o tym .. haha ​​.. Ostatni raz PHP z użyciem mysql_insert_id() ;, nagle przełączony na java, więc skupić się tylko z nim. Dzięki za sugestię. :) – Maki92

+0

'int lastid = rs.getInt (" id ");' wyświetli błąd, ponieważ 'id' nie istnieje. powinieneś najpierw dodać alias na wyciągu select. 'rs = st.executeQuery (" SELECT MAX (id) id from schedule ");' –

+0

@JW. Dziękuję za podpowiedź. Zaktualizowałem moją odpowiedź. – jlordo

23

Korzystanie JDBC, można użyć Connection.PreparedStatement(query, int) metody.

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

Próbowałem tej metody, ale zawsze zwracają 1. Jakoś myślę, że to jest do sprawdzania czy wstawić zapytanie do bazy danych? – Maki92

+2

@ Maki92 Naprawdę nie rozumiem twojego komentarza. ten fragment kodu zwraca po prostu ostatni auto-increment_id ze swojej tabeli. BTW, ASAIK jest to standardowy sposób korzystania z JDBC. – PermGenError

+1

Widziałem ludzi, którzy z tego korzystali, ale napotkali na ten sam problem, co mój. Kod zawsze zwraca 1 z tabeli. – Maki92

5

zobaczyć this post na odpowiedź & wyjaśnienie

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

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

można użyć następującego zapytania dostać ostatnią auto_incremented identyfikator ostatniego wstawionego wiersza.

SELECT (max(auto_incr_id)) from table_name; 
Powiązane problemy