/[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 3035 - (hide annotations) (download)
Mon May 2 17:50:14 2016 UTC (8 years, 1 month ago) by torben
File size: 8365 byte(s)
Don't load queries as a static
1 torben 2838 package dk.daoas.adressevedligehold.db;
2    
3 torben 3025 import java.io.InputStream;
4 torben 2838 import java.sql.Connection;
5     import java.sql.PreparedStatement;
6     import java.sql.ResultSet;
7     import java.sql.SQLException;
8     import java.sql.Statement;
9     import java.util.ArrayList;
10     import java.util.List;
11 torben 3025 import java.util.Properties;
12 torben 2838
13     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 2950 /*
20 torben 2840 *
21     */
22 torben 2838
23 torben 2946 public class DatabaseCoverageUpdate {
24 torben 2838
25 torben 2847 //static boolean DEBUG = false;
26 torben 2838
27 torben 3035 private TaskLogger logger = TaskLogger.getInstance();
28 torben 2838
29 torben 3035 Properties queries;
30 torben 2903
31 torben 3035 public DatabaseCoverageUpdate() throws SQLException {
32    
33     //On some platforms it may be necessary to load as "META-INF/queries.properties"
34     ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
35     InputStream is = classLoader.getResourceAsStream("sql.xml");
36    
37     queries = new Properties();
38 torben 3025 try {
39     queries.loadFromXML(is);
40     } catch (Exception e) {
41 torben 3035 throw new SQLException("Error loading queries", e);
42 torben 3025 }
43 torben 3035
44 torben 3025 }
45    
46    
47 torben 2838 public List<Address> getAllAdresses() throws SQLException {
48     TimingHelper timing = new TimingHelper();
49    
50 torben 2847 //String debugFilter = DatabaseLayerImplementation.DEBUG ? " WHERE postnr >= 6000 " : "";
51 torben 2838
52     String sql =
53     "SELECT id,vejnavn,husnr,husnrbogstav,kommunekode,vejkode,postnr,gadeid,upper(distributor) AS distributor,dbkbane,latitude,longitude, "
54     + "rutema,korelistema,ruteti,korelisteti,ruteon,korelisteon,ruteto,korelisteto,rutefr,korelistefr,rutelo,korelistelo,ruteso,korelisteso "
55     + "FROM fulddaekning.adressetabel "
56 torben 2847 //+ debugFilter
57 torben 2838 ;
58    
59     try ( Connection conn = DBConnection.getConnection();
60 torben 2937 Statement stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
61 torben 2838 ) {
62     stmt.setFetchSize(Integer.MIN_VALUE);
63     ResultSet res = stmt.executeQuery(sql);
64    
65     List<Address> list = new ArrayList<Address>(2600000);//initial capacity 2.6 mio
66    
67     DeduplicateHelper<String> vejnavnCache = new DeduplicateHelper<String>(81920);
68     DeduplicateHelper<String> husnrbogstavCache = new DeduplicateHelper<String>();
69     DeduplicateHelper<String> distributorCache = new DeduplicateHelper<String>();
70     DeduplicateHelper<String> dirigeringsCache = new DeduplicateHelper<String>(16*1024);
71    
72    
73     while (res.next()) {
74    
75     Address a = new Address();
76     a.id = res.getInt(1);
77     a.vejnavn = vejnavnCache.getInstance( res.getString(2) );
78     a.husnr = (short) res.getInt(3);
79     a.husnrbogstav = husnrbogstavCache.getInstance( res.getString(4) );
80     a.kommunekode = (short) res.getInt(5);
81     a.vejkode = (short)res.getInt(6);
82     a.postnr = (short)res.getInt(7);
83     a.gadeid = res.getInt(8);
84     a.distributor = distributorCache.getInstance(res.getString(9));
85     a.dbkBane = (short) res.getInt(10);
86     a.latitude = (float) res.getDouble(11);
87     a.longitude = (float) res.getDouble(12);
88    
89     a.ruteMandag = dirigeringsCache.getInstance( res.getString(13) );
90     a.korelisteMandag = dirigeringsCache.getInstance( res.getString(14) );
91    
92     a.ruteTirsdag = dirigeringsCache.getInstance( res.getString(15) );
93     a.korelisteTirsdag = dirigeringsCache.getInstance( res.getString(16) );
94    
95     a.ruteOnsdag = dirigeringsCache.getInstance( res.getString(17) );
96     a.korelisteOnsdag = dirigeringsCache.getInstance( res.getString(18) );
97    
98     a.ruteTorsdag = dirigeringsCache.getInstance( res.getString(19) );
99     a.korelisteTorsdag = dirigeringsCache.getInstance( res.getString(20) );
100    
101     a.ruteFredag = dirigeringsCache.getInstance( res.getString(21) );
102     a.korelisteFredag = dirigeringsCache.getInstance( res.getString(22) );
103    
104     a.ruteLordag = dirigeringsCache.getInstance( res.getString(23) );
105     a.korelisteLordag = dirigeringsCache.getInstance( res.getString(24) );
106    
107     a.ruteSondag = dirigeringsCache.getInstance( res.getString(25) );
108     a.korelisteSondag = dirigeringsCache.getInstance( res.getString(26) );
109    
110    
111     list.add(a);
112     }
113     res.close();
114    
115    
116 torben 2903 logger.info("DB Loaded " + list.size() + " adresses in " + timing.getElapsed() + "ms");
117 torben 2838
118     return list;
119     }
120     }
121    
122 torben 3024 public void saveNewAddresses(List<Address> addresses) throws Exception {
123 torben 3023
124 torben 2903 logger.info("DB::saveNewAddresses size:" + addresses.size() );
125 torben 2840
126 torben 3025 final String SQL_INSERT_NEW_ADDRESS = queries.getProperty("SQL_INSERT_NEW_ADDRESS");
127 torben 2876
128    
129 torben 3025
130    
131 torben 2876 try (Connection con = DBConnection.getConnection()) {
132 torben 2950
133 torben 2876
134 torben 3025 try (PreparedStatement stmt = con.prepareStatement(SQL_INSERT_NEW_ADDRESS)) {
135 torben 2876 for (Address addr : addresses) {
136    
137     String david = String.format("%04d%03d%04d", addr.postnr, addr.kommunekode, addr.vejkode);
138    
139     stmt.setString(1, addr.vejnavn);
140     stmt.setShort(2, addr.husnr);
141     stmt.setString(3, addr.husnrbogstav);
142     stmt.setShort(4, addr.kommunekode);
143     stmt.setShort(5, addr.vejkode);
144     stmt.setShort(6, addr.postnr);
145     stmt.setInt(7, addr.gadeid);
146     stmt.setShort(8, addr.dbkBane);
147     stmt.setString(9, david);
148    
149     stmt.setString(10, addr.ruteMandag);
150     stmt.setString(11, addr.korelisteMandag);
151     stmt.setString(12, addr.ruteTirsdag);
152     stmt.setString(13, addr.korelisteTirsdag);
153     stmt.setString(14, addr.ruteOnsdag);
154     stmt.setString(15, addr.korelisteOnsdag);
155     stmt.setString(16, addr.ruteTorsdag);
156     stmt.setString(17, addr.korelisteTorsdag);
157     stmt.setString(18, addr.ruteFredag);
158     stmt.setString(19, addr.korelisteFredag);
159     stmt.setString(20, addr.ruteLordag);
160     stmt.setString(21, addr.korelisteLordag);
161     stmt.setString(22, addr.ruteSondag);
162     stmt.setString(23, addr.korelisteSondag);
163 torben 3003
164     stmt.setString(24, addr.kommentar);
165    
166     if (addr.latitude != 0.0) {
167     stmt.setDouble(25, addr.latitude);
168     } else {
169     stmt.setNull(25, java.sql.Types.DOUBLE);
170     }
171     if (addr.longitude != 0.0) {
172     stmt.setDouble(26, addr.longitude);
173     } else {
174     stmt.setNull(26, java.sql.Types.DOUBLE);
175     }
176 torben 2876
177    
178     stmt.execute();
179     if (stmt.getUpdateCount() != 1) {
180 torben 2903 logger.info("Error executing insert: " + addr);
181 torben 2876 addr.state = AddressState.CREATE_FAIL;
182     }
183    
184     }
185     }
186    
187     //con.commit();
188     } catch (SQLException e) {
189 torben 2903 logger.warning("Error inserting addresses", e );
190 torben 3024 throw e;
191 torben 2876 }
192 torben 2840 }
193    
194 torben 3024 public void updateAddresses(List<Address> addresses) throws Exception{
195 torben 2903 logger.info("DB::UpdateAddresses size:" + addresses.size() );
196 torben 2838
197 torben 3025
198     final String SQL_INSERT_ON_DUPLICATE_KEY_UPDATE_ADDRESS = queries.getProperty("SQL_INSERT_ON_DUPLICATE_KEY_UPDATE_ADDRESS");
199 torben 2838
200    
201 torben 3023
202 torben 2838
203     try (Connection con = DBConnection.getConnection()) {
204 torben 2845 //con.setAutoCommit(false);
205 torben 2838
206 torben 3025 try (PreparedStatement stmt = con.prepareStatement(SQL_INSERT_ON_DUPLICATE_KEY_UPDATE_ADDRESS)) {
207 torben 3018 int count = 0;
208    
209 torben 2838 for (Address addr : addresses) {
210 torben 3023 stmt.setInt(1, addr.id);
211     stmt.setString(2, addr.ruteMandag);
212     stmt.setString(3, addr.korelisteMandag);
213     stmt.setString(4, addr.ruteTirsdag);
214     stmt.setString(5, addr.korelisteTirsdag);
215     stmt.setString(6, addr.ruteOnsdag);
216     stmt.setString(7, addr.korelisteOnsdag);
217     stmt.setString(8, addr.ruteTorsdag);
218     stmt.setString(9, addr.korelisteTorsdag);
219     stmt.setString(10, addr.ruteFredag);
220     stmt.setString(11, addr.korelisteFredag);
221     stmt.setString(12, addr.ruteLordag);
222     stmt.setString(13, addr.korelisteLordag);
223     stmt.setString(14, addr.ruteSondag);
224     stmt.setString(15, addr.korelisteSondag);
225 torben 2838
226 torben 3023 stmt.setString(16, addr.distributor);
227     stmt.setInt(17, addr.dbkBane);
228 torben 2838
229    
230 torben 3023
231 torben 3018 stmt.addBatch();
232     count++;
233 torben 3023 if ( (count%200) == 0) {
234 torben 3018 stmt.executeBatch();
235 torben 3023
236     if ( (count%50000) == 0 ) {
237     logger.info("Update count " + count);
238     }
239 torben 3018 }
240 torben 2838 }
241 torben 3018
242     stmt.executeBatch(); //update remainding queries
243    
244 torben 2838 }
245    
246 torben 2845 //con.commit();
247 torben 2838 } catch (SQLException e) {
248 torben 2903 logger.warning("Error updating addresses", e );
249 torben 3024 throw e;
250 torben 2838 }
251     }
252    
253     }

  ViewVC Help
Powered by ViewVC 1.1.20