Как да опаковам SQLite база данни в буркан?

Имам Java проект, който използва малка SQLite база данни.

Сега искам да създам изпълним jar файл с файла на базата данни и драйвера (sqlitejdbc-v056) вътре, за да имате един единствен пакет, съдържащ всичко.

Структурата на пакета ми изглежда така:

Bank
|
| 
+---src
|   ...
|           
+---bin
|   ...
|           
+---data
|       bank_database.db
|       
+---img
|       ajax-refresh-icon.gif
|       
+---doc
|       Datenbankschema.uxf
|       
\---resources
        sqlitejdbc-v056.jar

Имам достъп до DB с този малък Java клас:

package model;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DBHandle {

    Connection conn;

    public DBHandle() throws Exception {
        Class.forName("org.sqlite.JDBC");
    }

    public Connection openConnection() throws SQLException {
        conn = DriverManager.getConnection("jdbc:sqlite:data\\bank_database.db");
        return conn;
    }

    public void closeConnection() throws SQLException {
        if (!conn.isClosed()) {
            conn.close();
        }

    }

}

Ако опаковам всички тези неща в буркан с мениджъра за експортиране на Eclipse и се опитам да го изпълня, той хвърля ClassNotFoundException за JDBC драйвера.

Как мога да поправя този проблем?

Възможно ли е дори да се променят ресурси в буркан по отношение на базата данни?


person Demnogonis    schedule 02.12.2011    source източник
comment
Ако поставите файла с базата данни в буркана, няма да можете да го актуализирате по време на изпълнение - наясно ли сте с това?   -  person Thomas    schedule 02.12.2011
comment
Не, не съм :-/ ... Изглежда, че трябва да преразгледам концепцията си   -  person Demnogonis    schedule 02.12.2011


Отговори (3)


AFAIK не можете да модифицирате ресурси в буркан без много проблеми (по принцип това е zip и следователно трябва да е възможно, но може да има заключвания на файлове от JVM и т.н.).

Освен това не можете да поставите един буркан в друг. Можете обаче да разопаковате буркана с драйвера и да включите съдържанието в буркана, ако желаете това. Плъгинът за асемблиране на Maven има цел, която прави това: jar-with-dependencies.

person Thomas    schedule 02.12.2011
comment
Освен това не можете да поставите един буркан в друг. - трябва да погледнете onejar (one-jar.sourceforge.net) - person smp7d; 02.12.2011
comment
@smp7d Интересно, не знаех за това. Благодаря за споделянето. - person Thomas; 03.12.2011

За да решите вашия ClassNotFoundException, ще трябва да добавите sqllite jar към classpath

вижте: http://docs.oracle.com/javase/6/docs/technotes/tools/windows/classpath.html

person smp7d    schedule 02.12.2011
comment
Мисля, че въпросът не е за SQLite engine jar. Поне една част от този въпрос е за bank_database.db - person Alex K; 02.12.2011
comment
Да, добавих драйвера към Classpath във файла на манифеста. Но сега не може да намери базата данни. Търси в нормалния файлов път. Трябва ли да добавя и файла с базата данни към манифеста? - person Demnogonis; 02.12.2011

Предпочитам да използвам помощна програма, наречена one jar. Можете да използвате call it from ant или maven и аз го използвам както за работа, така и за моите лични проекти. Имам прилична статия в блога, която обяснява как да го използвам: Изграждане на самостоятелни изпълними Jars 2 начина

person Chris J    schedule 02.12.2011