我有一个与数据库服务器通信的 Java 应用程序。自动提交模式需要设置为 false,因此有一个每秒执行一次提交的计划任务:
如果我的应用程序暂时无法访问此类服务器,我会尽量避免数据丢失。
Connection stableConn = ...;
stableConn.setAutoCommit(false);
//create the task to commit changes every second:
commitTask = new Timer("CommitOnDB");
commitTask.schedule(new TimerTask() {
@Override
public void run() {
boolean exit = false;
//if the connection to DB is lost, loop until it is re-established:
while(!exit) {
try {
stableConn.commit();
exit = true;
} catch (SQLException e) {
exit = !"08007".equals(e.getSQLState());
log.error("Cannot commit statements due to " + e + ";state=" + e.getSQLState(), e);
}
}
}
}, 1000, 1000);
当连接断开时,我试图捕获 08007 SQLState,但无论如何,在循环的第二轮,我得到另一个异常,说明连接已经关闭。
此外,我想要一个适用于不同 DBMS 的代码,如 MS SQL Server、MySQL、Oracle 等。
谁能指出我正确的方向?