到 Oracle 数据库的 JDBC 连接错误

Posted

技术标签:

【中文标题】到 Oracle 数据库的 JDBC 连接错误【英文标题】:JDBC Connection Error to Oracle Database 【发布时间】:2014-09-02 12:12:25 【问题描述】:

我正在尝试建立从 Java 到 Oracle DB 的连接。 (我的数据库在另一台机器上)

据我所知,URL 的形式是这样的:String url = "jdbc:oracle:thin:@hostname:portnumber:sid";

这是我建立连接的Java代码:

package net.metric.action;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class DemoServlet extends HttpServlet 
    private static final long serialVersionUID = 1L;
    protected void doGet(HttpServletRequest request, HttpServletResponse response)    throws ServletException, IOException 

    response.setContentType("text");
    PrintWriter out = response.getWriter();

    System.out.println("-------- Oracle JDBC Connection Testing ------");

    try 

        Class.forName("oracle.jdbc.driver.OracleDriver");

     catch (ClassNotFoundException e) 

        System.out.println("Where is your Oracle JDBC Driver?");
        e.printStackTrace();
        return;

    
    try
           DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
            //CONNECT TO DB
            String url = "jdbc:oracle:thin:@252.112.60.47:1521:XE";
            System.out.println(url);

            Connection conn = DriverManager.getConnection(url,"EXT02501231","Tellcom30");
              conn.setAutoCommit(false);
               Statement stmt = conn.createStatement();
                System.out.println("OK");

              /* ResultSet rset =
                    stmt.executeQuery("select * from SBO_AUDIT_NEW.AUDIT_EVENT");
               while (rset.next()) 
                    System.out.println (rset.getString(1));
               
               stmt.close();
               System.out.println ("Ok.");*/


    catch(Exception e)
        System.out.println(e.getMessage());
    



protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
    // TODO Auto-generated method stub

我收到此错误:

-------- Oracle JDBC Connection Testing ------
Io exception: The Network Adapter could not establish the connection

我做错了什么?任何答案将不胜感激.. 谢谢

【问题讨论】:

您是否确认您的 oracle 数据库已设置为接受来自本地主机外部的连接? 我希望您示例中的用户名和密码是假的 :-) ping你的远程主机并检查它是否接受远程连接以及为什么你需要注册两次驱动程序? 您是否尝试过 tnsnames.ora 文件中的连接字符串。像 String url = "jdbc:oracle:thin:@(description=(address_list= (address=(protocol=tcp)(port=1521)(host=prodHost)))" 如果您执行tnsping SILAHTARtnsping XE,输出是什么?从出现 JDBC 错误的同一台机器上执行。 【参考方案1】:

有三种方式可以写入 jdbc url。

如果您使用服务名称连接,则应在服务名称之前放置 /

jdbc:oracle:thin:@hostname:port/service_name    --- In your case this is how you need the url

如果你使用 sid 连接,你应该在 sid 之前加上:

jdbc:oracle:thin:@hostname:port:sid

或在@之后使用 tns 文件中的描述

 jdbc:oracle:thin:@(DESCRIPTION=....)

但其中没有一个是您的问题的原因。此错误不是 SQLException。这是 TCP/IP 连接异常。这意味着你无法到达机器。

你能用另一个客户端连接到数据库吗?我看到你正在使用 TOAD。你能连接到蟾蜍吗?您需要确保可以访问服务器。

尝试在命令行上ping机器

 ping 85.29.60.47

如果您收到回复,请在端口上尝试 telnet

telnet 85.29.60.47 1521  -- You must have a telnet client installed to do that.

您可能会看到 ping 或 telnet 失败。所以可能是防火墙问题。您需要做的就是联系网络管理员解决问题。

【讨论】:

我无法从我的机器上 ping 85.29.60.47,并且 toad 没有在我拥有 Oracle DB 的机器上执行。我想这与您提到的防火墙问题有关。非常感谢@gomyes,你的回答对我来说很清楚:)

以上是关于到 Oracle 数据库的 JDBC 连接错误的主要内容,如果未能解决你的问题,请参考以下文章

JDBC连接ORACLE

jdbc连接oracle11g出现ora-12505错误怎么解决?

java使用jdbc连接oracle数据库怎么关闭连接

如何使用JDBC连接oracle数据库

oracle 12c jdbc连接pdb报错的问题

从 Spark 到 Oracle 服务器的 JDBC 连接