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

  ViewVC Help
Powered by ViewVC 1.1.20