Weil beide Klassen in Ihrem Klassenpfad zur Kompilierzeit vorhanden waren und Ihre IDE versuchte, hilfreich zu sein.
Denn prepareStatement()
ist angegeben
um java.sql.PreparedStatement
zurückzugeben , nicht com.mysql.jdbc.PreparedStatement
.
Das java.sql.PreparedStatement
ist eine Schnittstelle und Sie sollten dies die ganze Zeit verwenden. Die MySQL-Implementierung ist eine konkrete Implementierung, und Sie sollten Ihren JDBC-Code nicht eng an die MySQL-spezifische Implementierung koppeln. Andernfalls müssten Sie viele Änderungen in Ihrem Code vornehmen, wenn Sie jemals den DB-Server (und damit auch den JDBC-Treiber) auf einen anderen Anbieter wie PostgreSQL umstellen möchten. Wenn Sie die Standard-JDBC-Schnittstellen von java.sql
verwenden immer nur die JDBC-URL und möglicherweise auch den Benutzernamen und das Passwort sowie einige DB-spezifische SQL-Anweisungen ändern.