我创建了一个javafx应用程序,并为用户进行了安装。
我按照oracle doc进行打包和安装,我自定义了配置文件,允许用户选择他想要安装应用程序的目录。
所以,我希望有这样的场景:无论用户选择在哪里安装应用程序,他都能够写入数据库。
问题是:如何在共享系统文件夹中部署SQLite数据库?
提前感谢您的建议
答案 0 :(得分:2)
如何将其保存到用户主目录?他应该有足够的权限来读/写它。您可以通过System.getProperty("user.home");
编辑: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);