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

五迷三道 提交于 2019-11-28 02:18:01

问题


I am trying to create a Mac OS X application from java desktopos.jar, where my application .jar file using derby embedded database APPDATA. It creates problem when, I'm createing a Mac OS X application .app

Here is my connection method on java(Already working on .exe and 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 application architecture .app

APPDATA not found by .jar after creating a Mac OS X application .app

Using 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);
    }

Need dev help,Thanks!


回答1:


The JDBC Connection URL jdbc:derby:APPDATA says to look for the folder named APPDATA in the current working directory (CWD) of your application.

You need to figure out what your CWD is when your app is launched, perhaps by looking at the answers to this question: Getting the Current Working Directory in Java

Then either

  1. arrange to make your CWD be the place where APPDATA is stored, or
  2. allow the user to tell your app where APPDATA is stored and put that in your JDBC Connection URL.



回答2:


As mentioned in my answer here,
In Mac OSX app, location of current working directory of jar can be obtained using

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

Therefore, for connection string, use:

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



Since I don't have access to Mac right now, just verify whether value of pwd ends with '/'. If yes append "APPDATA" instead of "/APPDATA".
Hope this helps!



来源:https://stackoverflow.com/questions/36639175/derby-embedded-database-appdata-folder-not-found-trying-to-create-os-x-applic

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!