【现场问题】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();
            }
        }
    }
}
相关推荐
热爱编程的小曾19 分钟前
sqli-labs靶场 less 8
前端·数据库·less
THRUSTER1111127 分钟前
MySQL-- 函数(单行函数):数值函数, 字符串函数
数据库·mysql·函数·navicat·单行函数
橙序研工坊34 分钟前
MySQL的进阶语法7(索引-B+Tree 、Hash、聚集索引 、二级索引(回表查询)、索引的使用及设计原则
数据库·sql·mysql
Bruce-li__35 分钟前
深入理解Python asyncio:从入门到实战,掌握异步编程精髓
网络·数据库·python
小光学长1 小时前
基于vue框架的智能服务旅游管理系统54kd3(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库
Bonnie_12151 小时前
07-MySQL-事务的隔离级别以及底层原理
数据库·mysql
ETLCloud数据集成社区1 小时前
ETLCloud是如何通过Oracle实现CDC的?
数据库·oracle·etl·实时数据同步
KATA~2 小时前
解决MyBatis-Plus枚举映射错误:No enum constant问题
java·数据库·mybatis
xyliiiiiL2 小时前
一文总结常见项目排查
java·服务器·数据库
shaoing2 小时前
MySQL 错误 报错:Table ‘performance_schema.session_variables’ Doesn’t Exist
java·开发语言·数据库