【现场问题】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();
            }
        }
    }
}
相关推荐
菜鸟笔记本1 小时前
linux设置定时备份mysql数据
linux·mysql·oracle
施嘉伟1 小时前
一次生产环境 SQL 不走索引的排查过程
数据库·sql
踏浪无痕1 小时前
SQLInsight:从JDBC底层到API调用的零侵入SQL监控方案
数据库·后端·开源
小宇的天下1 小时前
Calibre nmDRC Results(19-1)
服务器·数据库·oracle
Web项目开发2 小时前
Mysql创建索引的SQL脚本,复制粘贴即可使用
数据库·sql·mysql
晴天¥3 小时前
Oracle如何在DBeaver上进行登录
数据库·oracle
2301_800256113 小时前
事务处理-同步与调度-两阶段锁-隔离级别
数据库·oracle
小罗和阿泽3 小时前
MySql数据库系列 数据库基础操作
数据库·mysql
周末吃鱼3 小时前
mysql8.0支持CURRENT_DATE如何写
数据库·sql·mysql
kaico20183 小时前
MySQL的窗口函数
数据库·mysql