如何使用 JDBC 连接到 Oracle 数据库

How to connect to Oracle Database with JDBC

我正在使用 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

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

你的错误是:

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*****";
    
  • 正确的用户名和密码。

  • 访问数据库。

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