--- dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/afstandandenrute/Database.java 2016/01/30 14:05:53 2878 +++ dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/afstandandenrute/Database.java 2016/01/30 14:12:51 2879 @@ -5,6 +5,7 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +import java.sql.Statement; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -59,32 +60,41 @@ } public void resetResultTable() throws SQLException { - logger.info("Dropping old result table (if exists)"); - String sql = "DROP TABLE IF EXISTS fulddaekning.afstand_anden_rute_ny"; - conn.createStatement().executeUpdate(sql); - - logger.info("Create new result table"); - sql = "CREATE TABLE fulddaekning.afstand_anden_rute_ny LIKE fulddaekning.afstand_anden_rute"; - conn.createStatement().executeUpdate(sql); + try (Statement stmt = conn.createStatement()) { + logger.info("Dropping old result table (if exists)"); + String sql = "DROP TABLE IF EXISTS fulddaekning.afstand_anden_rute_ny"; + stmt.executeUpdate(sql); + + logger.info("Create new result table"); + sql = "CREATE TABLE fulddaekning.afstand_anden_rute_ny LIKE fulddaekning.afstand_anden_rute"; + stmt.executeUpdate(sql); + + } } public void renameResultTables() throws SQLException { if (AfstandAndenRuteTask.test_mode == true) { throw new RuntimeException("Can not rename tables in test mode"); } - - Constants consts = Constants.getInstance(); - String ext = consts.getTableExtension(); - logger.info("Dropping old backup table (if exists)"); - String sql = "DROP TABLE IF EXISTS fulddaekning.afstand_anden_rute_old" + ext; - conn.createStatement().executeUpdate(sql); + Constants consts = Constants.getInstance(); - logger.info("Rename tables"); - String sql2 = "RENAME TABLE fulddaekning.afstand_anden_rute" + ext + " TO fulddaekning.afstand_anden_rute_old" + ext + ", fulddaekning.afstand_anden_rute_ny TO fulddaekning.afstand_anden_rute" + ext; + try (Statement stmt = conn.createStatement()) { + + String ext = consts.getTableExtension(); + + logger.info("Dropping old backup table (if exists)"); + String sql = "DROP TABLE IF EXISTS fulddaekning.afstand_anden_rute_old" + ext; + stmt.executeUpdate(sql); + + logger.info("Rename tables"); + String sql2 = "RENAME TABLE fulddaekning.afstand_anden_rute" + ext + " TO fulddaekning.afstand_anden_rute_old" + ext + ", fulddaekning.afstand_anden_rute_ny TO fulddaekning.afstand_anden_rute" + ext; - logger.info("Executing: " + sql2); - conn.createStatement().executeUpdate(sql2); + logger.info("Executing: " + sql2); + stmt.executeUpdate(sql2); + } + + } public BoundingBox getBoundingbox(short postnr) { @@ -117,39 +127,42 @@ sql = sql + " LIMIT 100 "; } - PreparedStatement stmt = conn.prepareStatement(sql); - stmt.setInt(1, minPostnr); - stmt.setInt(2, maxPostnr); - - List
list = hentAdresseListe( stmt ); - alleIkkeDaekkede = list.toArray( new Address[ list.size() ] ); - - logger.info("Analyserer ikke-daekkede Addressr"); - - for (Address a : alleIkkeDaekkede) { + try (PreparedStatement stmt = conn.prepareStatement(sql)) { + + stmt.setInt(1, minPostnr); + stmt.setInt(2, maxPostnr); + + List
list = hentAdresseListe( stmt ); + alleIkkeDaekkede = list.toArray( new Address[ list.size() ] ); - BoundingBox bbox; + logger.info("Analyserer ikke-daekkede Addressr"); - if (! postnumre.contains(a.postnr )) { - postnumre.add( a.postnr ); + for (Address a : alleIkkeDaekkede) { - bbox = new BoundingBox(); - bbCache.put( a.postnr, bbox); + BoundingBox bbox; + + if (! postnumre.contains(a.postnr )) { + postnumre.add( a.postnr ); + + bbox = new BoundingBox(); + + bbCache.put( a.postnr, bbox); + + } else { + bbox = bbCache.get( a.postnr); + } + + bbox.latitudeMax = Math.max(bbox.latitudeMax, a.latitude); + bbox.latitudeMin = Math.min(bbox.latitudeMin, a.latitude); + bbox.longitudeMax = Math.max(bbox.longitudeMax, a.longitude); + bbox.longitudeMin = Math.min(bbox.longitudeMin, a.longitude); + - } else { - bbox = bbCache.get( a.postnr); } - - bbox.latitudeMax = Math.max(bbox.latitudeMax, a.latitude); - bbox.latitudeMin = Math.min(bbox.latitudeMin, a.latitude); - bbox.longitudeMax = Math.max(bbox.longitudeMax, a.longitude); - bbox.longitudeMin = Math.min(bbox.longitudeMin, a.longitude); - - + return new ConcurrentLinkedQueue
( list ); } - return new ConcurrentLinkedQueue
( list ); } @@ -175,31 +188,34 @@ } // Forward only + concur_read_only + fetchsize tvinger driver til at hente en række af gangen (bedre performance ved store result sets) - // Se http://dev.mysql.com/doc/connector-j/en/connector-j-reference-implementation-notes.html - PreparedStatement stmt = conn.prepareStatement(sql, java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY); - stmt.setFetchSize(Integer.MIN_VALUE); - - stmt.setString(1, distributor); - - List
list = hentAdresseListe( stmt ); + // Se http://dev.mysql.com/doc/connector-j/en/connector-j-reference-implementation-notes.html - alleAddressr = new ArrayList
(); - alleAddressr.addAll(list); - - for(Address addr : list) { - short ho = addr.ho; - List
hoListe = daekkedeAddressrHO.get(ho); - if ( hoListe == null) { - hoListe = new ArrayList
(); - daekkedeAddressrHO.put(ho, hoListe); - } + try (PreparedStatement stmt = conn.prepareStatement(sql, java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY)) { + stmt.setFetchSize(Integer.MIN_VALUE); + + stmt.setString(1, distributor); + + List
list = hentAdresseListe( stmt ); - hoListe.add(addr); + alleAddressr = new ArrayList
(); + alleAddressr.addAll(list); + for(Address addr : list) { + short ho = addr.ho; + List
hoListe = daekkedeAddressrHO.get(ho); + if ( hoListe == null) { + hoListe = new ArrayList
(); + daekkedeAddressrHO.put(ho, hoListe); + } + + hoListe.add(addr); + + } } } return alleAddressr.size(); + }