使用JDBC连接到Mysql时出现ClassNotFoundException

当我尝试在命令行运行一个简单的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) 

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

简洁版本:
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