Java连接到OracleDB:java.sql.SQLRecoverableException:IO错误:管道已被切断

时间:2016-08-02 07:49:52

标签: java sql database oracle jdbc

我尝试使用java来使用流动源连接到Oracle DB(11g):

try {
        Class.forName("oracle.jdbc.driver.OracleDriver");
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
        return;
    }

    Connection connection = null;

    try {
        connection = DriverManager.getConnection("jdbc:oracle:thin:@//IP_ADDRESS:1521/SERVCE_NAME", "USER", "PASS");
    } catch (SQLException e) {

        e.printStackTrace();
        return;
    }

它在我的旧数据库上运行良好,但它在新数据库上失败

它无法获得连接,错误是:

  

java.sql.SQLRecoverableException:IO错误:管道已被切断。               在oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:752)               at oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:666)               at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)               at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:566)               在java.sql.DriverManager.getConnection(DriverManager.java:664)               在java.sql.DriverManager.getConnection(DriverManager.java:247)               在main.main(main.java:30)       引起:java.net.SocketException:管道被切断了。               at java.net.SocketOutputStream.socketWrite0(Native Method)               在java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:109)               在java.net.SocketOutputStream.write(SocketOutputStream.java:153)               在oracle.net.ns.DataPacket.send(DataPacket.java:209)               at oracle.net.ns.NetOutputStream.flush(NetOutputStream.java:215)               at oracle.net.ns.NetInputStream.getNextPacket(NetInputStream.java:302)               在oracle.net.ns.NetInputStream.read(NetInputStream.java:249)               在oracle.net.ns.NetInputStream.read(NetInputStream.java:171)               at oracle.net.ns.NetInputStream.read(NetInputStream.java:89)               at oracle.jdbc.driver.T4CSocketInputStreamWrapper.readNextPacket(T4CSocketInputStreamWrapper.java:123)               at oracle.jdbc.driver.T4CSocketInputStreamWrapper.read(T4CSocketInputStreamWrapper.java:79)               at oracle.jdbc.driver.T4CMAREngineStream.unmarshalUB1(T4CMAREngineStream.java:429)               at oracle.jdbc.driver.T4C8TTIdty.receive(T4C8TTIdty.java:706)               at oracle.jdbc.driver.T4C8TTIdty.doRPC(T4C8TTIdty.java:613)               在oracle.jdbc.driver.T4

     

CConnection.connect(T4CConnection.java:1607)                   在oracle.jdbc.driver.T4

     

CConnection.logon(T4CConnection.java:496)               ......还有6个

什么是:java.sql.SQLRecoverableException:IO错误:管道已被切断意味着什么? 请帮我解决这个错误。

提前致谢。

1 个答案:

答案 0 :(得分:0)

  

什么是:java.sql.SQLRecoverableException:IO错误:管道已被切断意味着什么?

这个问题的答案在JavaDoc中给出:

  

如果应用程序执行某些恢复步骤并重试整个事务,或者在分布式事务(事务分支)的情况下,先前失败的操作可能成功的情况下抛出SQLException的子类。恢复操作至少必须包括关闭当前连接并获取新连接。 (Source JavaDoc

主要问题可能是您使用的是错误的Oracle JDBC驱动程序名称。调用正确的驱动程序名称:

oracle.jdbc.OracleDriver

所以用这个替换oracle.jdbc.driver.OracleDriver

连接网址应如下所示:

jdbc:oracle:thin:@IP_ADDRESS:1521/SERVCE_NAME

Here您将找到有关如何使用JDBC驱动程序的更多详细信息。