【问题标题】:Why driver is still missing?为什么司机还不见了?
【发布时间】:2014-03-18 07:49:09
【问题描述】:

我正在尝试将 Java DB 用于仅应用程序存储。

环境变量:

CLASSPATH:
%JAVA_HOME%\jre\lib;%DERBY_HOME%\lib\derby.jar
DERBY_HOME:
C:\Program Files\Java\jdk1.7.0_25\db
Path:
%DERBY_HOME%\bin

没有对 Eclipse 配置进行任何更改,我无法将其包含在构建路径中(它会以某种方式被视为第三方库,这是不允许的) 当我在 cmd 中键入“sysinfo”时,它告诉我 Db 已安装并列出包和其他信息。

代码:

   public class Main {
        private static String dbURL = "jdbc:derby:AssertDB;user=me;password=mine;create=true";
        private static Connection con = null;

    public static void main(String[] args) {
        setDBSystemDir();
        createConnection();
        CookiesTable pTable = new CookiesTable(con);
        try {
            pTable.createTable();
            pTable.populateTable();

        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        // TODO Auto-generated method stub
        // load files
        // parse files to tables
        // retrive SQL statment
        // print result

    }

    private static void setDBSystemDir() {
        // Decide on the db system directory: <userhome>/.addressbook/
        String userHomeDir = System.getProperty("user.home", ".");
        String systemDir = userHomeDir + "/.asertdb";

        // Set the db system directory.
        System.setProperty("derby.system.home", systemDir);
    }

    private static void createConnection() {

        try {
            Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance();
            // Get a connection
            con = DriverManager.getConnection(dbURL);
        } catch (Exception except) {
            System.out.println("DRIVER DRROOOOOP");
            except.printStackTrace();
        }
    }

}

例外:

java.lang.ClassNotFoundException: org.apache.derby.jdbc.EmbeddedDriver
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:190)
    at com.tuto.p4.Main.createConnection(Main.java:44)
    at com.tuto.p4.Main.main(Main.java:13)
Exception in thread "main" java.lang.NullPointerException
    at com.tuto.p4.CookiesTable.createTable(CookiesTable.java:29)
    at com.tuto.p4.Main.main(Main.java:16)

【问题讨论】:

  • 我看了,试过了,还是不能解决问题
  • 几乎所有类型的应用程序都会忽略环境变量CLASS_PATH
  • 注意:%JAVA_HOME%\jre\lib 不是类路径上的有效条目。首先,Java 会自动添加它(因此实际上不需要指定它),其次,这不会将该文件夹中的 JAR 添加到类路径中。相反,它只是将整个文件夹添加为类路径资源(因此您现在可以加载 rt.jar 但不能加载 其中的代码
  • 我看到它是通过 main 方法运行的。不应忽略 CLASSPATH 环境变量。你是从命令行运行它吗?您是否在运行之前在命令行上设置变量?如果您在命令行上设置变量,请不要在 derby home 之前设置类路径。还可以尝试用双引号将空格括起来。还尝试将类路径指定为 java 选项 - java -cp "yourdriverjarpath";otherjar.jar;yourclassesDir Main

标签: java derby classnotfoundexception


【解决方案1】:

如果您运行 SampleApp,有两件事要做,以防您收到 java.lang.ClassNotFoundException: org.apache.derby.jdbc.EmbeddedDriver

  1. Configure Embedded Derby
  2. Verify Derby

正如您所说,您检查了 sysinfo,即使这些工具是可选的,我也会尝试添加 derby.jarderbytools.jar

或者您可以将 SampleApp 与您的应用程序进行比较......

【讨论】:

    【解决方案2】:

    包括 derbytools.jar、derbyclient.jar 以及。

    【讨论】:

    【解决方案3】:

    试试把System.out.println(System.getProperty("java.class.path")); 之前Class.forName(...).newInstance()

    输出必须包含到 derby.jar 的有效路径。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-21
      • 2011-08-26
      • 1970-01-01
      • 1970-01-01
      • 2022-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多