мы извлекаем данные из разных типов баз данных (Oracle, MySQL, SQL-Server,...). Как только он будет успешно записан в файл, мы хотим пометить его как переданный, поэтому мы обновляем конкретный столбец.
Наша проблема заключается в том, что пользователь имеет возможность изменять данные за это время, но может забыть совершить. Запись блокируется с помощью инструкции select for update. Так может случиться, что мы отмечаем что-то переданное, а это не так.
Это выдержка из нашего кода:
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
ResultSet extractedData = stmt.executeQuery(sql);
writeDataToFile(extractedData);
extractedData.beforeFirst();
while (extractedData.next()) {
if (!extractedData.rowUpdated()) {
extractedData.updateString("COLUMNNAME", "TRANSMITTED");
// code will stop here if user has changed data but did not commit
extractedData.updateRow();
// once committed the changed data is marked as transmitted
}
}
Метод extractedData.rowUpdated()
возвращает false, потому что технически пользователь еще ничего не изменил.
Есть ли способ не обновить строку и определить, были ли данные изменены на этом позднем этапе?
К сожалению, я не могу изменить программу, которую пользователь использует для изменения данных.