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

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 documentación dice:

2009 19 de mayo: lanzamiento sqlite-jdbc-3.6.14.1. Esta versión es compatible con la syntax “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.

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

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 progtwig comstack 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();