while (true) {
resultset = statement.executeQuery(query);
int count = 0;
while (resultset.next()) {
count = resultset.getInt(1);
}
if (count > curId) {
System.out.println("UPDATE");
String query1 = "SELECT * FROM `db` WHERE id = " + count;
resultset = statement.executeQuery(query1);
// проверка шаг 1 или 2
// Дальше только при шаге 2
int status = 100;
String query2 = "INSERT INTO help (id, status) VALUES (" + count + ", " + status + ")";
statement.executeUpdate(query2);
curId = count;
}
String query3 = "SELECT * FROM help WHERE status = 400";
testResultset = statement.executeQuery(query3);
while (testResultset.next()) { // здесь возникает ошибка после удаления
int id = testResultset.getInt(1);
String query_delete = "DELETE FROM help WHERE id = " + id ;
statement.executeUpdate(query_delete);
}
Thread.sleep(100);
}
Цикл крутиться нормально, но после удаления одного элемента возникает ошибка
java.sql.SQLException: Operation not allowed after ResultSet closed
Проблема заключается в том, как вы извлекаете данные. Каждый раз, когда вы вызываете executeQuery, вы получаете свежий ResultSet, но вы его не закрываете.
http://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html
By default, only one ResultSet object per Statement object can be open at the same time. Therefore, if the reading of one ResultSet object is interleaved with the reading of another, each must have been generated by different Statement objects. All execution methods in the Statement interface implicitly close a statment's current ResultSet object if an open one exists.
По умолчанию одновременно может быть открыт только один объект ResultSet для объекта Statement. Поэтому, если чтение одного объекта ResultSet чередуется с чтением другого, каждый из них должен быть сгенерирован различными объектами Statement. Все методы выполнения в интерфейсе Statement неявно закрывают текущий объект ResultSet, если существует открытый.
Если коротко, то у вас есть несколько ResultSet, относящихся к тому же самому объекту Statement одновременно. И вы его не закрываете.
Вы можете создать другой Statement объект для удаления записи в БД. либо же закрыть RS
Продвижение своими сайтами как стратегия роста и независимости