将嵌入式sqlite-db添加到Netbeans项目中
我有以下问题让我忙了一段时间。
我正在Netbeans中构建一个Java项目,我有一个嵌入式sqlite DB,我在这个项目中使用它。
目前DB位于包src/release/
。
我通过以下方式从代码中引用db:
c = DriverManager.getConnection("jdbc:sqlite:src/release/db.db3");
当我从Netbeans内部运行项目时,它没有任何问题。 但是当我尝试构建它并运行创建的jar文件(在dist-folder中)时。
我收到以下错误消息(翻译自荷兰语描述):
打开连接失败:scr / release / db.db3的路径:’C:\ users \ idxxxxx \ Documents \\ dist \ src’不存在
在代码中引用DB时,如下所示:
c = driverManager.getConnection("jdbc:sqlite:db.db3");
并且将db-file添加到output-dir的根目录(因此不在jar本身中),应用程序部分工作,但我的应用程序中缺少一些db-data(空combobox)。
所以似乎也存在问题。
我的问题是:
- 如何在这种情况下添加嵌入式db-sqlite – 在netbeans中添加到我的项目中,这样它将成为我项目的一部分?
- 我应该在哪里放置db-file以及如何从我的项目代码中引用它?
我不希望最终用户在他将收到的文件中看到任何db-file 。
所以如果可能的话,我希望db-file成为.jar的一部分。
TNX
SQLite需要单独的文件,即使不需要更新数据库也是如此。
需要确保锁定并确保数据库ACID属性。
来自.jar里面的SQLite
- SQLite旨在使用直接文件访问。
- SQLite可能需要在某些环境中不可用的其他权限。
可以在开始时将SQLite数据文件从JAR提取到临时位置。
将数据库URL直接写入程序并不是一个好的选择。
getConnection("jdbc:sqlite:src/release/db.db3");
让您的应用程序查找该文件。 如果未找到: error: File db.db3 not found
消息。 然后知道用户,而不是程序出错,但它缺少数据库文件。
由于您正在使用java,因此很容易创建动态URL。
例如"jdbc:sqlite:"+PathToApp +"/data/db.db3"
。
然后应用程序知道在何处复制提取的文件(来自jar的db.db3)。
从.jar中提取SQlite
- 你可以让java为你做这件事。
- 使用
jdbc:sqlite::resource:
- 你需要sqlite-jdbc JAR,所以解压缩JAR文件并添加到应用程序JAR中。
DB文件将被解压缩到临时文件夹System.getProperty(“java.io.tmpdir”)
。
例如
[...] import org.sql.*; import org.sqlite.*; [...] try { Class.forName("org.sqlite.JDBC"); SQLiteConfig config = new SQLiteConfig(); config.enableFullSync(true); config.setReadOnly(false); SQLiteDataSource ds = new SQLiteDataSource(config); ds.setUrl("jdbc:sqlite::resource:"+ getClass().getResource("db.db3").toString()); conn = ds.getConnection(); }catch(SQLException se) { System.out.println("SQLError: "..."); }
更新oct。 2014
org.sqlite SQLiteConfig + SQLiteDataSource
2014年10月8日:sqlite-jdbc-3.8.6.jar更新为sqlite 3.8.6