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

Contents of /dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/db/DatabaseLayerImplementation.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2853 - (show annotations) (download)
Wed Jan 27 11:44:12 2016 UTC (8 years, 3 months ago) by torben
File size: 6133 byte(s)
Update changed timestamp when writing to DB
1 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 import dk.daoas.adressevedligehold.beans.Address;
12 import dk.daoas.adressevedligehold.util.DeduplicateHelper;
13 import dk.daoas.adressevedligehold.util.TimingHelper;
14
15 /*
16 * TODO: Batched skrivning af updates
17 * TODO: Skrivning af nye adresser
18 *
19 */
20
21 public class DatabaseLayerImplementation {
22
23 //static boolean DEBUG = false;
24
25
26 public List<Address> getAllAdresses() throws SQLException {
27 TimingHelper timing = new TimingHelper();
28
29 //String debugFilter = DatabaseLayerImplementation.DEBUG ? " WHERE postnr >= 6000 " : "";
30
31 String sql =
32 "SELECT id,vejnavn,husnr,husnrbogstav,kommunekode,vejkode,postnr,gadeid,upper(distributor) AS distributor,dbkbane,latitude,longitude, "
33 + "rutema,korelistema,ruteti,korelisteti,ruteon,korelisteon,ruteto,korelisteto,rutefr,korelistefr,rutelo,korelistelo,ruteso,korelisteso "
34 + "FROM fulddaekning.adressetabel "
35 //+ debugFilter
36 ;
37
38 try ( Connection conn = DBConnection.getConnection();
39 Statement stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY);
40 ) {
41 stmt.setFetchSize(Integer.MIN_VALUE);
42 ResultSet res = stmt.executeQuery(sql);
43
44 List<Address> list = new ArrayList<Address>(2600000);//initial capacity 2.6 mio
45
46 DeduplicateHelper<String> vejnavnCache = new DeduplicateHelper<String>(81920);
47 DeduplicateHelper<String> husnrbogstavCache = new DeduplicateHelper<String>();
48 DeduplicateHelper<String> distributorCache = new DeduplicateHelper<String>();
49 DeduplicateHelper<String> dirigeringsCache = new DeduplicateHelper<String>(16*1024);
50
51
52 while (res.next()) {
53
54 Address a = new Address();
55 a.id = res.getInt(1);
56 a.vejnavn = vejnavnCache.getInstance( res.getString(2) );
57 a.husnr = (short) res.getInt(3);
58 a.husnrbogstav = husnrbogstavCache.getInstance( res.getString(4) );
59 a.kommunekode = (short) res.getInt(5);
60 a.vejkode = (short)res.getInt(6);
61 a.postnr = (short)res.getInt(7);
62 a.gadeid = res.getInt(8);
63 a.distributor = distributorCache.getInstance(res.getString(9));
64 a.dbkBane = (short) res.getInt(10);
65 a.latitude = (float) res.getDouble(11);
66 a.longitude = (float) res.getDouble(12);
67
68 a.ruteMandag = dirigeringsCache.getInstance( res.getString(13) );
69 a.korelisteMandag = dirigeringsCache.getInstance( res.getString(14) );
70
71 a.ruteTirsdag = dirigeringsCache.getInstance( res.getString(15) );
72 a.korelisteTirsdag = dirigeringsCache.getInstance( res.getString(16) );
73
74 a.ruteOnsdag = dirigeringsCache.getInstance( res.getString(17) );
75 a.korelisteOnsdag = dirigeringsCache.getInstance( res.getString(18) );
76
77 a.ruteTorsdag = dirigeringsCache.getInstance( res.getString(19) );
78 a.korelisteTorsdag = dirigeringsCache.getInstance( res.getString(20) );
79
80 a.ruteFredag = dirigeringsCache.getInstance( res.getString(21) );
81 a.korelisteFredag = dirigeringsCache.getInstance( res.getString(22) );
82
83 a.ruteLordag = dirigeringsCache.getInstance( res.getString(23) );
84 a.korelisteLordag = dirigeringsCache.getInstance( res.getString(24) );
85
86 a.ruteSondag = dirigeringsCache.getInstance( res.getString(25) );
87 a.korelisteSondag = dirigeringsCache.getInstance( res.getString(26) );
88
89
90 list.add(a);
91 }
92 res.close();
93
94
95 System.out.println("DB Loaded " + list.size() + " adresses in " + timing.getElapsed() + "ms");
96
97 return list;
98 }
99 }
100
101 private void updateAddressesBatch(List<Address> addresses) throws SQLException {
102
103 }
104
105 public void updateAddresses(List<Address> addresses) {
106 System.out.println("DB::UpdateAddresses size:" + addresses.size() );
107
108 String sql = "UPDATE fulddaekning.adressetabel " +
109 "SET " +
110 "RuteMa=?, KorelisteMa=?, " +
111 "RuteTi=?, KorelisteTi=?, " +
112 "RuteOn=?, KorelisteOn=?, " +
113 "RuteTo=?, KorelisteTo=?, " +
114 "RuteFr=?, KorelisteFr=?, " +
115 "RuteLo=?, KorelisteLo=?, " +
116 "RuteSo=?, KorelisteSo=?, " +
117 "Distributor=?, " +
118 "DBKBane=?, " +
119 "Aendret=now() " +
120 "WHERE id=? ";
121
122
123
124 try (Connection con = DBConnection.getConnection()) {
125 //con.setAutoCommit(false);
126
127 try (PreparedStatement stmt = con.prepareStatement(sql)) {
128 for (Address addr : addresses) {
129 stmt.setString(1, addr.ruteMandag);
130 stmt.setString(2, addr.korelisteMandag);
131 stmt.setString(3, addr.ruteTirsdag);
132 stmt.setString(4, addr.korelisteTirsdag);
133 stmt.setString(5, addr.ruteOnsdag);
134 stmt.setString(6, addr.korelisteOnsdag);
135 stmt.setString(7, addr.ruteTorsdag);
136 stmt.setString(8, addr.korelisteTorsdag);
137 stmt.setString(9, addr.ruteFredag);
138 stmt.setString(10, addr.korelisteFredag);
139 stmt.setString(11, addr.ruteLordag);
140 stmt.setString(12, addr.korelisteLordag);
141 stmt.setString(13, addr.ruteSondag);
142 stmt.setString(14, addr.korelisteSondag);
143
144 stmt.setString(15, addr.distributor);
145 stmt.setInt(16, addr.dbkBane);
146 stmt.setInt(17, addr.id);
147
148
149 stmt.execute();
150 if (stmt.getUpdateCount() != 1) {
151 System.out.println("Error executing update");
152 }
153
154 }
155 }
156
157 //con.commit();
158 } catch (SQLException e) {
159 System.out.println("Error updating addresses" + e.getMessage() );
160 }
161 }
162
163 private static String nullify(String str) {
164 if (str == null)
165 return null;
166
167 if (str.equals("")) {
168 return null;
169 } else {
170 return str;
171 }
172 }
173
174
175 /*
176 private static int safeInt(String str) {
177 try {
178 return Integer.parseInt( str );
179 } catch (NumberFormatException e) {
180 return 0;
181 }
182 }
183
184
185
186 private static String coalesce(String s1, String s2) {
187 if (s1 != null)
188 return s1;
189
190 return s2;
191 }
192
193 */
194 }

  ViewVC Help
Powered by ViewVC 1.1.20