[英]cannot find symbol PreparedStatement after JAR upgrade
I just upgraded mysql jdbc connection JAR (from mysql-connector-java-5.0.5.jar to mysql-connector-java-8.0.19.jar) and the project started showing error for import statements:
import com.mysql.jdbc.PreparedStatement;
java: cannot find symbol
symbol: class PreparedStatement
location: class package.ClassName
Where to find the location or package for PreparedStatement in new jar file or is it replaced with any other class in new JAR?
com.mysql.jdbc.PreparedStatement
is an internal class to the MySQL 5.x JDBC driver. 您的代碼不應導入它。 它應該使用標准java.sql.PreparedStatement
class 代替。
package 的名稱在 MySQL 8.x JDBC 驅動程序中已更改,這就是導致您的代碼開始出現編譯錯誤的原因。
解決方案:
修復您的代碼,使其不會導入任何 MySQL 實現類1 。 使用java.sql.*
和javax.sql.*
ZA2F2ED4F8EBC2CBB4C21A29DC40ABZ.* ZA2F2ED4F8EBC2CBB4C21A29DC40ABZ.*
更改您的項目依賴項,以便 MySQL 驅動程序 JAR 不是編譯時依賴項。 這樣做會導致 JDBC 驅動程序上的任何意外源代碼依賴項被標記為編譯錯誤。 它還將阻止您的 IDE 對import
語句提出不正確的建議。 (我的猜測是,這就是虛假導入進入您的代碼庫的方式。)
If your code is (still) using Class.forName
to load the JDBC driver, change it to use java.sql.DriverManager
instead; 請參閱javadoc 。 這樣您就不會被 MySQL 驅動程序 class 名稱的另一個更改所困擾。
1 - 您的 Java 代碼不需要依賴 MySQL 特定的 API。 據我所知,MySQL 實現類鏡像了標准的 JDBC API,因此直接使用它們將一無所獲。 並非所有供應商都是如此。
嘗試將其替換為:
import java.sql.PreparedStatement;
使用com.mysql.jdbc.PreparedStatement
是特定於 Z81C3B080DAD537DE57E10E097 的,不應直接導入。
因此,除非您需要 MySQL 特定功能,否則最好使用與數據庫無關的接口java.sql.PreparedStatement
。 另請參閱此。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.