如何在persistence.xml中指定相对于应用程序文件夹的jdbc.url?

时间:2010-08-07 14:12:28

标签: java deployment jdbc jpa-2.0 persistence.xml

一旦我使用JPA部署我的应用程序,用户就选择在某处安装它。然后,属性设置为:

<property name="javax.persistence.jdbc.url" value="jdbc:derby:db;create=true"/>

被解释为以下异常: 无法在\ db中创建数据库。 在整个开发过程中,它曾经是项目文件夹的相对路径,而不是现在的根。 我该怎么做才能使路径保持相对于安装应用程序的文件夹? 或者更糟糕的是,用户目录。

1 个答案:

答案 0 :(得分:2)

您应该在某处编写安装位置,并在创建连接之前将derby.system.home系统属性设置为此位置。引用Using Java DB in Desktop Applications文章:

  

连接到Java DB数据库

     

...

     

所有连接网址都包含以下内容   形式:

jdbc:derby:<dbName>[propertyList]
     

网址的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);
}