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

Derby embedded database 'APPDATA' folder not found, Trying to create OS X application .app

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

时,它会产生问题

这是我在 java 上的连接方法(已经在处理 .exe 和设置 -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

创建 Mac OS X 应用程序后,.jar 找不到 APPDATA

使用 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);
    }

需要开发帮助,谢谢!

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

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

然后

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

如我的回答所述here,
在Mac OSX app中,可以使用

获取jar当前工作目录的位置
System.getProperty("java.library.path")

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

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



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