2013-07-03 6 views
15

Ich habe ein PreparedStatement wie:Einfügen mit PreparedStatement. Wie inkrementiere ich die ID automatisch?

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(); 

Wie Sie sehen können, die Employee-Tabelle hat eine Auto-ID erhöht. Ich muss es grundsätzlich auch automatisch mit preparedStatement hinzufügen. Kann mir jemand sagen, wo ich falsch liege und mich korrigieren? Im Moment gibt es nur einen Fehler im Zusammenhang mit Statement.

Antwort

27

Lassen Sie die Spalte aus der INSERT Anweisung vollständig. Es wird von der Datenbank-Engine generiert. Ihre Abfrage sollte sein:

Zweitens, müssen Sie zuerst den Einsatz durchführen, dann erhalten Sie die Schlüssel aus dem Ergebnis.

Ich glaube, Ihr Code sollte sein:

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); 

Hinweis dieses Beispiel nicht den Erfolg der ausgeführten Anweisung oder die Existenz von zurückgegebenen Schlüssel überprüft.

+0

Vielen Dank !!! –

+0

können wir das verwenden? 'Einfügen in mytbl (str1, str2) Werte ('Beispiel',?)' und dann 'ps.setString (1," String2 ")' oder wir müssen 'ps.setString (2," String2 ")'? :) – DeepSidhu1313

+0

@ DeepSidhu1313 Sie können es natürlich versuchen, aber es wäre Parameter 1, weil es der erste Parameter in der Abfrage ist. –

Verwandte Themen