Java JDBC和Oracle Wallet Connection

时间:2018-06-11 23:31:40

标签: java oracle jdbc wallet

How to use oracle wallet

使用此作为参考。我仍然无法连接到Oracle Wallet。示例代码如下。

错误

--
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会返回该条目。

提前致谢。

2 个答案:

答案 0 :(得分:0)

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

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

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

  

ORA-28365:钱包未开启

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

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

要打开钱包,请运行以下命令,替换&#34; myPassword&#34;使用您选择的密码:

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

答案 1 :(得分:0)

您可以查看blog了解更多详情吗? 检查您是否使用TLSv1.2,Oracle Wallets需要额外的jar(oraclepki.jar,osdt_core.jar和osdt_cert.jar)