使用JDBC连接到Mysql时出现ClassNotFoundException

时间:2010-03-26 19:18:35

标签: java mysql jdbc

当我尝试在命令行运行一个简单的Java JDBC程序时,我收到以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: LoadDriver/java
Caused by: java.lang.ClassNotFoundException: LoadDriver.java
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:315)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:330)
at java.lang.ClassLoader.loadClass(ClassLoader.java:250)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:398)

这是简单的Java程序,直接复制出来的JDBC文档:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
// Notice, do not import com.mysql.jdbc.*
// or you will have problems!
public class LoadDriver {
    public static void main(String[] args) {
        try {
            // The newInstance() call is a work around for some
            // broken Java implementations
            Class.forName("com.mysql.jdbc.Driver").newInstance();
        } catch (Exception ex) {
        throw ex;
            // handle the error
        }
    }
}

问题是,我很确定我的bash shell $ ClASSPATH变量指向正确的.jar文件。可以肯定的是,我将JDBC .jar复制到了与我的程序相同的目录中,并运行如下:

java -classpath ./mysql-connector-java-5.1.12-bin.jar LoadDriver.java 

我仍然得到同样的错误。

编辑:

我按照下面的Powerlord的建议,现在我仍然得到几乎相同的例外。

我进入了:

javac -classpath ./mysql-connector-java-5.1.12-bin.jar LoadDriver.java 
java LoadDriver

我是否在第二个命令上留下classpath标志似乎并不重要。我还在:

Exception in thread "main" java.lang.NoClassDefFoundError: LoadDriver
Caused by: java.lang.ClassNotFoundException: LoadDriver
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:315)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:330)
at java.lang.ClassLoader.loadClass(ClassLoader.java:250)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:398)

3 个答案:

答案 0 :(得分:3)

我认为你的语法错误。您是否已使用以下方法编译LoadDriver.java:

javac -classpath ./mysql-connector-java-5.1.12-bin.jar LoadDriver.java ?

如果是这样,那么你应该可以这样做:

java -classpath ./mysql-connector-java-5.1.12-bin.jar LoadDriver  

(请注意,我从末尾删除了'.java')

答案 1 :(得分:2)

简短版本:
javac要求您将.java放在最后,java要求您将.java放在最后。

正如Jim Garrison在删除他的回答之前所说的那样,运行该程序的命令行是错误的。

java -classpath ./mysql-connector-java-5.1.12-bin.jar LoadDriver.java 

这告诉Java加载LoadDriver/java.class

你真正想要的是

java -classpath ./mysql-connector-java-5.1.12-bin.jar LoadDriver

当然,您首先使用

进行编译
javac -classpath ./mysql-connector-java-5.1.12-bin.jar LoadDriver.java

答案 2 :(得分:0)

问题不在于缺少的驱动程序,而是缺少的LoadDriver类。您需要首先将.java源文件编译为.class文件:

javac LoadDriver.java