JDBC ResultSet содержит больше данных, чем выбраноJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 JDBC ResultSet содержит больше данных, чем выбрано

Сообщение Anonymous »

Я выбираю данные из базы данных AS/400 из разных таблиц с помощью индикатора изменения. Затем я экспортирую данные в файл и отмечаю их как экспортированные, обновляя этот индикатор изменений.
Пока этот процесс активен, возможно, что пользователи вводят новые данные и по какой-то причине эти новые данные добавляются в наш ResultSet и также помечаются как экспортированные. Что может вызвать такое поведение?
Вот выдержки из кода:

Код: Выделить всё

stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);

Код: Выделить всё

extractedData = stmt.executeQuery(sql);

Код: Выделить всё

private void writeDataToFile(TableIdentifier table, String tableHeader, ResultSet extractedData,
TableMetaData tableMetaData, Date currentTimestamp) {
BufferedFileWriter bfw = null;
boolean shouldUpdate = true;
try {
logger.info(Message.COLLECTOR_EXPORT_START, table.getName());
ResultSetMetaData rsMetaData = extractedData.getMetaData();
int numberOfColumns = rsMetaData.getColumnCount();
for (ExportConfig config : tableQueueMap.get(table)) {
expDir = WorkDir.getWorkDir(context, applicationDomain + File.separator + EXPDIR + File.separator
+ (config.isSendComplete() ? "complete_" : "") + config.getSendQueue());
String[] qualTable = table.getName().split("\\.");
String tableName = table.getName();
if (qualTable.length > 1) {
tableName = qualTable[1];
}
File exportFile = new File(expDir, tableName);

if (!exportFile.exists()) {
bfw = new BufferedFileWriter(exportFile);
writeHeader(tableHeader, bfw);
} else {
bfw = new BufferedFileWriter(exportFile, true);
}
writeLines(tableName, extractedData, bfw, numberOfColumns);
setTimestamp(table.getName(), currentTimestamp, config);
bfw.close();
if (config.isSendComplete()) {
shouldUpdate = false;
}
}
if (tableMetaData.getUpdate() != null && shouldUpdate) {
extractedData.beforeFirst();
if (tableMetaData.getVersion() != null) {
markDataAsExported(extractedData, tableMetaData);
} else {
markResultSetAsExported(extractedData, tableMetaData);
}
}
tableQueueMap.remove(table);
dataExported = true;
} catch (IOException ex0) {
logger.error(Message.COLLECTOR_EXPORT_FILE_ERROR, table.getName(), ex0.getMessage());
} catch (SQLException ex1) {
logger.error(Message.COLLECTOR_RESULTSET_ERROR, table.getName(), ex1.getMessage());
} catch (WorkDirException ex2) {
logger.error(Message.COLLECTOR_WORKDIR_ERROR, ex2.getMessage());
} finally {
if (bfw != null)
try {
bfw.close();
} catch (IOException e) {
// ignore
}
}
}

Код: Выделить всё

private void markResultSetAsExported(ResultSet extractedData, TableMetaData tableMetaData) throws SQLException {
while (extractedData.next()) {
if (tableMetaData.getUpdateColumnType().equals("N")) {
extractedData.updateInt(tableMetaData.getUpdateColumn(),
Integer.parseInt(tableMetaData.getUpdateValue()));
} else {
extractedData.updateString(tableMetaData.getUpdateColumn(), tableMetaData.getUpdateValue());
}
extractedData.updateRow();
}
}
Когда я отлаживаю код, я вижу, что в ExtractedData.next() в методе markResultSetAsExported набор результатов увеличился, если в него были добавлены новые данные стол.

Подробнее здесь: https://stackoverflow.com/questions/790 ... n-selected
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»