开发者

ClassNotFoundException when connecting to Mysql with JDBC

I'm getting the following error when I try to run a simple Java JDBC program at the command line:

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)

Here's the simple Java program, copied right out of the JDBC docs:

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
        }
    }
}

Problem is, I'm bloody sure my bash shell $ClASSPATH variable is pointed at the correct .jar file. To be sure, I copied the JDBC .jar to the same directory as my program and ran it as follows:

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

I still get the same error.

Edit:

I followed Powerlord's suggestion below, and now I am still getting virtually the same exception.

I entered:

javac -classpath ./mysql-conn开发者_StackOverflowector-java-5.1.12-bin.jar LoadDriver.java 
java LoadDriver

Whether or not I leave the classpath flag on the second command seems not to matter. I am still getting:

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)


I think your syntax is just wrong here. Have you already compiled LoadDriver.java using:

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

If so, then you should be able to do :

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

(Note that I removed the '.java' from the end)


Short version:
javac requires you to put the .java at the end, java requires you to not put the .java at the end.

As Jim Garrison noted before he deleted his answer, this command-line to run the program is wrong.

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

This tells Java to load LoadDriver/java.class

What you actually want is

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

Provided of course that you compile it first with

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


The problem is not the missing driver, it's the missing LoadDriver class. You need to compile the .java source file to a .class file first:

javac LoadDriver.java
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