Parce que les deux classes étaient présentes dans votre chemin de classe à la compilation et que votre IDE essayait d'être utile.
Parce que prepareStatement()
est spécifié
pour renvoyer java.sql.PreparedStatement
, pas com.mysql.jdbc.PreparedStatement
.
Le java.sql.PreparedStatement
est une interface et vous devriez l'utiliser tout le temps. Celui de MySQL est une implémentation concrète et vous ne devriez pas associer étroitement votre code JDBC à l'implémentation spécifique de MySQL. Sinon, vous devrez apporter de nombreuses modifications à votre code si jamais vous souhaitez basculer le serveur de base de données (et donc également le pilote JDBC) vers un autre fournisseur tel que PostgreSQL. Si vous utilisez les interfaces JDBC standard de java.sql
tout le temps, tout ce que vous auriez besoin de changer est uniquement l'URL JDBC et peut-être aussi le nom d'utilisateur et le mot de passe et certaines instructions SQL spécifiques à la base de données.