java - JDBC预言机钱包连接

标签 java oracle jdbc oracle-wallet

我在使用 Oracle 钱包作为密码存储将 Java 应用程序连接到 Oracle 数据库时遇到问题。

为了隔离问题,我创建了一个小型主类,如下所示:

public static void main(String[] args) {
Connection conn;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
System.setProperty("oracle.net.tns_admin", "c:\\tns");
OracleDataSource ds = new OracleDataSource();
Properties props = new Properties();
System.setProperty("oracle.net.wallet_location", "c:/wallet2");

ds.setConnectionProperties(props);
ds.setURL("jdbc:oracle:thin:/@XE2");
Provider p;
p = new OraclePKIProvider();
Security.insertProviderAt(p, 3);
conn = ds.getConnection();

} catch (SQLException ex) {
Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);

} catch (ClassNotFoundException ex) {
Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);
}

在目录 c:\tns 中我有以下文件:

sqlnet.ora
tnsnames.ora

这是 sqlnet.ora 的列表

SQLNET.AUTHENTICATION_SERVICES = (NTS)
names.directory_path = TNSNAMES
SQLNET.WALLET_OVERRIDE = TRUE
#WALLET_LOCATION = (SOURCE=(METHOD=FILE)METHOD_DATA=(DIRECTORY=c:\wallet))
WALLET_LOCATION = (SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=c:/wallet)))

tnsnames

...
XE2 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XE)
    )
  )

在c:\wallet2中有以下文件:

cwallet.sso
ewallet.p12

该文件之前是使用 orapki 生成的,并且我的条目名为 XE2,具有正确的凭据。当我运行代码时,出现以下异常

Could not open wallet. java.io.IOException: Could not open wallet. Check password

启用 oracle 跟踪我可以看到这些行:

mar 02, 2017 3:57:00 PM oracle.jdbc.driver.DatabaseError findMessage
TRACE_30:          Enter: "ORA-17168", java.io.IOException: Could not open wallet. java.io.IOException: Could not open wallet. Check password
mar 02, 2017 3:57:00 PM oracle.jdbc.driver.Message11 msg
TRACE_30: 72B6CBCC Enter: "ORA-17168", java.io.IOException: Could not open wallet. java.io.IOException: Could not open wallet. Check password
mar 02, 2017 3:57:00 PM oracle.jdbc.driver.Message11 msg
TRACE_30: 72B6CBCC Exit [0.066509ms]

mar 02, 2017 3:57:00 PM oracle.jdbc.driver.PhysicalConnection getSecretStoreCredentials
GRAVE:          Throwing SQLException: 168java.io.IOException: Could not open wallet. java.io.IOException: Could not open wallet. Check password

有人可以帮助我吗? 谢谢阅读。 r.

最佳答案

这是一个非常古老的话题。 -TNS_ADMIN 应指向钱包位置 ( C:\wallet2 ) -in tnsnames.ora wallet_location 是 C:\wallet2 而不是 c:/walet

关于java - JDBC预言机钱包连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42560669/

相关文章:

Java异常空指针异常错误

java - 开始看到对象堆异常 Java 6

java - Java 8 代码库可以编译并在 Java 6 VM 上运行吗?

Java 骰子游戏生成新数字时遇到问题

oracle - 使用 Spring jdbctemplate 调用 oracle 函数返回游标

java,oracle - 准备好的语句ORA-00936

java - Collection可以用作Hashmap java中的键吗?

java - java和oracle中奇怪的异常问题

java - 如果数据库中的数据类型是数字,如何使用 java 检查它的精度和比例

grails - 当我使用JDBCAppender设置log4j时,Grails抛出ClassNotFoundException