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