当前位置: 首页 > 知识库问答 >
问题:

如何使用JDBC瘦驱动和Oracle钱包连接到Oracle Cloud DDBB

周墨一
2023-03-14

我正在遵循使用IDE IntelliJ从java应用程序连接到Oracle云数据库的指南。

我满足先决条件,因为:

  • 我在Oracle云服务中有一个数据库
  • 下载了钱包,并将文件放在工作区的src目录中。
  • 我使用的是最后一个JDK 14
  • 我正在使用OJDBC8.jar
  • 并且我还下载了oraclepki、osdt_cert和osdt_core JAR,所有这些JAR都作为java库添加到我的测试项目中
DB_URL= "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(HOST=testgerard_high)(PORT=1521)(PROTOCOL=tcp))(CONNECT_DATA=(SERVICE_NAME=testgerard_high)))"

然后我在Oracle支持中发现,它可以添加到钱包目录中,但同样的问题。

DB_URL= "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(HOST=testgerard_high)(PORT=1521)(PROTOCOL=tcp))(CONNECT_DATA=(SERVICE_NAME=testgerard_high))(SECURITY = (MY_WALLET_DIRECTORY = src\\Wallet_testGerard)))"

如果我使用18.3JDBC驱动程序切换到一个连接字符串,它应该适用于我的设置,那么我会得到错误:无效的连接字符串格式,有效的格式是:“host:port:sid”

DB_URL="jdbc:oracle:thin:@testgerard_high?TNS_ADMIN=src\\Wallet_testGerard";

最后,我在这里看到了一种将钱包文件夹通知出BD_URL的方法,这样我就不会得到无效格式异常:

System.setProperty("oracle.net.tns_admin","src\\Wallet_testGerard");

我修改了一个oracle示例,下面是我的代码:

import java.sql.SQLException;
import java.sql.DatabaseMetaData; 
import oracle.jdbc.pool.OracleDataSource;
import oracle.jdbc.OracleConnection;


public class OracleDataSourceSample
{
    final static String DB_URL="jdbc:oracle:thin:@testgerard_high";
    //final static String DB_URL="jdbc:oracle:thin:@testgerard_high?TNS_ADMIN=src\\Wallet_testGerard";
    //final static String DB_URL= "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(HOST=testgerard_high)(PORT=1521)(PROTOCOL=tcp))(CONNECT_DATA=(SERVICE_NAME=testgerard_high))(SECURITY = (MY_WALLET_DIRECTORY = src\\Wallet_testGerard)))";

    final static String DB_USER = "hr";
    final static String DB_PASSWORD = "hr";

    public static void main (String args[]) throws SQLException, ClassNotFoundException {

        System.setProperty("oracle.net.tns_admin","src\\Wallet_testGerard");
        Class.forName("oracle.jdbc.driver.OracleDriver");
        OracleDataSource ods = new OracleDataSource();
        ods.setURL(DB_URL);
        ods.setUser(DB_USER);
        ods.setPassword(DB_PASSWORD);

        // With AutoCloseable, the connection is closed automatically.
        try (OracleConnection connection = (OracleConnection)
                ods.getConnection()) {
            // Get the JDBC driver name and version
            DatabaseMetaData dbmd = connection.getMetaData();
            System.out.println("Driver Name: " + dbmd.getDriverName());
            System.out.println("Driver Version: " +
                    dbmd.getDriverVersion());
            System.out.println("Database Username is: " +
                    connection.getUserName());
        }
    }
}

共有1个答案

索卓
2023-03-14

