Java JDBC和Oracle钱包连接



如何使用oracle钱包

以此为参考。我仍然无法连接到甲骨文钱包。下面的示例代码。

错误

--
java.sql.SQLException: encountered a problem with the Secret Store. Check the wallet location for the presence of an open wallet (cwallet.sso) and ensure that this wallet contains the correct credentials using the mkstore utility: java.io.IOException: oracle.security.crypto.cert.PKCS12.getAuthSafesAsList()Ljava/util/ArrayList;
at oracle.jdbc.driver.PhysicalConnection.getSecretStoreCredentials(PhysicalConnection.java:1314)
at oracle.jdbc.driver.PhysicalConnection.parseUrl(PhysicalConnection.java:1198)
at oracle.jdbc.driver.PhysicalConnection.readConnectionProperties(PhysicalConnection.java:982)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:646)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:428)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:38)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:691)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:270)

--

示例代码

public static void main (String [] args) {
System.out.println("-------- Oracle JDBC Connection Testing ------");
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
System.out.println("Where is your Oracle JDBC Driver?");
e.printStackTrace();
return;
}
System.out.println("Oracle JDBC Driver Registered!");
Connection connection = null;
determineAndSetTnsHome();
try {
connection = DriverManager.getConnection(
"jdbc:oracle:thin:/@xxx");
} catch (SQLException e) {
System.out.println("Connection Failed! Check output console");
e.printStackTrace();
return;
}
if (connection != null) {
System.out.println("You made it, take control your database now!");
} else {
System.out.println("Failed to make connection!");
}
}
private static void determineAndSetTnsHome() {
String tnsAdmin = System.getenv("TNS_ADMIN");
if (tnsAdmin == null) {
String oracleHome = System.getenv("ORACLE_HOME");
if (oracleHome == null) {
return; //failed to find any useful env variables            
}
tnsAdmin = oracleHome + File.separatorChar + "network" + File.separatorChar + "admin";
}
System.setProperty("oracle.net.tns_admin", tnsAdmin);
}

--

笔记

已确认钱包已设置。 - 做sqlplus$xxx连接正常。

-

执行 mkstore -wrl -listCredential 在输入钱包密码后返回条目。

提前谢谢。

你能看看博客了解更多细节吗? 检查您是否正在使用TLSv1.2,并且Oracle钱包需要额外的jar(oraclepki.jar,osdt_core.jar和osdt_cert.jar(

您的钱包可能安装和配置正确,但这并不意味着钱包当前已打开。每当数据库重新启动时,都需要打开钱包。

在 SQL*Plus 中对架构中的已知表运行示例查询(连接是不够的(

如果钱包未打开,您将收到以下错误:

ORA-28365:钱包未打开

此查询应为您提供钱包的状态:

select wrl_type wallet,status,wrl_parameter wallet_location from v$encryption_wallet;

要打开钱包,请运行以下命令,将"myPassword"替换为您选择的密码:

ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "myPassword";

最新更新