一旦我使用 JPA 部署了我的应用程序,用户就会选择将它安装在某个地方。然后属性设置为:
<property name="javax.persistence.jdbc.url" value="jdbc:derby:db;create=true"/>
被解释为以下异常:无法在 \db 中创建数据库。在整个开发过程中,它曾经是项目文件夹的相对路径,而不是现在的根目录。我应该怎么做才能使路径保持相对于安装应用程序的文件夹?或者更糟糕的是,userdir。
一旦我使用 JPA 部署了我的应用程序,用户就会选择将它安装在某个地方。然后属性设置为:
<property name="javax.persistence.jdbc.url" value="jdbc:derby:db;create=true"/>
被解释为以下异常:无法在 \db 中创建数据库。在整个开发过程中,它曾经是项目文件夹的相对路径,而不是现在的根目录。我应该怎么做才能使路径保持相对于安装应用程序的文件夹?或者更糟糕的是,userdir。
您应该在某处写入安装位置并将derby.system.home
系统属性设置为该位置,然后再创建连接。引用在桌面应用程序中使用 Java DB文章:
连接到 Java DB 数据库
...
所有连接 URL 都具有以下形式:
jdbc:derby:<dbName>[propertyList]
URL的
dbName
一部分标识一个特定的数据库。数据库可以位于多个位置之一:当前工作目录中、类路径中、JAR 文件中、特定 Java DB 数据库主目录中或文件系统上的绝对位置中。在嵌入式环境中管理数据库位置的最简单方法是设置derby.system.home
系统属性。该属性告诉 Java DB 所有数据库的默认主位置。通过设置此属性,地址簿演示可确保 Java DB 始终找到正确的应用程序数据库。应用程序数据库名为DefaultAddressBook
,它将存在于该derby.system.home
属性指示的目录中。此数据库的连接 URL 如下所示:jdbc:derby:DefaultAddressBook
...
要连接
DefaultAddressBook
数据库,演示必须首先设置derby.system.home
系统属性。该演示使用.addressbook
用户主目录的子目录。使用 System 类找出用户的主目录。然后再次使用该类来设置derby.system.home
属性:private void setDBSystemDir() { // Decide on the db system directory: <userhome>/.addressbook/ String userHomeDir = System.getProperty("user.home", "."); String systemDir = userHomeDir + "/.addressbook"; // Set the db system directory. System.setProperty("derby.system.home", systemDir); }