代码之家  ›  专栏  ›  技术社区  ›  Jacob Lyles

用jdbc连接到mysql时ClassNotFoundException

  •  3
  • Jacob Lyles  · 技术社区  · 16 年前

    当我试图在命令行运行一个简单的JavaJDBC程序时,我会遇到以下错误:

    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 回复  |  直到 16 年前
        1
  •  3
  •   elduff    16 年前

    我觉得你的语法是错的。是否已使用以下方法编译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)

        2
  •  2
  •   Powerlord    16 年前

    简短版本:
    javac 需要将Java放在最后, java 要求你 最后把.java放进去。

    正如JimGarrison在删除答案之前指出的那样,运行程序的命令行是错误的。

    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
    
        3
  •  0
  •   FRotthowe    16 年前

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

    javac LoadDriver.java