/[projects]/dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/db/DatabaseCoverageUpdate.java
ViewVC logotype

Diff of /dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/db/DatabaseCoverageUpdate.java

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

dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/db/DatabaseLayerImplementation.java revision 2844 by torben, Mon Jan 25 21:43:59 2016 UTC dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/db/DatabaseCoverageUpdate.java revision 2949 by torben, Tue Feb 16 09:38:13 2016 UTC
# Line 8  import java.sql.Statement; Line 8  import java.sql.Statement;
8  import java.util.ArrayList;  import java.util.ArrayList;
9  import java.util.List;  import java.util.List;
10    
11    
12    
13  import dk.daoas.adressevedligehold.beans.Address;  import dk.daoas.adressevedligehold.beans.Address;
14    import dk.daoas.adressevedligehold.beans.Address.AddressState;
15    import dk.daoas.adressevedligehold.tasks.TaskLogger;
16  import dk.daoas.adressevedligehold.util.DeduplicateHelper;  import dk.daoas.adressevedligehold.util.DeduplicateHelper;
17  import dk.daoas.adressevedligehold.util.TimingHelper;  import dk.daoas.adressevedligehold.util.TimingHelper;
18    
19  /*  /*
20   * TODO: Batched skrivning af updates   * TODO: Batched skrivning af updates
  * TODO: Skrivning af nye adresser  
21   *     *  
22   */   */
23    
24  public class DatabaseLayerImplementation  {  public class DatabaseCoverageUpdate  {
25            
26            //static boolean DEBUG = false;
27                    
28          static boolean DEBUG = true;          private TaskLogger logger = TaskLogger.getInstance();
29                    
30                    
31          public List<Address> getAllAdresses() throws SQLException {          public List<Address> getAllAdresses() throws SQLException {
32                  TimingHelper timing = new TimingHelper();                  TimingHelper timing = new TimingHelper();
33                                    
34                  String debugFilter = DatabaseLayerImplementation.DEBUG ? " WHERE postnr >= 6000 " : "";                  //String debugFilter = DatabaseLayerImplementation.DEBUG ? " WHERE postnr >= 6000 " : "";
35                                    
36                  String sql =                  String sql =
37                                  "SELECT id,vejnavn,husnr,husnrbogstav,kommunekode,vejkode,postnr,gadeid,upper(distributor) AS distributor,dbkbane,latitude,longitude, "                                  "SELECT id,vejnavn,husnr,husnrbogstav,kommunekode,vejkode,postnr,gadeid,upper(distributor) AS distributor,dbkbane,latitude,longitude, "
38                                  + "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 "
39                                  + "FROM fulddaekning.adressetabel "                                  + "FROM fulddaekning.adressetabel "
40                                  + debugFilter                                  //+ debugFilter
41                                  ;                                  ;
42                                    
43                  try ( Connection conn = DBConnection.getConnection();                            try ( Connection conn = DBConnection.getConnection();          
44                                  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);
45                                  ) {                                  ) {
46                          stmt.setFetchSize(Integer.MIN_VALUE);                          stmt.setFetchSize(Integer.MIN_VALUE);
47                          ResultSet res = stmt.executeQuery(sql);                          ResultSet res = stmt.executeQuery(sql);
# Line 92  public class DatabaseLayerImplementation Line 97  public class DatabaseLayerImplementation
97                          res.close();                          res.close();
98                                                    
99                                                    
100                          System.out.println("DB Loaded " + list.size() + " adresses in " + timing.getElapsed() + "ms");                          logger.info("DB Loaded " + list.size() + " adresses in " + timing.getElapsed() + "ms");
101                                                    
102                          return list;                          return list;
103                  }                  }
104          }          }
105                    
106          private void updateAddressesBatch(List<Address> addresses)  throws SQLException {          public void saveNewAddresses(List<Address> addresses) {
107                    logger.info("DB::saveNewAddresses size:" + addresses.size() );
108                                    
109                    String sql = "INSERT IGNORE INTO fulddaekning.adressetabel " +
110                                             "(vejnavn,husnr,husnrbogstav,kommunekode,vejkode,postnr,gadeid,dbkbane,indlast,aendret,david,googlechecked," +
111                                             "RuteMa,KorelisteMa,RuteTi,KorelisteTi,RuteOn,KorelisteOn,RuteTo,KorelisteTo,RuteFr,KorelisteFr,RuteLo,KorelisteLo,RuteSo,KorelisteSo) " +
112                                             "VALUES " +
113                                             "(?,?,?,?,?,?,?,?, now(), now(), ?, 0, " +
114                                             "?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
115                    
116                    
117                    try (Connection con = DBConnection.getConnection()) {
118                            //con.setAutoCommit(false);
119                            
120                            try (PreparedStatement stmt = con.prepareStatement(sql)) {
121                                    for (Address addr : addresses) {
122                                            
123                                            String david = String.format("%04d%03d%04d", addr.postnr, addr.kommunekode, addr.vejkode);
124                                            
125                                            stmt.setString(1, addr.vejnavn);
126                                            stmt.setShort(2, addr.husnr);
127                                            stmt.setString(3, addr.husnrbogstav);
128                                            stmt.setShort(4, addr.kommunekode);
129                                            stmt.setShort(5, addr.vejkode);
130                                            stmt.setShort(6, addr.postnr);
131                                            stmt.setInt(7, addr.gadeid);
132                                            stmt.setShort(8, addr.dbkBane);
133                                            stmt.setString(9, david);
134                                            
135                                            stmt.setString(10, addr.ruteMandag);
136                                            stmt.setString(11, addr.korelisteMandag);
137                                            stmt.setString(12, addr.ruteTirsdag);
138                                            stmt.setString(13, addr.korelisteTirsdag);
139                                            stmt.setString(14, addr.ruteOnsdag);
140                                            stmt.setString(15, addr.korelisteOnsdag);
141                                            stmt.setString(16, addr.ruteTorsdag);
142                                            stmt.setString(17, addr.korelisteTorsdag);
143                                            stmt.setString(18, addr.ruteFredag);
144                                            stmt.setString(19, addr.korelisteFredag);
145                                            stmt.setString(20, addr.ruteLordag);
146                                            stmt.setString(21, addr.korelisteLordag);
147                                            stmt.setString(22, addr.ruteSondag);
148                                            stmt.setString(23, addr.korelisteSondag);
149    
150                                            
151                                            stmt.execute();
152                                            if (stmt.getUpdateCount() != 1) {
153                                                    logger.info("Error executing insert: " + addr);
154                                                    addr.state = AddressState.CREATE_FAIL;
155                                            }
156                                            
157                                    }
158                            }
159                            
160                            //con.commit();
161                    } catch (SQLException e) {
162                            logger.warning("Error inserting addresses", e  );
163                    }
164          }          }
165                    
166          public void updateAddresses(List<Address> addresses) {          public void updateAddresses(List<Address> addresses) {
167                    logger.info("DB::UpdateAddresses size:" + addresses.size() );
168                                    
169                  String sql = "UPDATE fulddaekning.adressetabel " +                  String sql = "UPDATE fulddaekning.adressetabel " +
170                                          "SET " +                                          "SET " +
# Line 112  public class DatabaseLayerImplementation Line 174  public class DatabaseLayerImplementation
174                                          "RuteTo=?, KorelisteTo=?, " +                                          "RuteTo=?, KorelisteTo=?, " +
175                                          "RuteFr=?, KorelisteFr=?, " +                                          "RuteFr=?, KorelisteFr=?, " +
176                                          "RuteLo=?, KorelisteLo=?, " +                                          "RuteLo=?, KorelisteLo=?, " +
177                                          "RuteSo=?, KorelisteSo=?  " +                                          "RuteSo=?, KorelisteSo=?, " +
178                                          "WHERE id=?";                                      "Distributor=?, " +
179                                        "DBKBane=?, " +
180                                        "Aendret=now() " +
181                                            "WHERE id=? ";
182                                                                                    
183                                                                                    
184                                    
185                  try (Connection con = DBConnection.getConnection()) {                  try (Connection con = DBConnection.getConnection()) {
186                          con.setAutoCommit(false);                          //con.setAutoCommit(false);
187                                                    
188                          try (PreparedStatement stmt = con.prepareStatement(sql)) {                          try (PreparedStatement stmt = con.prepareStatement(sql)) {
189                                  for (Address addr : addresses) {                                  for (Address addr : addresses) {
# Line 137  public class DatabaseLayerImplementation Line 202  public class DatabaseLayerImplementation
202                                          stmt.setString(13, addr.ruteSondag);                                          stmt.setString(13, addr.ruteSondag);
203                                          stmt.setString(14, addr.korelisteSondag);                                          stmt.setString(14, addr.korelisteSondag);
204    
205                                          stmt.setInt(15, addr.id);                                          stmt.setString(15, addr.distributor);
206                                            stmt.setInt(16, addr.dbkBane);
207                                            stmt.setInt(17, addr.id);
208    
209                                                                                    
210                                          stmt.execute();                                          stmt.execute();
211                                          if (stmt.getUpdateCount() != 1) {                                          if (stmt.getUpdateCount() != 1) {
212                                                  System.out.println("Error executing update");                                                  logger.warning("Error executing update: " + addr);
213                                          }                                          }
214                                                                                    
215                                  }                                  }
216                          }                          }
217                                                    
218                          con.commit();                          //con.commit();
219                  } catch (SQLException e) {                  } catch (SQLException e) {
220                          System.out.println("Error updating addresses" + e.getMessage() );                          logger.warning("Error updating addresses", e );
221                  }                  }
222          }          }
223                    
224            /*
225          private static String nullify(String str) {          private static String nullify(String str) {
226                  if (str == null)                  if (str == null)
227                          return null;                          return null;

Legend:
Removed from v.2844  
changed lines
  Added in v.2949

  ViewVC Help
Powered by ViewVC 1.1.20