我有一个尝试连接到数据库的简单示例,只有在解压缩工作目录中的 mysql*.jar 文件时才能执行此操作。
- 我试图将 /path/to/mysql.jar.file 导出到 $PATH 和 $CLASSPATH 并且没有用。
- 我尝试使用包含这样的路径,但它不起作用: javac -cp ".:/usr/share/java/" HelloWorld.java
可能是什么问题。为什么找不到jar文件?
有什么想法吗?
在运行 JVM 以及运行编译器时,您需要设置类路径。类路径必须包含 JAR 本身,而不是包含 JAR 的文件夹。
你的线
javac -cp ".:/usr/share/java" HelloWorld.java
表明您正在将类路径传递给javac
Java 编译器,而不是 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
) 时会出现错误。
如果我使用命令行开关将驱动程序 JAR 添加到类路径-cp
(我在当前目录中有此 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