Acabo de actualizar mysql jdbc connection JAR (de mysql-connector-java-5.0.5.jar a mysql-connector-java-8.0.19.jar) y el proyecto comenzó a mostrar errores para las declaraciones de importación:
import com.mysql.jdbc.PreparedStatement; java: cannot find symbol symbol: class PreparedStatement location: class package.ClassName¿Dónde encontrar la ubicación o el paquete para PreparedStatement en el nuevo archivo jar o se reemplaza con cualquier otra clase en el nuevo JAR?
com.mysql.jdbc.PreparedStatement es una clase interna del controlador JDBC de MySQL 5.x. Tu código no debería importarlo. Debería usar la clase estándar java.sql.PreparedStatement en su lugar.
Los nombres de los paquetes han cambiado en los controladores JDBC de MySQL 8.x, y eso es lo que provocó que su código comenzara a generar errores de compilación.
Solución:
Arregle su código para que no importe ninguna clase de implementación de MySQL 1 . Utilice la clase java.sql.* y javax.sql.* en su lugar.
Cambie las dependencias de su proyecto para que el JAR del controlador MySQL no sea una dependencia en tiempo de compilación. Si lo hace, cualquier dependencia accidental del código fuente en los controladores JDBC se marcará como errores de compilación. También evitará que su IDE haga sugerencias incorrectas para declaraciones de import . (Supongo que así es como la importación falsa entró en su base de código).
Si su código (todavía) usa Class.forName para cargar el controlador JDBC, cámbielo para usar java.sql.DriverManager en su lugar; ver javadoc . De esa manera, no se quemará con otro cambio en el nombre de la clase del controlador MySQL.
1 - Su código Java no debería depender de las API específicas de MySQL. Hasta donde yo sé, las clases de implementación de MySQL reflejan las API estándar de JDBC, por lo que no gana nada usándolas directamente. Esto no es cierto para todos los proveedores.
Intenta reemplazarlo con:
import java.sql.PreparedStatement; El uso com.mysql.jdbc.PreparedStatement es específico de mysql y no debe importarse directamente.
Entonces, a menos que necesite funciones específicas de MySQL, siempre es mejor usar la interfaz java.sql.PreparedStatement que es independiente de la base de datos. Véase también esto .