Подтвердить что ты не робот

Как использовать базу данных SQLite внутри jar файла?

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

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

Использование Eclipse, кстати.

4b9b3361

Ответ 1

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

С уважением,  Stéphane

Ответ 2

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

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

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

Ответ 3

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

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

sqlite3 .dump

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

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

Ответ 4

Поместите базу данных 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/Папка...

Используйте "Очистить" и "Сборка" для создания проекта (создает папку dist folder und copy library).

Сделайте жирную банку, используя: http://www.oracle.com/technetwork/articles/javase/single-jar-141905.html