java.sql.SQLException: !Statement.GeneratedKeysNotRequested!
Par PlaceOweb le mardi, octobre 28 2008, 00:18 - SQL - Lien permanent
Vous rencontrez l'exception SQL : !Statement.GeneratedKeysNotRequested!
J'ai capturé cette exception java.sql.SQLException: !Statement.GeneratedKeysNotRequested!
avec l'environnement suivant :
- Mysql 5.0.32-Debian_7etch1-log
- Connector/J 5.1
Lors de ce code Java :
PreparedStatement ps = sql.getConnectionSQL().prepareStatement("INSERT INTO ma_table SET " + "ma_date = NOW()," + "mon_id_utilisateur = ?"); ps.setInt(1, idUtilisateur); ps.executeUpdate(); ResultSet rs = ps.getGeneratedKeys(); // java.sql.SQLException: !Statement.GeneratedKeysNotRequested!
Il s'agit effectivement du dernier connecteur MySql (mysql-connector-java-5.1.7-bin.jar du 21/10/2008)
On ne rencontre pas cette erreur avec le précédent driver MySql pour java (mysql-connector-java-5.0.8-bin.jar du 04/10/2007)
Voyez la note de MySql à ce sujet : Fixed BUG#34185 - Statement.getGeneratedKeys() does not raise exception when statement was not created with Statement.RETURN_GENERATED_KEYS flags.
Et codez correctement (Retrieving AUTO_INCREMENT Column Values), en incluant les options de demande de retour des clefs générés lors de la requête :
preparedStatement = connectionSQL.prepareStatement( "INSERT INTO ma_table SET " + "ma_date = NOW()," + "mon_id_utilisateur = ?", PreparedStatement.RETURN_GENERATED_KEYS); preparedStatement.executeUpdate(); preparedStatement.getGeneratedKeys(); // Sans ce second paramètre du (prepare)statement, vous obtiendrez une Exception SQL : // java.sql.SQLException: Generated keys not requested. You need to specify Statement.RETURN_GENERATED_KEYS to Statement.executeUpdate() or Connection.prepareStatement().