【现场问题】oracle 11g 和12c 使用jdbc链接,兼容的问题

oracle不同版本

问题是什么

项目上建立Oracle数据源,以前大部分都是,11g的版本,测试包括获取表以及字段都没有问题,后来新的现场,多了一种oracle的版本12c,这个版本的数据库一直显示无法链接。

如图:

Caused by: oracle.net.ns.NetException: Listener refused the connection with the following error:

ORA-12514, TNS:listener does not currently know of service requested in connect descriptor

(CONNECTION_ID=ZQApaCNVQcuxVuA+hzvDew==)

寻找解决方式

首先Oracle的jdbc链接有几种形式?

Oracle 11g的链接是什么呢

java 复制代码
String jdbcUrl = "jdbc:oracle:thin:@hostname:port:SID";
String jdbcUrl = "jdbc:oracle:thin:@localhost:1521:ORCL";
String jdbcUrl = "jdbc:oracle:thin:@//hostname:port/service_name";
String jdbcUrl = "jdbc:oracle:thin:@//localhost:1521/ORCL";

Oracle 12C的链接是什么呢

java 复制代码
String jdbcUrl = "jdbc:oracle:thin:@hostname:port:SID";
String jdbcUrl = "jdbc:oracle:thin:@localhost:1521:ORCL";

我的代码是哪种!?

发现问题没

我的代码使用的是两种带着斜杠的这种写法

String jdbcUrl = "jdbc:oracle:thin:@//hostname:port/service_name";

所以oracle 12c 通过不了

解决问题

只要使用oracle 11g和12c 都可以用的方式即可!

代码

java 复制代码
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class OracleJDBCExample {
    public static void main(String[] args) {
        // JDBC连接参数
        String jdbcUrl = "jdbc:oracle:thin:@localhost:1521:ORCL"; // 数据库连接字符串,格式为 jdbc:oracle:thin:@host:port:SID
        String username = "XXX"; // 您的数据库用户名
        String password = "XXX"; // 您的数据库密码

        Connection connection = null;
        Statement statement = null;
        ResultSet resultSet = null;

        try {
            // 注册Oracle JDBC驱动程序
            Class.forName("oracle.jdbc.OracleDriver");

            // 建立数据库连接
            connection = DriverManager.getConnection(jdbcUrl, username, password);

            // 创建Statement对象用于执行SQL查询
            statement = connection.createStatement();

            // 执行SQL查询
            String sqlQuery = "SELECT * FROM your_table";
            resultSet = statement.executeQuery(sqlQuery);

            // 处理查询结果
            while (resultSet.next()) {
                // 从结果集中获取数据,例如:
                int id = resultSet.getInt("id");
                String name = resultSet.getString("name");

                // 在这里处理数据
                System.out.println("ID: " + id + ", Name: " + name);
            }

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            System.err.println("无法找到Oracle JDBC驱动程序,请确保驱动程序在类路径中。");
        } catch (SQLException e) {
            e.printStackTrace();
            System.err.println("数据库连接或查询失败。");
        } finally {
            try {
                // 关闭ResultSet、Statement和Connection
                if (resultSet != null) resultSet.close();
                if (statement != null) statement.close();
                if (connection != null) connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}
相关推荐
Ai 编码助手18 分钟前
MySQL中distinct与group by之间的性能进行比较
数据库·mysql
陈燚_重生之又为程序员33 分钟前
基于梧桐数据库的实时数据分析解决方案
数据库·数据挖掘·数据分析
caridle35 分钟前
教程:使用 InterBase Express 访问数据库(五):TIBTransaction
java·数据库·express
白云如幻36 分钟前
MySQL排序查询
数据库·mysql
萧鼎38 分钟前
Python并发编程库:Asyncio的异步编程实战
开发语言·数据库·python·异步
^velpro^40 分钟前
数据库连接池的创建
java·开发语言·数据库
荒川之神1 小时前
ORACLE _11G_R2_ASM 常用命令
数据库·oracle
IT培训中心-竺老师1 小时前
Oracle 23AI创建示例库
数据库·oracle
小白学大数据1 小时前
JavaScript重定向对网络爬虫的影响及处理
开发语言·javascript·数据库·爬虫
time never ceases2 小时前
使用docker方式进行Oracle数据库的物理迁移(helowin/oracle_11g)
数据库·docker·oracle