我的代码建立 JDBC 连接并重复查询 Microsoft SQL SMS。但是,有时我会收到错误:
"Exception in thread "main" java.sql.SQLException: I/O Error: Connection reset" followed by "Caused by: java.net.SocketException: Connection reset"
这是我的代码:
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)我应该在catch中放置什么?
最佳答案
如果您想捕获问题中列出的异常,则需要捕获 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 block 中放置一种重新连接机制......
如果您想检查导致 SQLException 的内部异常,您可以使用 getCause() 进行检查:
} catch(SQLException e) {
if(e.getCause() instanceof SocketException) {
//You can add here your recovery logic ...
}
}
关于java - JDBC:通过 "SQLException: I/O Error: Connection reset caused"捕获 "SocketException: Connection reset",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36353428/