今天做了一个测试:做了一个简单的查询每次都打开关闭数据库连接,循环执行10000次可以达到2000次左右就抛出如下异常:
java.sql.SQLException: Io 异常: The Network Adapter could not establish the connection
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:255)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:387)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:441)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:165)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:801)
at java.sql.DriverManager.getConnection(DriverManager.java:525)
at java.sql.DriverManager.getConnection(DriverManager.java:171)
at com.test.TestMain.closeConn(TestMain.java:31)
at com.test.TestMain.main(TestMain.java:15)
Exception in thread "main" java.lang.NullPointerException
at com.test.TestMain.closeConn(TestMain.java:42)
at com.test.TestMain.main(TestMain.java:15)
用的是本地数据库,监听也开着,这是为什么呢?请好心大侠帮忙解决一下!小弟不胜感激。

解决方案 »

  1.   

    java.lang.NullPointerException检查一下TestMain
      

  2.   

    代码如下:package com.test;import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;public class TestMain { public static void main(String[] args) {

    for(int i = 0; i < 10000; i++) {
    System.out.println(i);
    closeConn();
    }
    }
    public static void closeConn(){
    Connection conn =  null;
    PreparedStatement pstm = null;
    ResultSet rs = null;
    try {
    Class.forName("oracle.jdbc.driver.OracleDriver");
    } catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    try {
    conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "scott", "tiger");
    pstm = conn.prepareStatement("select count(*) from emp");
    rs = pstm.executeQuery();
    while(rs.next()) {
    System.out.println(rs.getInt(1));
    }
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } finally {
    try {
    rs.close();
    pstm.close();
    conn.close();
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    }
    }

    }
      

  3.   

    有点迷糊,是不是建立建接的频率太快?而数据库的设置对其有限制?或者你电脑配置不太好?
    毕竟数据库应该安装在服务器机上的。每使用完一次连接后你加上Thread.sleep(50)中止一下,看是不是你电脑反应不过来造成的?
      

  4.   

    出现这种情况不是程序问题,是oracle的问题,频繁的打开和关闭连接oracle端并不会立刻释放此连接占用的内存资源,当oracle达到最大承受能力时,就会抛出此异常!