【现场问题】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();
            }
        }
    }
}
相关推荐
亦世凡华、8 分钟前
MySQL--》如何在MySQL中打造高效优化索引
数据库·经验分享·mysql·索引·性能分析
YashanDB11 分钟前
【YashanDB知识库】Mybatis-Plus调用YashanDB怎么设置分页
数据库·yashandb·崖山数据库
ProtonBase21 分钟前
如何从 0 到 1 ,打造全新一代分布式数据架构
java·网络·数据库·数据仓库·分布式·云原生·架构
云和数据.ChenGuang6 小时前
Django 应用安装脚本 – 如何将应用添加到 INSTALLED_APPS 设置中 原创
数据库·django·sqlite
woshilys6 小时前
sql server 查询对象的修改时间
运维·数据库·sqlserver
Hacker_LaoYi6 小时前
SQL注入的那些面试题总结
数据库·sql
建投数据7 小时前
建投数据与腾讯云数据库TDSQL完成产品兼容性互认证
数据库·腾讯云
Hacker_LaoYi8 小时前
【渗透技术总结】SQL手工注入总结
数据库·sql
岁月变迁呀8 小时前
Redis梳理
数据库·redis·缓存
独行soc8 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍06-基于子查询的SQL注入(Subquery-Based SQL Injection)
数据库·sql·安全·web安全·漏洞挖掘·hw