Папка встроенной базы данных Derby «APPDATA» не найдена, попытка создать приложение OS X .app

Я пытаюсь создать приложение Mac OS X из java desktopos.jar, где мой файл .jar приложения использует встроенную базу данных дерби 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 введите здесь описание изображения

APPDATA не найден файлом .jar после создания приложения Mac OS X .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);
    }

введите здесь описание изображения Нужна помощь разработчиков, спасибо!


person Community    schedule 15.04.2016    source источник


Ответы (2)


URL-адрес подключения JDBC jdbc:derby:APPDATA указывает искать папку с именем APPDATA в текущем рабочем каталоге (CWD) вашего приложения.

Вам нужно выяснить, что такое ваш CWD при запуске вашего приложения, возможно, просмотрев ответы на этот вопрос: Получение текущего рабочего каталога на Java

Тогда либо

  1. договоритесь, чтобы ваш CWD был местом, где хранятся APPDATA, или
  2. позвольте пользователю сообщить вашему приложению, где хранится APPDATA, и поместите его в URL-адрес подключения JDBC.
person Bryan Pendleton    schedule 15.04.2016
comment
Соединение соединение = ноль; Путь currentRelativePath = Paths.get(); Строка s = currentRelativePath.toAbsolutePath().toString(); попробуйте { Class.forName(org.apache.derby.jdbc.EmbeddedDriver); connect = DriverManager.getConnection(jdbc:derby:+s+/APPDATA, xxx, lxxxxx); }//Я использую этот CWD, но все еще не работает.. - person ; 15.04.2016
comment
Уважаемый сэр, Хорошая идея определить динамический CWD, но это все еще создает проблему, когда я пытаюсь получить доступ к моему «abc.app». - person ; 15.04.2016
comment
Прямо перед этим вызовом DriverManager.getConnection выведите s, например: System.out.println(s);. Затем посмотрите, действительно ли эта строка указывает на папку, в которой хранится APPDATA. Если нет, то нужно. - person Bryan Pendleton; 16.04.2016
comment
Но .app показывает мне '/' только путь становится jdbc:derby://APPDATA - person ; 16.04.2016

Как упоминалось в моем ответе здесь,
в приложении 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».
Надеюсь, это поможет!

person Ruturaj Patil    schedule 17.04.2016