--- dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/db/DatabaseLayerImplementation.java 2016/02/01 09:09:31 2898 +++ dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/db/DatabaseCoverageUpdate.java 2016/04/25 08:44:37 3018 @@ -9,21 +9,23 @@ import java.util.List; + import dk.daoas.adressevedligehold.beans.Address; import dk.daoas.adressevedligehold.beans.Address.AddressState; +import dk.daoas.adressevedligehold.tasks.TaskLogger; import dk.daoas.adressevedligehold.util.DeduplicateHelper; import dk.daoas.adressevedligehold.util.TimingHelper; -/* - * TODO: Batched skrivning af updates - * TODO: Skrivning af nye adresser +/* * */ -public class DatabaseLayerImplementation { +public class DatabaseCoverageUpdate { //static boolean DEBUG = false; + private TaskLogger logger = TaskLogger.getInstance(); + public List
getAllAdresses() throws SQLException { TimingHelper timing = new TimingHelper(); @@ -38,7 +40,7 @@ ; try ( Connection conn = DBConnection.getConnection(); - Statement stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY); + Statement stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY); ) { stmt.setFetchSize(Integer.MIN_VALUE); ResultSet res = stmt.executeQuery(sql); @@ -94,25 +96,27 @@ res.close(); - System.out.println("DB Loaded " + list.size() + " adresses in " + timing.getElapsed() + "ms"); + logger.info("DB Loaded " + list.size() + " adresses in " + timing.getElapsed() + "ms"); return list; } } public void saveNewAddresses(List
addresses) { - System.out.println("DB::saveNewAddresses size:" + addresses.size() ); + logger.info("DB::saveNewAddresses size:" + addresses.size() ); String sql = "INSERT IGNORE INTO fulddaekning.adressetabel " + "(vejnavn,husnr,husnrbogstav,kommunekode,vejkode,postnr,gadeid,dbkbane,indlast,aendret,david,googlechecked," + - "RuteMa,KorelisteMa,RuteTi,KorelisteTi,RuteOn,KorelisteOn,RuteTo,KorelisteTo,RuteFr,KorelisteFr,RuteLo,KorelisteLo,RuteSo,KorelisteSo) " + + "RuteMa,KorelisteMa,RuteTi,KorelisteTi,RuteOn,KorelisteOn,RuteTo,KorelisteTo,RuteFr,KorelisteFr,RuteLo,KorelisteLo,RuteSo,KorelisteSo, " + + "kommentar,latitude,longitude) " + "VALUES " + "(?,?,?,?,?,?,?,?, now(), now(), ?, 0, " + - "?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; + "?,?,?,?,?,?,?,?,?,?,?,?,?,?," + + "?,?,?) "; try (Connection con = DBConnection.getConnection()) { - //con.setAutoCommit(false); + try (PreparedStatement stmt = con.prepareStatement(sql)) { for (Address addr : addresses) { @@ -143,11 +147,24 @@ stmt.setString(21, addr.korelisteLordag); stmt.setString(22, addr.ruteSondag); stmt.setString(23, addr.korelisteSondag); + + stmt.setString(24, addr.kommentar); + + if (addr.latitude != 0.0) { + stmt.setDouble(25, addr.latitude); + } else { + stmt.setNull(25, java.sql.Types.DOUBLE); + } + if (addr.longitude != 0.0) { + stmt.setDouble(26, addr.longitude); + } else { + stmt.setNull(26, java.sql.Types.DOUBLE); + } stmt.execute(); if (stmt.getUpdateCount() != 1) { - System.out.println("Error executing insert: " + addr); + logger.info("Error executing insert: " + addr); addr.state = AddressState.CREATE_FAIL; } @@ -156,12 +173,12 @@ //con.commit(); } catch (SQLException e) { - System.out.println("Error inserting addresses" + e.getMessage() ); + logger.warning("Error inserting addresses", e ); } } public void updateAddresses(List
addresses) { - System.out.println("DB::UpdateAddresses size:" + addresses.size() ); + logger.info("DB::UpdateAddresses size:" + addresses.size() ); String sql = "UPDATE fulddaekning.adressetabel " + "SET " + @@ -183,6 +200,8 @@ //con.setAutoCommit(false); try (PreparedStatement stmt = con.prepareStatement(sql)) { + int count = 0; + for (Address addr : addresses) { stmt.setString(1, addr.ruteMandag); stmt.setString(2, addr.korelisteMandag); @@ -202,19 +221,23 @@ stmt.setString(15, addr.distributor); stmt.setInt(16, addr.dbkBane); stmt.setInt(17, addr.id); - - stmt.execute(); - if (stmt.getUpdateCount() != 1) { - System.out.println("Error executing update"); - } + stmt.addBatch(); + count++; + if (count >= 100) { + stmt.executeBatch(); + count = 0; + } } + + stmt.executeBatch(); //update remainding queries + } //con.commit(); } catch (SQLException e) { - System.out.println("Error updating addresses" + e.getMessage() ); + logger.warning("Error updating addresses", e ); } }