Java SE. Подключить SQLite БД в jar

511
09 апреля 2017, 01:21

Netbeans, проект Java SE. Есть такой код для подключения БД в проект.

String DB_PATH = "resources/MAIN.s3db";
public void connect(){
        try{
        Class.forName("org.sqlite.JDBC");
            try{
                String path = getClass().getResource("/resources/MAIN.s3db").toString();
                System.out.println(path);
                conn = DriverManager.getConnection("jdbc:sqlite::resource:" + path);
               //Способ1. РАБОТАЕТ из IDE
               //conn = DriverManager.getConnection("jdbc:sqlite:" + DB_PATH); 
                statmt = conn.createStatement();
            } catch (SQLException ex) {
                Logger.getLogger(DBConnection.class.getName()).log(Level.SEVERE, null, ex);
            }
        }catch(ClassNotFoundException e){
            System.err.print("Драйвер базы данных org.sqlite.JDBC не найден. ");
            System.err.println("Проверьте наличие файла libs/sqlitejdbc.jar.");
        }
    }

Внутри IDE работает способ 1, но я хочу положить БД в jar-ник. Способ через "jdbc:sqlite::resource:" не работает. Как правильно загружать sqlite-базу? Или как собрать проект, чтобы файл БД был рядом с jar?

run:
file:/D:/Projects/MonetaryCounter/build/classes/resources/MAIN.s3db
апр 08, 2017 9:32:44 AM org.models.db.DBConnection connect
SEVERE: null
java.sql.SQLException: path to ':resource:file:/D:/Projects/MonetaryCounter/build/classes/resources/MAIN.s3db': 'D:\Projects\MonetaryCounter\:resource:file:' does not exist
    at org.sqlite.Conn.<init>(Conn.java:41)
    at org.sqlite.JDBC.connect(JDBC.java:53)
    at java.sql.DriverManager.getConnection(DriverManager.java:664)
    at java.sql.DriverManager.getConnection(DriverManager.java:270)
    at org.models.db.DBConnection.connect(DBConnection.java:30)
    at org.controllers.DBControl.<init>(DBControl.java:17)
    at org.controllers.frames.MainFrame.initMyComponents(MainFrame.java:371)
    at org.controllers.frames.MainFrame.<init>(MainFrame.java:22)
    at org.controllers.frames.MainFrame.lambda$main$0(MainFrame.java:470)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
Answer 1

Если вы работаете с Maven, то необходимо вписать в нем помимо папок с тестами и исходниками, путь к ресурсам. После этого можно обращаться как обычно.

READ ALSO
Как &ldquo;заремарить&rdquo; строки в xml разметке?

Как “заремарить” строки в xml разметке?

Можно ли "заремарить" строки в xml разметке? Если да, то как?

343
Своя библиотека для android

Своя библиотека для android

Есть бекенд, собой представляет чат между двумя пользователями с возможностью видео конференции между пользователямиСтоит задача написать...

337
Получить параметры звука Android

Получить параметры звука Android

Видел на маркете приложения, который показывают громкость звука в дБ, частоту звука

303
Expandable Recycler View Глючит при добавлении элемента в группу

Expandable Recycler View Глючит при добавлении элемента в группу

При использовании библиотеки http://bignerdranchgithub

294