仍然从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文件并将两个mysql-connector jar文件复制到/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
谢谢。
答案 0 :(得分:3)
首先,删除Class.forName("com.mysql.ch.jdbc.Driver");
。多年来并不需要这样做,因为JDBC驱动程序是使用service provider进程定位的。
即使有保证,您的Class.forName调用也假定驱动程序类为com.mysql.ch.jdbc.Driver。情况不再如此,实际上,驱动程序.jar文件中没有此类,因此Class.forName调用将始终失败。
第二,使用-classpath
选项时,将忽略-jar
选项。来自documentation:
使用
-jar
时,指定的JAR文件是所有用户类的源,而其他类路径设置将被忽略。
使用-jar
选项时,仅清单的Class-Path
属性用于将其他文件添加到类路径。
Class-Path
属性实际上是a list of relative URLs,用空格分隔。它们相对于包含清单的.jar文件。
因此,您必须将mysql-connector-java-5.1.47-bin.jar放置在与bbfq.jar相同的目录中,以使其在读取Class-Path清单属性时被类加载器拾取。 / p>