Java 使用JDBC连接到Mysql时发生ClassNotFoundException

Java 使用JDBC连接到Mysql时发生ClassNotFoundException,java,mysql,jdbc,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.Ac

当我尝试在命令行上运行一个简单的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)
下面是从JDBC文档中复制的简单Java程序:

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
        }
    }
}
问题是,我敢肯定我的bashshell$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)
短版本:
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

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

javac LoadDriver.java

我认为你的语法在这里是错误的。您是否已使用以下方法编译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”)

这几乎是正确的。我还必须将./添加到我的类路径中。最后一个命令行是java-classpath./:./mysql-.jar loaddrive一般来说,编译时类路径中不需要mysql-connector-java-5.1.12-bin.jar,因为驱动程序只在运行时需要(通过反射加载)。