使用独立的jdk 8和jdk 14以及Intellij Community edition(第一次运行防火墙阻止Intellij)进行测试。

    import java.io.IOException;
    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.Properties;
    import oracle.jdbc.pool.OracleDataSource;
    import oracle.jdbc.OracleConnection;
    import java.sql.DatabaseMetaData;
    
    
    public class SalesConnection
    {
        final static String DB_URL="jdbc:oracle:thin:@oci_adw_high";
        final static String DB_USER = "xxxx";
        final static String DB_PASSWORD = "xxxxx";
    
        public static void main (String args[]) throws SQLException, ClassNotFoundException {
    
    
             System.setProperty("oracle.net.tns_admin","C:\\app\\oracle\\product\\19\\dbhome_1\\network\\admin");
             System.setProperty("oracle.jdbc.fanEnabled","false");
    
            Class.forName("oracle.jdbc.driver.OracleDriver");
            OracleDataSource ods = new OracleDataSource();
            ods.setURL(DB_URL);
            ods.setUser(DB_USER);
            ods.setPassword(DB_PASSWORD);
    
            // With AutoCloseable, the connection is closed automatically.
            try (OracleConnection connection = (OracleConnection)
                    ods.getConnection()) {
                // Get the JDBC driver name and version
                DatabaseMetaData dbmd = connection.getMetaData();
                System.out.println("Driver Name: " + dbmd.getDriverName());
                System.out.println("Driver Version: " +
                        dbmd.getDriverVersion());
                System.out.println("Database Username is: " +
                        connection.getUserName());
                printSales(connection);
            }
        }
    
        public static void printSales(Connection connection) throws SQLException {
            // Statement and ResultSet are AutoCloseable and closed automatically.
            try (Statement statement = connection.createStatement()) {
              try (ResultSet resultSet = statement
                  .executeQuery("select /* Java Console */PROD_ID, CUST_ID from sales fetch first 10 rows only ")) {
                System.out.println("PROD_ID" + "  " + "CUST_ID");
                System.out.println("---------------------");
                while (resultSet.next())
                  System.out.println(resultSet.getString(1) + " "
                      + resultSet.getString(2) + " ");
              }
            }
          }
}

尝试运行此代码更改表和列名

此代码的来源

javac -cp "C:\ojdbc8-full\*;" SalesConnection.java

java -cp "C:\ojdbc8-full\*;" SalesConnection
 类似资料:
  • 基于Oracle文档,我创建了一个钱包 添加凭证 在我的java应用程序中,我想通过这个钱包连接到数据库 但我不知道如何填充连接字符串。我不想使用tnsnames。谢谢

  • 我使用的是Java8、Spark 2.1.1、Ignite2.5和BoneCP 0.8.0 结果出现以下异常: 提交脚本如下所示: 当使用“本地”Spark实例时,它使用think JDBC驱动程序连接到Ignite。有什么想法吗?

  • 我正在尝试在我的本地tomcat服务器中部署一个基于Spring的Web应用程序。以下是我的申请详情: > 基于Spring的web应用程序(war) Tomcat 6服务器 Java 1.6 Oracle数据库 以下是按jdbc配置列出的: 配置仅适用于雄猫设置。 我还在我的 /lib 文件夹中添加了 ojdbc6.jar,ojdbc14.jar 我毫无问题地部署了我的war文件。但是当我的应用

  • 我试图建立一个SSL连接到赛贝斯ASE 15.7使用JDBC驱动程序没有运气。我尝试了以下选项: > 使用JTDS 1.25驱动程序(jtds-1.2.5.jar) 使用以下连接字符串: 我收到 使用jconnect4(jconn4.jar) 使用以下连接字符串: jdbc:sybase:Tds:host:port/dbname?ENABLE_SSL=true 我得到了

  • 我们有一个使用Oracle 19.3数据库运行的项目,以及一个使用Oracle 19.3 JDBC驱动程序(在Maven Central上可用)的Java应用程序。在带有JRE1.8的Windows上,一切都很好,但当我运行在构建服务器上或在带有OpenJDK11.0.3的WSL Ubuntu中时,它拒绝连接到数据库。具体地说: 如果切换到18.3JDBC驱动程序,在这两种环境中一切都很好;如果我

  • 问题内容: 文件包含和及其说明(+ )。 是否可以依靠上述文件建立连接?(仅提供数据库名称即可): 为了找到该文件,我必须知道默认的Oracle主目录,我需要在Windows注册表中检入然后具有所有文件,然后检查哪个文件首先出现在上。有没有办法在客户端计算机上自动找到此文件? 问题答案: 我什至不知道可以在瘦驱动程序中使用tnsnames,但是显然它是在版本10中添加的: http://docs.