2013-07-03 14 views
15

Mam PreparedStatement takich jak:Wstaw używając PreparedStatement. Jak automatycznie zwiększyć identyfikator?

PreparedStatement preparedStatement = connect.prepareStatement("INSERT into employee (id, time, name" + "(?,?,?)",Statement.RETURN_GENERATED_KEYS); 
ResultSet tableKeys = preparedStatement.getGeneratedKeys(); 
preparedStatement.executeUpdate(); 
tableKeys.next(); 
int autoGeneratedID = tableKeys.getInt(1); 
preparedStatement.setInt(1,autoGeneratedID); 
preparedStatement.setTimestamp(2, new java.sql.Timestamp(new java.util.Date().getTime()));       
preparedStatement.setString(3, "Test"); 
preparedStatement.executeUpdate(); 

Jak widać w tabeli Pracownik ma automatycznego zwiększana ID. Muszę w zasadzie dodać go automatycznie również za pomocą funkcji prepareStatement. Czy ktoś może mi powiedzieć, gdzie idę źle i poprawić mnie? Właśnie teraz daje mi błąd związany z oświadczeniem.

Odpowiedz

27

Zostaw kolumnę z INSERT oświadczenie całkowicie. Zostanie wygenerowany przez silnik bazy danych. Twoje zapytanie powinno być:

INSERT INTO employee (time, name) 
VALUES (?, ?) 

Po drugie, musisz najpierw wykonać wkładkę, a następnie wyciągnąć klucze z wyniku.

wierzę Twój kod powinien być:

PreparedStatement preparedStatement = 
    connect.prepareStatement("INSERT into employee (time, name) VALUES (?,?)", 
    Statement.RETURN_GENERATED_KEYS); 

preparedStatement.setTimestamp(1, 
    new java.sql.Timestamp(new java.util.Date().getTime()));       
preparedStatement.setString(2, "Test"); 

preparedStatement.executeUpdate(); 

ResultSet tableKeys = preparedStatement.getGeneratedKeys(); 
tableKeys.next(); 
int autoGeneratedID = tableKeys.getInt(1); 

Uwaga Ten przykład nie sprawdzać efekty wykonywanego rachunku lub istnienia zwróconych kluczy.

+0

Wielkie dzięki! –

+0

możemy tego użyć? 'wstawić do wartości mytbl (str1, str2) (" Przykład ",?)', a następnie 'ps.setString (1," String2 ")' lub musimy użyć 'ps.setString (2," String2 ")'? :) – DeepSidhu1313

+0

@ DeepSidhu1313 Możesz oczywiście spróbować, ale byłby to parametr 1, ponieważ jest to pierwszy parametr w zapytaniu. –