Vous avez mal compris la valeur de retour de PreparedStatement#execute() .
Veuillez lire attentivement le javadoc :
Renvois :
truesi le premier résultat est unResultSetobjet;falsesi le premier résultat est un décompte de mise à jour ou s'il n'y a pas de résultat.
Il renvoie donc — comme prévu — false sur un INSERT requête. Il renvoie uniquement true sur un SELECT requête (pour laquelle vous aimeriez cependant généralement utiliser executeQuery() à la place qui retourne directement un ResultSet ).
Si vous êtes intéressé par les lignes concernées, utilisez plutôt PreparedStatement#executeUpdate() Au lieu. Il renvoie un int selon le javadoc :
Renvois :
soit (1) le nombre de lignes pour les instructions SQL Data Manipulation Language (DML) ou (2) 0 pour les instructions SQL qui ne renvoient rien
Une valeur de retour de 1 ou plus indiquerait alors une insertion réussie.
Non lié au problème concret :votre code fuit les ressources de la base de données. Veuillez lire attentivement À quelle fréquence doit-on fermer Connection, Statement et ResultSet dans JDBC ?