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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2903 - (hide annotations) (download)
Wed Feb 3 18:45:33 2016 UTC (8 years, 3 months ago) by torben
Original Path: dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/db/DatabaseLayerImplementation.java
File size: 8382 byte(s)
Implement logging system

Switch task to rest/jersey
1 torben 2838 package dk.daoas.adressevedligehold.db;
2    
3     import java.sql.Connection;
4     import java.sql.PreparedStatement;
5     import java.sql.ResultSet;
6     import java.sql.SQLException;
7     import java.sql.Statement;
8     import java.util.ArrayList;
9     import java.util.List;
10    
11 torben 2876
12 torben 2903
13 torben 2838 import dk.daoas.adressevedligehold.beans.Address;
14 torben 2876 import dk.daoas.adressevedligehold.beans.Address.AddressState;
15 torben 2903 import dk.daoas.adressevedligehold.tasks.TaskLogger;
16 torben 2838 import dk.daoas.adressevedligehold.util.DeduplicateHelper;
17     import dk.daoas.adressevedligehold.util.TimingHelper;
18    
19 torben 2840 /*
20     * TODO: Batched skrivning af updates
21     * TODO: Skrivning af nye adresser
22     *
23     */
24 torben 2838
25     public class DatabaseLayerImplementation {
26    
27 torben 2847 //static boolean DEBUG = false;
28 torben 2838
29 torben 2903 private TaskLogger logger = TaskLogger.getInstance();
30 torben 2838
31 torben 2903
32 torben 2838 public List<Address> getAllAdresses() throws SQLException {
33     TimingHelper timing = new TimingHelper();
34    
35 torben 2847 //String debugFilter = DatabaseLayerImplementation.DEBUG ? " WHERE postnr >= 6000 " : "";
36 torben 2838
37     String sql =
38     "SELECT id,vejnavn,husnr,husnrbogstav,kommunekode,vejkode,postnr,gadeid,upper(distributor) AS distributor,dbkbane,latitude,longitude, "
39     + "rutema,korelistema,ruteti,korelisteti,ruteon,korelisteon,ruteto,korelisteto,rutefr,korelistefr,rutelo,korelistelo,ruteso,korelisteso "
40     + "FROM fulddaekning.adressetabel "
41 torben 2847 //+ debugFilter
42 torben 2838 ;
43    
44     try ( Connection conn = DBConnection.getConnection();
45     Statement stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY);
46     ) {
47     stmt.setFetchSize(Integer.MIN_VALUE);
48     ResultSet res = stmt.executeQuery(sql);
49    
50     List<Address> list = new ArrayList<Address>(2600000);//initial capacity 2.6 mio
51    
52     DeduplicateHelper<String> vejnavnCache = new DeduplicateHelper<String>(81920);
53     DeduplicateHelper<String> husnrbogstavCache = new DeduplicateHelper<String>();
54     DeduplicateHelper<String> distributorCache = new DeduplicateHelper<String>();
55     DeduplicateHelper<String> dirigeringsCache = new DeduplicateHelper<String>(16*1024);
56    
57    
58     while (res.next()) {
59    
60     Address a = new Address();
61     a.id = res.getInt(1);
62     a.vejnavn = vejnavnCache.getInstance( res.getString(2) );
63     a.husnr = (short) res.getInt(3);
64     a.husnrbogstav = husnrbogstavCache.getInstance( res.getString(4) );
65     a.kommunekode = (short) res.getInt(5);
66     a.vejkode = (short)res.getInt(6);
67     a.postnr = (short)res.getInt(7);
68     a.gadeid = res.getInt(8);
69     a.distributor = distributorCache.getInstance(res.getString(9));
70     a.dbkBane = (short) res.getInt(10);
71     a.latitude = (float) res.getDouble(11);
72     a.longitude = (float) res.getDouble(12);
73    
74     a.ruteMandag = dirigeringsCache.getInstance( res.getString(13) );
75     a.korelisteMandag = dirigeringsCache.getInstance( res.getString(14) );
76    
77     a.ruteTirsdag = dirigeringsCache.getInstance( res.getString(15) );
78     a.korelisteTirsdag = dirigeringsCache.getInstance( res.getString(16) );
79    
80     a.ruteOnsdag = dirigeringsCache.getInstance( res.getString(17) );
81     a.korelisteOnsdag = dirigeringsCache.getInstance( res.getString(18) );
82    
83     a.ruteTorsdag = dirigeringsCache.getInstance( res.getString(19) );
84     a.korelisteTorsdag = dirigeringsCache.getInstance( res.getString(20) );
85    
86     a.ruteFredag = dirigeringsCache.getInstance( res.getString(21) );
87     a.korelisteFredag = dirigeringsCache.getInstance( res.getString(22) );
88    
89     a.ruteLordag = dirigeringsCache.getInstance( res.getString(23) );
90     a.korelisteLordag = dirigeringsCache.getInstance( res.getString(24) );
91    
92     a.ruteSondag = dirigeringsCache.getInstance( res.getString(25) );
93     a.korelisteSondag = dirigeringsCache.getInstance( res.getString(26) );
94    
95    
96     list.add(a);
97     }
98     res.close();
99    
100    
101 torben 2903 logger.info("DB Loaded " + list.size() + " adresses in " + timing.getElapsed() + "ms");
102 torben 2838
103     return list;
104     }
105     }
106    
107 torben 2876 public void saveNewAddresses(List<Address> addresses) {
108 torben 2903 logger.info("DB::saveNewAddresses size:" + addresses.size() );
109 torben 2840
110 torben 2876 String sql = "INSERT IGNORE INTO fulddaekning.adressetabel " +
111     "(vejnavn,husnr,husnrbogstav,kommunekode,vejkode,postnr,gadeid,dbkbane,indlast,aendret,david,googlechecked," +
112     "RuteMa,KorelisteMa,RuteTi,KorelisteTi,RuteOn,KorelisteOn,RuteTo,KorelisteTo,RuteFr,KorelisteFr,RuteLo,KorelisteLo,RuteSo,KorelisteSo) " +
113     "VALUES " +
114     "(?,?,?,?,?,?,?,?, now(), now(), ?, 0, " +
115     "?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
116    
117    
118     try (Connection con = DBConnection.getConnection()) {
119     //con.setAutoCommit(false);
120    
121     try (PreparedStatement stmt = con.prepareStatement(sql)) {
122     for (Address addr : addresses) {
123    
124     String david = String.format("%04d%03d%04d", addr.postnr, addr.kommunekode, addr.vejkode);
125    
126     stmt.setString(1, addr.vejnavn);
127     stmt.setShort(2, addr.husnr);
128     stmt.setString(3, addr.husnrbogstav);
129     stmt.setShort(4, addr.kommunekode);
130     stmt.setShort(5, addr.vejkode);
131     stmt.setShort(6, addr.postnr);
132     stmt.setInt(7, addr.gadeid);
133     stmt.setShort(8, addr.dbkBane);
134     stmt.setString(9, david);
135    
136     stmt.setString(10, addr.ruteMandag);
137     stmt.setString(11, addr.korelisteMandag);
138     stmt.setString(12, addr.ruteTirsdag);
139     stmt.setString(13, addr.korelisteTirsdag);
140     stmt.setString(14, addr.ruteOnsdag);
141     stmt.setString(15, addr.korelisteOnsdag);
142     stmt.setString(16, addr.ruteTorsdag);
143     stmt.setString(17, addr.korelisteTorsdag);
144     stmt.setString(18, addr.ruteFredag);
145     stmt.setString(19, addr.korelisteFredag);
146     stmt.setString(20, addr.ruteLordag);
147     stmt.setString(21, addr.korelisteLordag);
148     stmt.setString(22, addr.ruteSondag);
149     stmt.setString(23, addr.korelisteSondag);
150    
151    
152     stmt.execute();
153     if (stmt.getUpdateCount() != 1) {
154 torben 2903 logger.info("Error executing insert: " + addr);
155 torben 2876 addr.state = AddressState.CREATE_FAIL;
156     }
157    
158     }
159     }
160    
161     //con.commit();
162     } catch (SQLException e) {
163 torben 2903 logger.warning("Error inserting addresses", e );
164 torben 2876 }
165 torben 2840 }
166    
167 torben 2838 public void updateAddresses(List<Address> addresses) {
168 torben 2903 logger.info("DB::UpdateAddresses size:" + addresses.size() );
169 torben 2838
170     String sql = "UPDATE fulddaekning.adressetabel " +
171     "SET " +
172     "RuteMa=?, KorelisteMa=?, " +
173     "RuteTi=?, KorelisteTi=?, " +
174     "RuteOn=?, KorelisteOn=?, " +
175     "RuteTo=?, KorelisteTo=?, " +
176     "RuteFr=?, KorelisteFr=?, " +
177     "RuteLo=?, KorelisteLo=?, " +
178 torben 2845 "RuteSo=?, KorelisteSo=?, " +
179 torben 2847 "Distributor=?, " +
180 torben 2853 "DBKBane=?, " +
181     "Aendret=now() " +
182     "WHERE id=? ";
183 torben 2838
184    
185    
186     try (Connection con = DBConnection.getConnection()) {
187 torben 2845 //con.setAutoCommit(false);
188 torben 2838
189     try (PreparedStatement stmt = con.prepareStatement(sql)) {
190     for (Address addr : addresses) {
191     stmt.setString(1, addr.ruteMandag);
192     stmt.setString(2, addr.korelisteMandag);
193     stmt.setString(3, addr.ruteTirsdag);
194     stmt.setString(4, addr.korelisteTirsdag);
195     stmt.setString(5, addr.ruteOnsdag);
196     stmt.setString(6, addr.korelisteOnsdag);
197     stmt.setString(7, addr.ruteTorsdag);
198     stmt.setString(8, addr.korelisteTorsdag);
199     stmt.setString(9, addr.ruteFredag);
200     stmt.setString(10, addr.korelisteFredag);
201     stmt.setString(11, addr.ruteLordag);
202     stmt.setString(12, addr.korelisteLordag);
203     stmt.setString(13, addr.ruteSondag);
204     stmt.setString(14, addr.korelisteSondag);
205    
206 torben 2845 stmt.setString(15, addr.distributor);
207 torben 2847 stmt.setInt(16, addr.dbkBane);
208     stmt.setInt(17, addr.id);
209 torben 2838
210    
211     stmt.execute();
212     if (stmt.getUpdateCount() != 1) {
213     System.out.println("Error executing update");
214     }
215    
216     }
217     }
218    
219 torben 2845 //con.commit();
220 torben 2838 } catch (SQLException e) {
221 torben 2903 logger.warning("Error updating addresses", e );
222 torben 2838 }
223     }
224    
225 torben 2898 /*
226 torben 2838 private static String nullify(String str) {
227     if (str == null)
228     return null;
229    
230     if (str.equals("")) {
231     return null;
232     } else {
233     return str;
234     }
235     }
236    
237    
238     /*
239     private static int safeInt(String str) {
240     try {
241     return Integer.parseInt( str );
242     } catch (NumberFormatException e) {
243     return 0;
244     }
245     }
246    
247    
248    
249     private static String coalesce(String s1, String s2) {
250     if (s1 != null)
251     return s1;
252    
253     return s2;
254     }
255    
256     */
257     }

  ViewVC Help
Powered by ViewVC 1.1.20