如何使用 JDBC 连接到 Oracle 数据库 [重复]

Posted

技术标签:

【中文标题】如何使用 JDBC 连接到 Oracle 数据库 [重复]【英文标题】:How to connect to Oracle Database with JDBC [duplicate] 【发布时间】:2021-11-11 06:34:33 【问题描述】:

我正在使用 Eclipse 连接到远程数据库,详细信息如下:

名称:MSbdd** 主机名 155.158.xxx.xx 端口:1521 SID:olt*****

认证类型:默认

用户名:msbd** 密码:haslo****

这是我在 Eclipse 中的代码:

package net.codejava;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class JavaOracleTest 

    public static void main(String[] args) 
        String dbURL = "jdbc:oracle:thin:@localhost:1521:xe";
        String username = "msbd**";
        String password = "haslo****";
        
        try 
            Connection connection = DriverManager.getConnection(dbURL, username, password);
            System.out.println("Połączono z serwerem Oracle");
         catch (SQLException e) 
            System.out.println("Error");
            e.printStackTrace();
        

    


这是我得到的错误:

java.sql.SQLRecoverableException: IO Error: The Network Adapter could not establish the connection (CONNECTION_ID=yV+3U5v4TK2js7gMFTixxA==)
Error
    at oracle.jdbc.driver.T4CConnection.handleLogonNetException(T4CConnection.java:882)
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:687)
    at oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:1086)
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:90)
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:728)
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:649)
    at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:677)
    at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:228)
    at net.codejava.JavaOracleTest.main(JavaOracleTest.java:15)
Caused by: oracle.net.ns.NetException: The Network Adapter could not establish the connection (CONNECTION_ID=yV+3U5v4TK2js7gMFTixxA==)
    at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:677)
    at oracle.net.resolver.AddrResolution.resolveAndExecute(AddrResolution.java:568)
    at oracle.net.ns.NSProtocol.establishConnection(NSProtocol.java:953)
    at oracle.net.ns.NSProtocol.connect(NSProtocol.java:350)
    at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:2155)
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:652)
    ... 7 more
Caused by: java.io.IOException: Connection refused: connect, socket connect lapse 2003 ms. localhost 1521  0 (2/2) true
    at oracle.net.nt.TcpNTAdapter.establishSocket(TcpNTAdapter.java:421)
    at oracle.net.nt.TcpNTAdapter.doLocalDNSLookupConnect(TcpNTAdapter.java:303)
    at oracle.net.nt.TcpNTAdapter.connect(TcpNTAdapter.java:265)
    at oracle.net.nt.ConnOption.connect(ConnOption.java:238)
    at oracle.net.nt.ConnStrategy.executeConnOption(ConnStrategy.java:902)
    at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:638)
    ... 12 more
Caused by: java.net.ConnectException: Connection refused: connect
    at java.base/sun.nio.ch.Net.connect0(Native Method)
    at java.base/sun.nio.ch.Net.connect(Net.java:482)
    at java.base/sun.nio.ch.Net.connect(Net.java:474)
    at java.base/sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:694)
    at java.base/java.nio.channels.SocketChannel.open(SocketChannel.java:194)
    at oracle.net.nt.TimeoutSocketChannel.connect(TimeoutSocketChannel.java:184)
    at oracle.net.nt.TimeoutSocketChannel.<init>(TimeoutSocketChannel.java:158)
    at oracle.net.nt.TcpNTAdapter.establishSocket(TcpNTAdapter.java:380)
    ... 17 more

我用 * 替换了一些细节,因为它是学校的数据库。

【问题讨论】:

在您的问题中,您声明主机名是155.158.xxx.xx,但在您的网址中您使用localhost,这显然不会起作用。将localhost 替换为155.158.xxx.xx 【参考方案1】:

你的错误是:

Caused by: java.net.ConnectException: Connection refused: connect

检查您是否有:

正确的主机名。

例如,您说主机名是155.158.xxx.xx,但您正在使用:

String dbURL = "jdbc:oracle:thin:@localhost:1521:xe";

应该是:

String dbURL = "jdbc:oracle:thin:@155.158.xxx.xx:1521:xe";

正确的端口。

正确的 SID。

例如,应该是:

String dbURL = "jdbc:oracle:thin:@155.158.xxx.xx:1521:olt*****";

正确的用户名和密码。

访问数据库。

即您在可以访问服务器的网络上运行它,而不是从无法访问服务器的网络上运行它(您的学校可能要求您直接连接到或登录到他们的网络才能访问服务器,并且可能会拒绝来自未经身份验证的用户的连接在他们的网络之外)。

【讨论】:

以上是关于如何使用 JDBC 连接到 Oracle 数据库 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用带有 TNSNames 别名语法的 JDBC 瘦驱动程序连接到 Oracle 数据库

如何使用 jdbc 连接到 oracle

如何使用 JRuby 和 JDBC 连接到 Oracle

Oracle APEX 5.1使用JDBC和查询数据连接到远程数据库

无法使用 JDBC 连接到远程 oracle 数据库

无法使用 19.3 JDBC 驱动程序连接到 Oracle 19.3