簡體   English   中英

JAR 升級后找不到符號 PreparedStatement

[英]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 驅動程序中已更改,這就是導致您的代碼開始出現編譯錯誤的原因。

解決方案:

  1. 修復您的代碼,使其不會導入任何 MySQL 實現類1 使用java.sql.*javax.sql.* ZA2F2ED4F8EBC2CBB4C21A29DC40ABZ.* ZA2F2ED4F8EBC2CBB4C21A29DC40ABZ.*

  2. 更改您的項目依賴項,以便 MySQL 驅動程序 JAR 不是編譯時依賴項。 這樣做會導致 JDBC 驅動程序上的任何意外源代碼依賴項被標記為編譯錯誤。 它還將阻止您的 IDE 對import語句提出不正確的建議。 (我的猜測是,這就是虛假導入進入您的代碼庫的方式。)

  3. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM