Porque ambas as classes estavam presentes em seu caminho de classe de tempo de compilação e seu IDE estava tentando ser útil.
Porque
prepareStatement()
é especificado
para retornar java.sql.PreparedStatement
, não com.mysql.jdbc.PreparedStatement
. O
java.sql.PreparedStatement
é uma interface e você deve usar isso o tempo todo. O MySQL é uma implementação concreta e você não deve estar acoplando seu código JDBC com a implementação específica do MySQL. Caso contrário, você teria que fazer muitas alterações em seu código se quiser mudar o servidor de banco de dados (e, portanto, também o driver JDBC) para um fornecedor diferente, como o PostgreSQL. Se você estiver usando as interfaces JDBC padrão de java.sql
pacote o tempo todo, tudo o que você precisaria alterar seria apenas a URL JDBC e talvez também o nome de usuário e a senha e algumas instruções SQL específicas do banco de dados.