2013-07-03 6 views
15

Ho un PreparedStatement come ad esempio:Inserisci utilizzando PreparedStatement. Come si aumenta automaticamente l'ID?

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

Come si può vedere, la tabella Employee ha un ID di auto-incrementato. Ho bisogno di aggiungerlo automaticamente anche usando preparedStatement. Qualcuno può dirmi dove sto sbagliando e correggermi? In questo momento mi dà solo un errore relativo alla dichiarazione.

risposta

27

Lasciare la colonna fuori dall'istruzione INSERTinteramente. Sarà generato dal motore del database. La tua richiesta dovrebbe essere:

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

In secondo luogo, è necessario eseguire prima l'inserimento, quindi estrarre le chiavi dal risultato.

credo che il codice dovrebbe essere:

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

Nota questo esempio non verifica il successo della istruzione eseguita o l'esistenza di chiavi restituite.

+0

Grazie mille !!! –

+0

possiamo usare questo? 'inserisci nei valori mytbl (str1, str2) ('Example',?)' e poi 'ps.setString (1," String2 ")' o dobbiamo usare 'ps.setString (2," String2 ")'? :) – DeepSidhu1313

+0

@ DeepSidhu1313 Naturalmente puoi provarlo, ma sarebbe il parametro 1 perché è il primo parametro nella query. –

Problemi correlati