java swing sqlite executable-jar

java - ¿Cómo incluir la base de datos SQLite en el archivo jar ejecutable?



swing executable-jar (3)

Creé una aplicación Swing que usa SQLite como una base de datos local. El archivo de la base de datos se encuentra en el directorio raíz del proyecto.

Project/DatabaseFile

La aplicación funciona bien en Eclipse, pero cuando ejecuto el archivo ejecutable Jar, aparece el siguiente error:

No such table : table1

Esto significa que la base de datos no es alcanzable. Cuando examiné el contenido del archivo JAR resultante, el archivo de la base de datos ya no estaba allí.

En el código, he vinculado la base de datos de la siguiente manera:

jdbc:sqlite:DatabaseFile

Mi pregunta es, ¿cómo incluir la base de datos SQLite en el archivo jar ejecutable?

EDITAR

Cuando coloqué el archivo DB en el Project/src/DatabaseFile Folder Project/src/DatabaseFile y cambié la ruta a jdbc:sqlite:src/DatabaseFile , funcionó en Eclipse pero nuevamente cuando java -jar Project.jar archivo Jar como java -jar Project.jar . Decía:

path to ''src/DatabaseFile'': ''C:/Users/name/src'' does not exist

Creo que necesito especificar una ruta relativa para la base de datos.

EDITAR

Así es como me conecto a la base de datos:

public Connection getConnection(){ try{ Class.forName("org.sqlite.JDBC").newInstance(); con = DriverManager.getConnection("jdbc:sqlite:src/DatabaseFile"); } catch (Exception e) { Log.fatal("Méthode: getConnection() | Class : SQLiteConnection | msg system : " + e.getMessage()); } return con; }


¿Qué biblioteca estás usando para SQLite?

Hice una búsqueda basada en el URI de conexión que indicó y encontré este . En la documentation dice:

2009 19 de mayo: lanzamiento sqlite-jdbc-3.6.14.1. Esta versión es compatible con la sintaxis "jdbc: sqlite :: resource:" para acceder a archivos de base de datos de solo lectura contenidos en archivos JAR, o recursos externos especificados a través de URL, dirección de archivos locales, etc. (ver también los detalles)

Si ese es el controlador que está utilizando, sugeriría el siguiente URI de conexión:

"jdbc:sqlite::resource:DatabaseFile"

La clave es que dado que su base de datos está en un archivo jar, no se puede acceder como un archivo con FileInputStream . En su lugar, se debe acceder a través de la compatibilidad de la JVM (es decir, con Class.getResource() o Class.getResourceAsStream() ). Tenga en cuenta que los recursos contenidos en los archivos jar son de solo lectura. No podrá guardar ningún cambio en su base de datos.


Encontré la solución. Debería CREAR tabla en la base de datos después de connectiom. Me gusta esto en tu clase con conexión.

public void createDb() throws SQLException { Statement statement = connection.createStatement(); PreparedStatement preparedStatement = connection.prepareStatement("CREATE TABLE IF NOT EXISTS threads `your table`; preparedStatement.executeUpdate(); preparedStatement.close(); }

Porque cuando el programa compila en jar no crea automáticamente la tabla en databse.

Entonces, antes que nada, debes obtener conexión y crear una tabla si no existe así:

Connect connect = new Connect(); connect.getConnection(); connect.createDb(); connect.closeConnection();


He encontrado dos formas diferentes de nombrar el archivo en función de cómo intenta acceder a él. Suponiendo que está accediendo a la base de datos se encuentra en / suproyecto / recurso / o / suproyecto / bin / recurso (no lo ha reducido, el mío está en ambos y estoy contento con él) debe utilizar esto como su ruta:

//Eclipse test path String url = "jdbc:sqlite:resource/mydb.db";

o

//runnable jar path String url = "jdbc:sqlite::resource:mydb.db";

entonces

mysqlitedatasource.setUrl(url);

Tu manera también funciona ... poniendo el db en / src