Java MySQL-коннектор ClassNotFoundException, несмотря на подачу сообщений - PullRequest
0 голосов
/ 27 января 2019

Все еще получаю ошибку компиляции ClassNotFoundException из com.mysql.cj.jdbc.Driver

из java-8 mysql-connector-java-5.1.147.jar и mysql-connector-java-5.1.47-bin.jar (хотя в большинстве сообщений говорится, что нужен именно bin.jar)

Я распаковал файл tar и скопировал два файла jar коннектора mysql в /usr/lib/jvm/java-8-oracle/lib и в свою папку исполнения /var/www/html для перебора Кроме того, я поместил classpath в /etc/environment, а также в файл Java и при компиляции (сначала пробовал каждый отдельно).

затем компилируется, пробуется с компилированием и без него

Получите одинаковую ошибку во всех этих случаях (и других перестановках):

Исключение в потоке "main" java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver

... изначально вызывается из bbfq.main

Какие-нибудь другие идеи о том, где я неправильно пишу путь к классам? (эта запись может не показывать пробелы и отступы кода, как я его написал)

Спасибо.

In /etc/environment:  
JAVA_HOME="/usr/lib/jvm/java-8-oracle/bin"  
export JAVA_HOME  
CLASSPATH=".:/usr/lib/jvm/java-8-oracle/lib:/var/www/html"  
export CLASSPATH

in java file:
import java.sql.*;
import java.io.*;
public class bbfq {
....
Connection con=null;
...
try {
   Class.forName("com.mysql.cj.jdbc.Driver");
   con=DriverManager.getConnection("jdbc:mysql//localhost:3306/drupal7" "id" "password");
....

Manifest file bbfq.mf:
Manifest-Version: 1.0
Class-Path: phidget22.jar mysql-connector-java-5.1.47.jar mysql-connector-java-5.1.47-bin.jar

compiled with and without declaring classpath:
sudo javac -classpath bbfq.java    
or    
sudo javac -classpath .:mysql-connector-java-5.1.47.jar:mysql-connector-java-5.1.47-bin.jar bbfq.java

and tried to run with or without classpath:
sudo java -jar bbfq.jar   
or    
sudo java -classpath .:bbfq:mysql-connector-java-5.1.47-bin.jar -jar bbfq.jar

Спасибо.

1 Ответ

0 голосов
/ 27 января 2019

Сначала удалите Class.forName("com.mysql.ch.jdbc.Driver");.В течение многих лет в этом не было необходимости, поскольку драйверы JDBC находятся с использованием процесса поставщика услуг .

Даже если это оправдано, ваш вызов Class.forName предполагает, что класс драйвера - com.mysql.ch.jdbc.Driver.Это больше не так, и на самом деле такого файла в файле драйвера .jar нет, поэтому вызов Class.forName всегда будет неудачным.

Во-вторых, опция -classpath игнорируется при использовании-jar вариант.Из документации :

Когда вы используете -jar, указанный JAR-файл является источником всех пользовательских классов, а другие параметры пути к классам игнорируются.

Когда вы используете опцию -jar, только атрибут Class-Path манифеста используется для добавления других файлов в путь к классам.

Атрибут Class-Path на самом деле списокотносительные URL , разделенные пробелами.Они относятся к файлу .jar, содержащему манифест.

Итак, вы должны поместить mysql-connector-java-5.1.47-bin.jar в тот же каталог, что и bbfq.jar, чтобы он был выбранзагрузчиком классов, когда он читает атрибут манифеста Class-Path.

...