如何使用具有读/写访问权限的SQLite数据库部署javafx应用程序

时间:2015-08-29 13:35:53

标签: java sqlite javafx-8

我创建了一个javafx应用程序,并为用户进行了安装。

我按照oracle doc进行打包和安装,我自定义了配置文件,允许用户选择他想要安装应用程序的目录。

所以,我希望有这样的场景:无论用户选择在哪里安装应用程序,他都能够写入数据库。

问题是:如何在共享系统文件夹中部署SQLite数据库?

提前感谢您的建议

1 个答案:

答案 0 :(得分:2)

如何将其保存到用户主目录?他应该有足够的权限来读/写它。您可以通过System.getProperty("user.home");

向Java请求用户回家

编辑:JDBC解决方案

您可以在JDBC连接字符串中使用jdbc:sqlite:filename.db在应用程序中创建SQLite DB。这将在当前目录中创建它,因此而不是filename.db使用类似

的内容
String filePath = System.getProperty("user.home")+System.getProperty("file.separator")+"myDBfile.db";
Connection  connection = DriverManager.getConnection("jdbc:sqlite:"+filePath);

这将创建与位于当前用户的主目录中的DB文件的连接。如果文件不存在,它将创建它。 现在的问题是,这个DB文件是空的。我认为你有更多的可能性来处理它。例如,使用CREATE TABLE IF NOT EXISTS table_name(..)

用户安装应用程序的位置并不重要,因为DBs路径设置为他的主页而不是工作目录,应用程序将始终在那里查找。

编辑:JPA解决方案

一般的想法是覆盖persistence.xml中的url属性。这可以通过在创建EntityManagerFactory时将属性映射提供给Persistence.createEntityManagerFactory()来完成。非常好的例子是here

以下示例代码应创建EMF,以便在用户主页中使用数据库(filePath的定义与上面相同)。

Map<String, String> persistenceMap = new HashMap<String, String>();
persistenceMap.put("javax.persistence.jdbc.url", "jdbc:sqlite:" + filePath);
EntityManagerFactory managerFactory = Persistence.createEntityManagerFactory("MyPU", persistenceMap);