使用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