未找到Derby嵌入式数据库’APPDATA’文件夹,尝试创建OS X应用程序.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 在此处输入图像描述

创建Mac OS X应用程序后,.jar找不到APPDATA .app 在此处输入图像描述

使用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连接URL jdbc:derby:APPDATA表示在应用程序的当前工作目录(CWD)中查找名为APPDATA的文件夹。

您需要弄清楚启动应用程序时您的CWD是什么,可能通过查看此问题的答案: 使用Java获取当前工作目录

然后

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

正如我在这里的回答中提到的,
在Mac OSX应用程序中,可以使用获取jar的当前工作目录的位置

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

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

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

由于我现在无法访问Mac,只需validationpwd的值是否以’/’结尾。 如果是,则附加“APPDATA”而不是“/ APPDATA”。
希望这可以帮助!