开发一个小的测试工具,批量执行一堆sql;有时候遇到1~2个sql执行要很长一段时间,程序要卡住很久。现在希望放弃这条sql继续下面一个。
现在在一个class里面放置了一个connection,然后批量从list里面读取sql执行,遇到有异常的就回滚然后重新连接一下connection,执行下一条sql。class里面包含主要执行的main方法。
用的swing做的界面,上面为了体现执行进度条。执行过程是一个new thread。这边用的方法是通过界面上面按钮直接断开connection。但是因为是2个thread,界面手动断开的时候,sql执行thread就会立即执行下面,但是connection还在重连过程中,造成多条sql没有成功执行。
public class Gosql{
public Connection conn;
//主要执行sql的程序
public void executeSql(){
try{
for(String sql:list){
....
}
}cathch(Exception e){
resetConn();
}
....
};
//创建连接
public void createConn(){
....
}
//重新连接
public void resetConn(){
....
}
public static void main(String ar[]){
...
}
}
我尝试用java自带的定时器去调用resetConn方法,可能用的不对,程序会脱离当前主要程序直接终止了。线程觉得也没谱,因为和界面直接点击断开连接一样,不会顾及主程序是否在连接。
还没尝试的是在定时器里面直接抛异常是否会被executeSql 方法捕捉到?
如果中断长时间执行的sql(或者是无法停止的sql【数据库问题】),该怎么办? 不断开connection
------解决思路----------------------
我觉得你这不靠谱吧,SQL语句要是长时间在数据库中执行,没办法终止吧!
------解决思路----------------------
程序的话,没发阻止啊,你不知道sql执行到那一步了.. 如果知道还好,弄个计时器,如果时间超过就执行下一条..