JAR 升级后找不到符号PreparedStatement

2024-03-29

我刚刚升级了 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 中的任何其他类替换?


com.mysql.jdbc.PreparedStatement是 MySQL 5.x JDBC 驱动程序的内部类。您的代码不应该导入它。应该是使用标准java.sql.PreparedStatement类代替。

MySQL 8.x JDBC 驱动程序中的包名称已更改,这就是导致您的代码开始出现编译错误的原因。

解决方案:

  1. Fix your code so that it doesn't import any MySQL implementation classes1. Use the java.sql.* and javax.sql.* class instead.

  2. 更改项目依赖项,使 MySQL 驱动程序 JAR 不再是编译时依赖项。这样做会导致任何偶然源代码对 JDBC 驱动程序的依赖性将被标记为编译错误。它还会阻止您的 IDE 提出错误的建议import声明。 (我的猜测是,这就是虚假导入进入您的代码库的方式。)

  3. 如果您的代码(仍在)使用Class.forName要加载 JDBC 驱动程序,请将其更改为使用java.sql.DriverManager反而;看javadoc https://docs.oracle.com/javase/8/docs/api/java/sql/DriverManager.html。这样您就不会因 MySQL 驱动程序类名称的另一次更改而感到困惑。


1 - Your Java code should not need to depend on MySQL-specific APIs. As far as I know, the MySQL implementation classes mirror the standard JDBC APIs, so you gain nothing by using them directly. This is not true for all vendors.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JAR 升级后找不到符号PreparedStatement 的相关文章

随机推荐