/[projects]/dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/afstandandenrute/DatabaseRouteDistance.java
ViewVC logotype

Diff of /dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/afstandandenrute/DatabaseRouteDistance.java

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2878 by torben, Sat Jan 30 14:05:53 2016 UTC revision 2881 by torben, Sat Jan 30 14:17:27 2016 UTC
# Line 5  import java.sql.Connection; Line 5  import java.sql.Connection;
5  import java.sql.PreparedStatement;  import java.sql.PreparedStatement;
6  import java.sql.ResultSet;  import java.sql.ResultSet;
7  import java.sql.SQLException;  import java.sql.SQLException;
8    import java.sql.Statement;
9  import java.util.ArrayList;  import java.util.ArrayList;
10  import java.util.HashMap;  import java.util.HashMap;
11  import java.util.List;  import java.util.List;
# Line 59  public class Database { Line 60  public class Database {
60          }          }
61    
62          public void resetResultTable() throws SQLException {          public void resetResultTable() throws SQLException {
63                  logger.info("Dropping old result table (if exists)");                  try (Statement stmt = conn.createStatement()) {
64                  String sql = "DROP TABLE IF EXISTS fulddaekning.afstand_anden_rute_ny";                          logger.info("Dropping old result table (if exists)");
65                  conn.createStatement().executeUpdate(sql);                          String sql = "DROP TABLE IF EXISTS fulddaekning.afstand_anden_rute_ny";
66                                            stmt.executeUpdate(sql);
67                  logger.info("Create new result table");                          
68                  sql = "CREATE TABLE fulddaekning.afstand_anden_rute_ny LIKE fulddaekning.afstand_anden_rute";                          logger.info("Create new result table");
69                  conn.createStatement().executeUpdate(sql);                                        sql = "CREATE TABLE fulddaekning.afstand_anden_rute_ny LIKE fulddaekning.afstand_anden_rute";
70                            stmt.executeUpdate(sql);                
71                            
72                    }
73          }                }      
74                    
75          public void renameResultTables() throws SQLException {          public void renameResultTables() throws SQLException {
76                  if (AfstandAndenRuteTask.test_mode == true) {                  if (AfstandAndenRuteTask.test_mode == true) {
77                          throw new RuntimeException("Can not rename tables in test mode");                          throw new RuntimeException("Can not rename tables in test mode");
78                  }                  }
   
                 Constants consts = Constants.getInstance();  
                 String ext = consts.getTableExtension();  
79                                    
80                  logger.info("Dropping old backup table (if exists)");                  Constants consts = Constants.getInstance();
                 String sql = "DROP TABLE IF EXISTS fulddaekning.afstand_anden_rute_old" + ext;  
                 conn.createStatement().executeUpdate(sql);  
81                                    
82                  logger.info("Rename tables");                  try (Statement stmt = conn.createStatement()) {
83                  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;                          
84                            String ext = consts.getTableExtension();
85                            
86                            logger.info("Dropping old backup table (if exists)");
87                            String sql = "DROP TABLE IF EXISTS fulddaekning.afstand_anden_rute_old" + ext;
88                            stmt.executeUpdate(sql);
89                            
90                            logger.info("Rename tables");
91                            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;
92    
93                            logger.info("Executing: " + sql2);
94                            stmt.executeUpdate(sql2);                      
95                    }
96    
97                  logger.info("Executing: " + sql2);                  
                 conn.createStatement().executeUpdate(sql2);              
98          }          }
99                    
100          public BoundingBox getBoundingbox(short postnr)  {          public BoundingBox getBoundingbox(short postnr)  {
# Line 117  public class Database { Line 127  public class Database {
127                          sql = sql + " LIMIT 100 ";                          sql = sql + " LIMIT 100 ";
128                  }                  }
129                                    
130                  PreparedStatement stmt = conn.prepareStatement(sql);                  try (PreparedStatement stmt = conn.prepareStatement(sql)) {
                 stmt.setInt(1, minPostnr);  
                 stmt.setInt(2, maxPostnr);  
   
                 List<Address> list = hentAdresseListe( stmt );  
                 alleIkkeDaekkede = list.toArray( new Address[ list.size() ] );  
                   
                 logger.info("Analyserer ikke-daekkede Addressr");  
                   
                 for (Address a : alleIkkeDaekkede) {  
131                                                    
132                    
133                            stmt.setInt(1, minPostnr);
134                            stmt.setInt(2, maxPostnr);
135            
136                            List<Address> list = hentAdresseListe( stmt );
137                            alleIkkeDaekkede = list.toArray( new Address[ list.size() ] );
138                                                    
139                          BoundingBox bbox;                          logger.info("Analyserer ikke-daekkede Addressr");
140                                                    
141                          if (! postnumre.contains(a.postnr )) {                          for (Address a : alleIkkeDaekkede) {
142                                  postnumre.add( a.postnr );                                  
143                                                                    
144                                  bbox = new BoundingBox();                                  BoundingBox bbox;
145                                    
146                                    if (! postnumre.contains(a.postnr )) {
147                                            postnumre.add( a.postnr );
148                                            
149                                            bbox = new BoundingBox();
150                                            
151                                            bbCache.put( a.postnr, bbox);                                                                                  
152                                            
153                                    } else {
154                                             bbox = bbCache.get( a.postnr);
155                                    }
156                                    
157                                    bbox.latitudeMax = Math.max(bbox.latitudeMax, a.latitude);
158                                    bbox.latitudeMin = Math.min(bbox.latitudeMin, a.latitude);
159                                    bbox.longitudeMax = Math.max(bbox.longitudeMax, a.longitude);
160                                    bbox.longitudeMin = Math.min(bbox.longitudeMin, a.longitude);
161                                                                    
                                 bbCache.put( a.postnr, bbox);                                                                                    
162                                                                    
                         } else {  
                                  bbox = bbCache.get( a.postnr);  
163                          }                          }
164                                                    return new ConcurrentLinkedQueue<Address>( list );
                         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);  
                           
                           
165                  }                  }
                 return new ConcurrentLinkedQueue<Address>( list );  
