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

Diff of /dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/afstandandenrute/Database.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 2879 by torben, Sat Jan 30 14:12:51 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);                          logger.info("Executing: " + sql2);
94                  conn.createStatement().executeUpdate(sql2);                                      stmt.executeUpdate(sql2);                      
95                    }
96    
97                    
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) {
                                 postnumre.add( a.postnr );  
142                                                                    
                                 bbox = new BoundingBox();  
143                                                                    
144                                  bbCache.put( a.postnr, bbox);                                                                                                                    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                                    
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 );  
192                                                    
193                          alleAddressr = new ArrayList<Address>();                          try (PreparedStatement stmt = conn.prepareStatement(sql, java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY)) {
194                          alleAddressr.addAll(list);                                  stmt.setFetchSize(Integer.MIN_VALUE);
195                                            
196                          for(Address addr : list) {                                  stmt.setString(1, distributor);
197                                  short ho = addr.ho;                  
198                                  List<Address> hoListe = daekkedeAddressrHO.get(ho);                                  List<Address> list = hentAdresseListe( stmt );
                                 if ( hoListe == null) {  
                                         hoListe = new ArrayList<Address>();  
                                         daekkedeAddressrHO.put(ho, hoListe);                                      
                                 }  
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                    

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

  ViewVC Help
Powered by ViewVC 1.1.20