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

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

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

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

4 ответов


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

с уважением, Стефан!--1-->


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

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

удачи в кодировании.


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

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

sqlite3 .dump

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

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


поместите базу данных 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 с помощью Add JAR / Folder ...

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

сделайте fat-jar, используя: http://www.oracle.com/technetwork/articles/javase/single-jar-141905.html