【问题标题】:Storing JDBC Oracle Wallet in project在项目中存储 JDBC Oracle Wallet
【发布时间】:2020-03-29 16:26:52
【问题描述】:

我一直将我的钱包存储在我项目的资源文件夹中,并且可以在 eclipse 中使用以下字符串访问它

final static String DB_URL = "jdbc:oracle:thin:@db_high?TNS_ADMIN="
    + (Database.class.getClassLoader().getResource("Wallet_DB")
        .getPath().replaceFirst("/",""));

但是,当我将它编译成 jar,然后从命令行运行它时,我收到以下错误:

Exception in thread "main" java.nio.file.InvalidPathException: Illegal
char <:> at index 4:
file:C:/Users/Me/Documents/test.jar!/Wallet_DB\ojdbc.properties

我知道我可以通过将钱包移动到项目外部的我的 jar 文件旁边并使用相对文件路径访问它来解决此问题,但无论如何可以解决此问题,以便我可以将钱包保留在里面罐子?

【问题讨论】:

    标签: java ojdbc oracle-wallet


    【解决方案1】:

    JDBC 只能接受new File(path) 可以访问的路径。所以这里以“file:...”开头的路径是无效的。

    【讨论】:

    • 您能详细说明一下吗? JDBC 用于与数据库通信,所以我对你的回答感到困惑。
    • 那么,既然JDBC可以需要一个有效的文件路径,而且我认为jar里面的文件不能通过文件路径访问,那我就不能把钱包放在jar里面了?
    • @stdunbar 我正在通过反编译器查看 jdbc jar。似乎 TNS_ADMIN=... 之后的路径在 oracle/net/resolver/TNSNamesNamingAdapter.loadFiles() 处处理。此方法使用 File() 从给定路径中查找 tnsnames.ora,这就是发生异常的地方。
    • @criticalbird - 很好的收获。我忘记了 Oracle 拥有 Java 但不知道 Java。
    【解决方案2】:

    TNS_ADMIN 属性用于捕获 tnsnames.ora 文件的绝对路径。所以,尽量使用绝对路径。另外,请注意 windows 和 linux 的文件分隔符。参考DataSourceSample.java

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-29
      • 2014-09-14
      • 2020-10-21
      • 2015-04-20
      • 2012-09-05
      • 1970-01-01
      • 2016-09-24
      • 1970-01-01
      相关资源
      最近更新 更多