Пока этот процесс активен, возможно, что пользователи вводят новые данные и по какой-то причине эти новые данные добавляются в наш 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();
}
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... n-selected
Мобильная версия