JAR 升级后找不到符号 PreparedStatement
cannot find symbol PreparedStatement after JAR upgrade
我刚刚升级了 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 中的任何其他 class 替换?
尝试将其替换为:
import java.sql.PreparedStatement;
使用 com.mysql.jdbc.PreparedStatement
特定于 mysql,不应直接导入。
因此,除非您需要 MySQL 特定功能,否则最好使用独立于数据库的界面 java.sql.PreparedStatement
。另见 this。
com.mysql.jdbc.PreparedStatement
是 MySQL 5.x JDBC 驱动程序的内部 class。您的代码不应导入它。它应该使用标准 java.sql.PreparedStatement
class 来代替。
MySQL 8.x JDBC 驱动程序中的包名称已更改,这就是导致您的代码开始出现编译错误的原因。
解决方案:
修复您的代码,使其不导入任何 MySQL 实现 classes1。请改用 java.sql.*
和 javax.sql.*
class。
更改您的项目依赖项,使 MySQL 驱动程序 JAR 不是 compile-time 依赖项。这样做会导致 意外 对 JDBC 驱动程序的源代码依赖被标记为编译错误。它还会阻止您的 IDE 对 import
语句提出错误的建议。 (我的猜测是这就是伪造导入进入您的代码库的方式。)
如果您的代码(仍然)使用 Class.forName
来加载 JDBC 驱动程序,请将其改为使用 java.sql.DriverManager
;参见 javadoc。这样你就不会被 MySQL 驱动程序 class 名称的另一个变化所困扰。
1 - 您的 Java 代码不应该 需要 依赖于 MySQL-specific API。据我所知,MySQL 实现 classes 反映了标准 JDBC API,因此直接使用它们没有任何好处。并非所有供应商都如此。
我刚刚升级了 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 中的任何其他 class 替换?
尝试将其替换为:
import java.sql.PreparedStatement;
使用 com.mysql.jdbc.PreparedStatement
特定于 mysql,不应直接导入。
因此,除非您需要 MySQL 特定功能,否则最好使用独立于数据库的界面 java.sql.PreparedStatement
。另见 this。
com.mysql.jdbc.PreparedStatement
是 MySQL 5.x JDBC 驱动程序的内部 class。您的代码不应导入它。它应该使用标准 java.sql.PreparedStatement
class 来代替。
MySQL 8.x JDBC 驱动程序中的包名称已更改,这就是导致您的代码开始出现编译错误的原因。
解决方案:
修复您的代码,使其不导入任何 MySQL 实现 classes1。请改用
java.sql.*
和javax.sql.*
class。更改您的项目依赖项,使 MySQL 驱动程序 JAR 不是 compile-time 依赖项。这样做会导致 意外 对 JDBC 驱动程序的源代码依赖被标记为编译错误。它还会阻止您的 IDE 对
import
语句提出错误的建议。 (我的猜测是这就是伪造导入进入您的代码库的方式。)如果您的代码(仍然)使用
Class.forName
来加载 JDBC 驱动程序,请将其改为使用java.sql.DriverManager
;参见 javadoc。这样你就不会被 MySQL 驱动程序 class 名称的另一个变化所困扰。
1 - 您的 Java 代码不应该 需要 依赖于 MySQL-specific API。据我所知,MySQL 实现 classes 反映了标准 JDBC API,因此直接使用它们没有任何好处。并非所有供应商都如此。