我正在尝试从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 后,.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);
}
答案 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
然后