xiao_in 2024-04-24 23:34 采纳率: 0%
浏览 18

jdbc 访问 orcale 报错 The Network Adapter could not establish the connection

使用Java jdbc 方式连接orcale数据库,一直报错
java.sql.SQLRecoverableException: IO 错误: The Network Adapter could not establish the connection
Connection timed out: connect, socket connect lapse 21003 ms.

img

可是使用python连接又能正常访问,真的很费解。

  • 写回答

6条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-24 23:34
    关注

    引自免费微信小程序:皆我百晓生

    看起来你在尝试使用 Java JDBC 连接 Oracle 数据库时遇到了问题。这个错误通常意味着 Java 应用程序在尝试建立网络连接到数据库服务器时超时了。这里有几个可能的原因以及相应的解决步骤:

    1. 检查防火墙设置: 确保防火墙没有阻止从 Java 应用程序到 Oracle 数据库的连接。如果你在企业环境中,可能需要 IT 部门协助检查防火墙规则。

    2. 确认数据库服务器地址和端口: 检查你的 Java 连接字符串是否正确指定了数据库服务器的 IP 地址和端口号。例如,正确的格式可能是这样的:

      String url = "jdbc:oracle:thin:@//<database_host>:<port>/<service_name>";
      

      <database_host> 替换为实际的数据库服务器 IP 或域名,<port> 为 Oracle 的默认端口(通常是 1521),<service_name> 是数据库的服务名(如果使用 SID,则是 sid_name)。

    3. 验证网络连通性: 使用 ping 命令检查 Java 虚拟机与数据库服务器之间的网络连通性。在命令行运行:

      ping <database_host>
      
    4. 测试数据库服务状态: 在数据库服务器上确保 Oracle 服务正在运行,并且监听器正在监听指定的端口。可以使用 SQL*Plus 登录数据库服务器并执行以下命令:

      LSNRCTL> status
      

      如果监听器有问题,修复它。

    5. 检查 TNS 名称配置: 确认你的客户端机器上的 TNS 名称 (tnsnames.ora) 文件包含了正确的数据库连接信息。这个文件通常位于 $ORACLE_HOME/network/admin 目录下。示例配置如下:

      <service_name> =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = TCP)(HOST = <database_host>)(PORT = <port>))
          (CONNECT_DATA =
            (SERVER = DEDICATED)
            (SERVICE_NAME = <service_name>)
          )
        )
      
    6. 调整超时设置: 在 Java 连接字符串中增加超时参数,允许更长的连接时间。例如:

      String url = "jdbc:oracle:thin:@//<database_host>:<port>/<service_name>?connectTimeout=30000&readTimeout=30000";
      
    7. JDBC 驱动版本: 确保使用的 JDBC 驱动程序与 Oracle 数据库兼容。过时的驱动可能导致连接失败。

    8. Python 连接成功的对比分析: 分析 Python 连接代码,看看是否有特殊的配置项或设置可以帮助你解决 Java 连接问题。

    现在,让我们创建一个简单的 Java 示例来连接 Oracle 数据库,确保所有必要的依赖项已添加到项目中(例如:ojdbc8.jar)。如果你使用的是 Maven,将以下依赖添加到 pom.xml 中:

    <dependencies>
        <dependency>
            <groupId>com.oracle.database.jdbc</groupId>
            <artifactId>ojdbc8</artifactId>
            <version>19.12.0.0</version>
        </dependency>
    </dependencies>
    

    然后创建一个简单的 Java 类来连接数据库:

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    
    public class OracleConnect {
        public static void main(String[] args) {
            String url = "jdbc:oracle:thin:@//<database_host>:<port>/<service_name>";
            String user = "<username>";
            String password = "<password>";
    
            try (Connection conn = DriverManager.getConnection(url, user, password)) {
                System.out.println("Connected to the database!");
            } catch (SQLException e) {
                System.err.format("SQL State: %s\n%s", e.getSQLState(), e.getMessage());
            }
        }
    }
    

    <database_host><port><service_name><username><password> 替换成实际值。如果仍然遇到问题,请提供详细的异常堆栈跟踪,以便更好地诊断问题。

    如果你需要进一步的帮助,请提供更多信息,比如你的 Java 连接代码、TNS 名称配置文件、数据库服务器环境等。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月24日

悬赏问题

  • ¥15 有偿求苍穹外卖环境配置
  • ¥15 代码在keil5里变成了这样怎么办啊,文件图像也变了,
  • ¥20 Ue4.26打包win64bit报错,如何解决?(语言-c++)
  • ¥15 clousx6整点报时指令怎么写
  • ¥30 远程帮我安装软件及库文件
  • ¥15 关于#自动化#的问题:如何通过电脑控制多相机同步拍照或摄影(相机或者摄影模组数量大于60),并将所有采集的照片或视频以一定编码规则存放至规定电脑文件夹内
  • ¥20 深信服vpn-2050这台设备如何配置才能成功联网?
  • ¥15 Arduino的wifi连接,如何关闭低功耗模式?
  • ¥15 Android studio 无法定位adb是什么问题?
  • ¥15 C#连接不上服务器,