Как использовать базу данных SQLite внутри файла JAR? - PullRequest
12 голосов
/ 28 июня 2011

Я не могу понять, как включить базу данных SQLite в файл Java .jar для развертывания (через Java WebStart).

База данных не нуждается в обновлении во время выполнения ... это по сути прославленный файл конфигурации.

Кстати, используя Eclipse.

Ответы [ 4 ]

11 голосов
/ 28 июня 2011

SQLite требует отдельных файлов из-за того, как двигатель обеспечивает блокировку, и ACID .Даже без необходимости обновлять базу данных, SQLite предназначен только для работы с прямым доступом к файлу (или с поддержкой памяти, но не с Java или другого хоста ;-) - SQLiteпоказывает, что это не чисто Java-решение и не предназначено для систем, не использующих базовую системную подсистему ввода-вывода.

Файлы данных SQLite могут быть извлечены изJAR для временного местоположения в начале (и, при необходимости, обратно туда в конце) - но кроме того, что похоже на этот подход, невозможно.Сама задача не сложна, но это еще одна вещь, которая должна быть выполнена и может потребовать дополнительных привилегий, недоступных в некоторых средах.

Счастливое кодирование.

5 голосов
/ 28 июня 2011

Рассматривали ли вы HSQLDB ? Вполне может быть быстрее заставить HSQLDB работать, чем понять, как это сделать с помощью sqlite. Я знаю, что вы сказали, что это только для чтения, но, очевидно, это не тот способ, которым вы настраивали sqlite.

Другой вариант - сохранить дамп базы данных sqlite

sqlite3 .dump

в вашем jar-файле, читая его при запуске из пути к классам через getResourceAsStream () и создавая базу данных при запуске приложения. очевидно, это добавляет накладные расходы при запуске и не является идеальным, но может работать в крайнем случае.

edit: только что нашел код для фактического создания БД программно здесь . в зависимости от размера вашей базы данных, сохранение SQL (сжатого при необходимости) и создание БД при запуске может быть не таким уж ужасным.

2 голосов
/ 09 декабря 2014

Поместите базу данных SQLite в папку ресурсов (пакет) в рамках проекта.

Подключите так:

public class SQLiteProject extends javax.swing.JFrame {
    :
private void formWindowOpened(java.awt.event.WindowEvent evt) {                                  
    CModel.connectDB(getClass().getResource("/resources/database.sqlite").toString());
}                                 


public class CModel {
    :
public static Connection connectDB(String cstr) {
    try {
        Class.forName("org.sqlite.JDBC");
        Conn = DriverManager.getConnection("jdbc:sqlite::resource:" + cstr);
        JOptionPane.showMessageDialog(null, "Connect!");
        return Conn;
    } catch (ClassNotFoundException | SQLException | HeadlessException e) {
        JOptionPane.showMessageDialog(null, e);
    }
    return null;
}

Загрузите и добавьте библиотеку sqlite-jdbc-3.8.7.jar, используя команду Добавить JAR / Папка ...

Используйте Clean and Build для сборки проекта (создает папку dist и библиотеку копий)

Сделать баночку с помощью: http://www.oracle.com/technetwork/articles/javase/single-jar-141905.html

2 голосов
/ 28 июня 2011

Другим хорошим вариантом для рассмотрения может быть дерби, javadb.Теперь он в комплекте с Java, довольно быстро настраивается и имеет хорошие характеристики.

С уважением, Стефан

...