166          }          }
167                    
168    
# Line 175  public class Database { Line 188  public class Database {
188                          }                          }
189                    
190                          // Forward only + concur_read_only + fetchsize tvinger driver til at hente en række af gangen (bedre performance ved store result sets)                          // Forward only + concur_read_only + fetchsize tvinger driver til at hente en række af gangen (bedre performance ved store result sets)
191                          // Se http://dev.mysql.com/doc/connector-j/en/connector-j-reference-implementation-notes.html                          // 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<Address> list = hentAdresseListe( stmt );  
                           
                         alleAddressr = new ArrayList<Address>();  
                         alleAddressr.addAll(list);  
192                                                    
193                          for(Address addr : list) {                          try (PreparedStatement stmt = conn.prepareStatement(sql, java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY)) {
194                                  short ho = addr.ho;                                  stmt.setFetchSize(Integer.MIN_VALUE);
195                                  List<Address> hoListe = daekkedeAddressrHO.get(ho);                  
196                                  if ( hoListe == null) {                                  stmt.setString(1, distributor);
197                                          hoListe = new ArrayList<Address>();                  
198                                          daekkedeAddressrHO.put(ho, hoListe);                                                                      List<Address> list = hentAdresseListe( stmt );
                                 }  
199                                                                    
200                                  hoListe.add(addr);                                                                                                alleAddressr = new ArrayList<Address>();
201                                    alleAddressr.addAll(list);
202                                                                    
203                                    for(Address addr : list) {
204                                            short ho = addr.ho;
205                                            List<Address> hoListe = daekkedeAddressrHO.get(ho);
206                                            if ( hoListe == null) {
207                                                    hoListe = new ArrayList<Address>();
208                                                    daekkedeAddressrHO.put(ho, hoListe);                                    
209                                            }
210                                            
211                                            hoListe.add(addr);                                                              
212                                            
213                                    }
214                          }                          }
215                  }                  }
216                                    
217                  return alleAddressr.size();                  return alleAddressr.size();
218                    
219          }          }
220                    
221                    
# Line 255  public class Database { Line 271  public class Database {
271                  Constants consts = Constants.getInstance();                  Constants consts = Constants.getInstance();
272    
273                  //logger.info("Starting query");                  //logger.info("Starting query");
274                  ResultSet res = stmt.executeQuery();                  try ( ResultSet res = stmt.executeQuery() ) {
275                  //logger.info("Starting exec query done");                  
   
                 while (res.next()) {  
                           
                         double latitude = res.getDouble(7);  
                         double longitude = res.getDouble(8);  
   
                           
                         Address adr = new Address(latitude,longitude);  
276    
277                          adr.id = res.getInt(1);                          while (res.next()) {
278                          adr.postnr = res.getShort(2);                                  
279                          adr.vejnavn = vejnavnCache.getInstance( res.getString(3) );                                  double latitude = res.getDouble(7);
280                          adr.gadeid = res.getInt(4);                                  double longitude = res.getDouble(8);
281                          adr.husnr = res.getShort(5);          
282                          adr.husnrbogstav = husnrbogstavCache.getInstance( res.getString(6) );                                  
283                          //adr.latitude = res.getDouble(7);                                  Address adr = new Address(latitude,longitude);
284                          //adr.longitude = res.getDouble(8);          
285                          adr.ruteMandag =  ruteCache.getInstance( res.getString(9) );                                  adr.id = res.getInt(1);
286                          adr.ho = res.getShort(10);                                  adr.postnr = res.getShort(2);
287                                    adr.vejnavn = vejnavnCache.getInstance( res.getString(3) );
288                          list.add(adr);                                  adr.gadeid = res.getInt(4);
289                                    adr.husnr = res.getShort(5);
290                          if (consts.doCheckHO() == true && adr.ho == 0) {                                  adr.husnrbogstav = husnrbogstavCache.getInstance( res.getString(6) );
291                                  System.out.println( "Mangler HO" );                                  //adr.latitude = res.getDouble(7);
292                                  System.out.println( adr );                                  //adr.longitude = res.getDouble(8);
293                                  System.exit(0);                                  adr.ruteMandag =  ruteCache.getInstance( res.getString(9) );
294                                    adr.ho = res.getShort(10);
295            
296                                    list.add(adr);
297            
298                                    if (consts.doCheckHO() == true && adr.ho == 0) {
299                                            System.out.println( "Mangler HO" );
300                                            System.out.println( adr );
301                                            throw new RuntimeException("Mangler HO: "+ adr);
302                                    }
303            
304                                    //logger.info( "Adress:" + adr);
305                          }                          }
306            
307                          //logger.info( "Adress:" + adr);                          res.close();
308                            stmt.close();
309            
310                            return list;
311                  }                  }
   
                 res.close();  
                 stmt.close();  
   
                 return list;  
312          }          }
313                                    
314  }  }

Legend:
Removed from v.2878  
changed lines
  Added in v.2881

  ViewVC Help
Powered by ViewVC 1.1.20