JDBC:Catch" SQLException:I / O错误:连接重置导致" by" SocketException:连接重置"

时间:2016-04-01 10:02:41

标签: java sql jdbc

我的代码建立JDBC连接并反复查询Microsoft SQL SMS。但是,有时我会收到错误:

  

"线程" main"中的例外情况java.sql.SQLException:I / O错误:连接重置" 后跟"引起:   java.net.SocketException:连接重置"   enter image description here

以下是我的代码:

public static void main(String[] args){
    ...
    // Establish JDBC connection
    Class.forName(DRIVER);
    Connection conn = DriverManager.getConnection(URL, USER, PASS);
    Statement stmt = conn.createStatement(); 
    ...
    // Perform SQL query
    for(int i=0; i<size; i++)
        functionA(stmt); // <--line 62
    ...
}

public static void functionA(Statement stmt){
    String aql = "INSERT INTO...";
    stmt.executeUpdate(sql); // <-- line 105
}

我查询数据库以测试与数据无关的某些功能。因此,我希望我的程序在抛出异常时自动重新建立连接,这样我就可以让它自己运行。

我的问题是: 1)我可以在try ... catch中重新建立JDBC连接吗? 2)如果是这样,捕获哪个例外以及在哪里捕获它? 3)我应该在捕获中放置什么?

1 个答案:

答案 0 :(得分:2)

如果您想捕获问题中列出的异常,则需要捕获SQLException,例如:

  // Perform SQL query
    for(int i=0; i<size; i++) {
        try {
        functionA(stmt); // <--line 62
        } catch(SQLException e) {
          System.out.println(e.getMessage());
          //You can add here your recovery logic ...
        }
    }

是的,你可以尝试在异常之后重新建立连接,在catch块中建立一种重新连接机制......

如果要检查导致SQLException的内部异常,可以使用getCause()检查它:

        } catch(SQLException e) {
          if(e.getCause() instanceof SocketException) {
          //You can add here your recovery logic ...
          }
        }