我刚刚升级了mysql jdbc连接JAR(从mysql-connector-java-5.0.5.jar升级到mysql-connector-java-8.0.19.jar),该项目开始显示导入语句错误:
import com.mysql.jdbc.PreparedStatement;
java: cannot find symbol
symbol: class PreparedStatement
location: class package.ClassName
在哪里在新的jar文件中找到PreparedStatement的位置或包,或者在新的JAR中用其他任何类替换它?
答案 0 :(得分:4)
com.mysql.jdbc.PreparedStatement
是MySQL 5.x JDBC驱动程序的内部类。您的代码不应导入它。它应该使用标准的java.sql.PreparedStatement
类。
MySQL 8.x JDBC驱动程序中的程序包名称已更改,这就是导致您的代码开始出现编译错误的原因。
解决方案:
修复您的代码,使其不导入任何MySQL实现类 1 。改用java.sql.*
和javax.sql.*
类。
更改项目依赖项,以使MySQL驱动程序JAR不是编译时依赖项。这样做将导致对JDBC驱动程序的任何偶然源代码依赖关系都标记为编译错误。它还将阻止您的IDE为import
语句提出错误建议。 (我的猜测是,这就是伪造的导入进入您的代码库的方式。)
如果您的代码(仍然)仍在使用Class.forName
来加载JDBC驱动程序,请将其更改为使用java.sql.DriverManager
;参见javadoc。这样,您就不会被MySQL驱动程序类名称的另一次更改所累。
1-您的Java代码不应不需要依赖于MySQL特定的API。据我所知,MySQL实现类反映了标准的JDBC API,因此直接使用它们并不会带来任何好处。并非所有供应商都这样。
答案 1 :(得分:3)
尝试将其替换为:
import java.sql.PreparedStatement;
使用com.mysql.jdbc.PreparedStatement
特定于mysql,不应直接导入。
因此,除非需要MySQL特定的功能,否则最好使用与数据库无关的接口java.sql.PreparedStatement
。另请参见this。