Perché entrambe le classi erano presenti nel tuo percorso di classe in fase di compilazione e il tuo IDE cercava di essere utile.
Perché prepareStatement()
è specificato
per restituire java.sql.PreparedStatement
, non com.mysql.jdbc.PreparedStatement
.
Il java.sql.PreparedStatement
è un'interfaccia e dovresti usarlo sempre. Quella di MySQL è un'implementazione concreta e non dovresti accoppiare strettamente il tuo codice JDBC all'implementazione specifica di MySQL. Altrimenti dovresti apportare molte modifiche al tuo codice se vuoi cambiare il server DB (e quindi anche il driver JDBC) a un fornitore diverso come PostgreSQL. Se stai utilizzando le interfacce JDBC standard da java.sql
pacchetto tutto il tempo, tutto ciò che devi modificare è solo l'URL JDBC e forse anche il nome utente e la password e alcune istruzioni SQL specifiche del DB.