У меня длительный запрос, который может занять до 10 минут. Чтобы позволить пользователям отменить этот запрос, мне нужно было найти способ прервать ResultSet, который у меня есть:
ResultSetMetaData metaData = rs.getMetaData();
Чтобы проверить, можно ли его отменить, я создаю другой поток
Runnable run = new Runnable() {
@Override
public void run() {
try {
Thread.sleep(10000);
System.out.println("Closing...");
rs.close();
} catch (InterruptedException ex) {
Logger.getLogger(DstDao.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(DstDao.class.getName()).log(Level.SEVERE, null, ex);
}
}
};
run.run();
Когда этот поток закрывает его, я получаю исключение:
Exception Encountered: java.sql.SQLRecoverableException: Closed Resultset: getMetaData
Это работает, но я не хочу использовать исключение для чего-то, что является частью нормального программного потока.
Я спрашиваю, является ли это правильным способом остановить длительный запрос или есть способ отменить его, о котором я не знаю. Это правильный способ сделать это? Есть ли лучший метод? Спасибо!