未找到Derby嵌入式数据库'APPDATA'文件夹,尝试创建OS X应用程序.app

时间:2016-04-15 05:51:32

标签: java macos jdbc derby .app

我正在尝试从java desktopos.jar创建一个Mac OS X应用程序,其中我的应用程序.jar文件使用derby嵌入式数据库APPDATA。当我正在创建一个Mac OS X应用程序时,它会产生问题.app

这是我在java上的连接方法(已经在.exe和setup-Windows& Linux上工作)

public static Connection getdataconnet() {
        Connection connect = null;
        try {
            Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
            connect = DriverManager.getConnection("jdbc:derby:APPDATA", "xxxx", "xxxxxxxxxxxxxxx");
         } catch (ClassNotFoundException ex) {
            globalData.GlobalDataSetGet.OLD_USER = -1;
            ////JOptionPane.showMessageDialog(null, "1"+ex);
        } catch (SQLException ex) {
            globalData.GlobalDataSetGet.OLD_USER = -1;
            ////JOptionPane.showMessageDialog(null, "2"+ex);
        }
        return connect;
    }

Mac OS X应用程序架构.app enter image description here

创建Mac OS X应用程序.app 后,.jar找不到APPDATA enter image description here

使用CWD ..

Connection connect = null;
    Path currentRelativePath = Paths.get("");
    String s = currentRelativePath.toAbsolutePath().toString();
    try {//DriverManager.getConnection("jdbc:derby:"+System.getProperty("user.dir")+"/APPDATA", "#####", "#############");
       connect = DriverManager.getConnection("jdbc:derby:"+s+"/APPDATA", "#####", "#############");

    } catch (ClassNotFoundException ex) {
        globalData.GlobalDataSetGet.OLD_USER = -1;
        JOptionPane.showMessageDialog(null, "1"+ex);
    } catch (SQLException ex) {
        globalData.GlobalDataSetGet.OLD_USER = -1;
        JOptionPane.showMessageDialog(null, "2"+ex);
    }

enter image description here 需要开发者帮助,谢谢!

2 个答案:

答案 0 :(得分:3)

正如我的回答here所述, 在Mac OSX应用程序中,jar的当前工作目录的位置可以使用

获得
System.getProperty("java.library.path")

因此,对于连接字符串,请使用:

String pwd = System.getProperty("java.library.path");
connect = DriverManager.getConnection("jdbc:derby:"+pwd+"/APPDATA", "#####", "#############");



由于我现在无法访问Mac,只需验证pwd的值是否以' /'结尾。如果是,请附加" APPDATA"而不是" / APPDATA"。
希望这有帮助!

答案 1 :(得分:1)

JDBC连接URL jdbc:derby:APPDATA表示在应用程序的当前工作目录(CWD)中查找名为APPDATA的文件夹。

您需要弄清楚启动应用时您的CWD是什么,或许可以查看此问题的答案:Getting the Current Working Directory in Java

然后

  1. 安排让您的CWD成为存储APPDATA的地方,或
  2. 允许用户告诉您的应用程序存储APPDATA的位置,并将其放在JDBC连接URL中。