package org.openlca.io.refdata; import java.sql.ResultSet; import java.sql.SQLException; import java.util.concurrent.atomic.AtomicInteger; import org.openlca.core.database.IDatabase; import org.openlca.core.database.NativeSql; import org.supercsv.io.CsvListWriter; public class ImpactCategoryExport extends AbstractExport { @Override protected void doIt(final CsvListWriter writer, IDatabase database) throws Exception { log.trace("write impact categories"); String query = "select c.ref_id, c.name, c.description, c.reference_unit, " + "m.ref_id from tbl_impact_categories c join tbl_impact_methods m " + "on c.f_impact_method = m.id"; final AtomicInteger count = new AtomicInteger(0); NativeSql.on(database).query(query, new NativeSql.QueryResultHandler() { @Override public boolean nextResult(ResultSet resultSet) throws SQLException { return writeLine(resultSet, writer, count); } }); log.trace("{} impact categories written", count.get()); } private boolean writeLine(ResultSet resultSet, final CsvListWriter writer, final AtomicInteger count) { try { Object[] line = createLine(resultSet); writer.write(line); count.incrementAndGet(); return true; } catch (Exception e) { log.error("failed to write line", e); return false; } } private Object[] createLine(ResultSet resultSet) throws SQLException { Object[] line = new Object[5]; line[0] = resultSet.getString(1); line[1] = resultSet.getString(2); line[2] = resultSet.getString(3); line[3] = resultSet.getString(4); line[4] = resultSet.getString(5); return line; } }