我有一个简单的例子,它试图连接到数据库,当我在工作目录中解开mysql * .jar文件时,只能这样做。
可能是什么问题。为什么找不到jar文件?
有什么想法吗?
答案 0 :(得分:1)
您需要在运行JVM以及运行编译器时设置类路径。类路径必须包含JAR本身,而不是包含JAR的文件夹。
你的行
javac -cp ".:/usr/share/java" HelloWorld.java
表明您正在将类路径传递给Java编译器javac
,而不是JVM。
让我们使用以下简单类,它只连接到MySQL,然后再次断开连接:
import java.sql.*;
public class HelloWorld {
public static void main(String[] args) throws Exception {
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/db", "user", "password");
System.out.println("Got connection");
con.close();
}
}
以下是我来运行时发生的事情:
C:\Users\Luke\Java>echo %CLASSPATH%
.;C:\Program Files (x86)\Java\jre6\lib\ext\QTJava.zip;C:\Users\Luke\stuff\ojdbc6.jar
C:\Users\Luke\Java>java HelloWorld
Exception in thread "main" java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at HelloWorld.main(HelloWorld.java:5)
在这种情况下,MySQL驱动程序JAR不在类路径上,因此当我们尝试加载驱动程序类(com.mysql.jdbc.Driver
)时会出现错误。
如果我使用-cp
命令行开关将驱动程序JAR添加到类路径中(我在当前目录中有这个JAR的副本),它可以工作:
C:\Users\Luke\Java>java -cp .;mysql-connector-java-5.1.18-bin.jar HelloWorld
Got connection
(我在Windows上,所以我使用;
作为路径分隔符。您似乎使用了某些Unix方言,因此您应该使用:
代替。)
同样,如果我们将JAR添加到CLASSPATH
环境变量中,它也可以工作:
C:\Users\Luke\Java>set CLASSPATH=%CLASSPATH%;mysql-connector-java-5.1.18-bin.jar
C:\Users\Luke\Java>java HelloWorld
Got connection