· 9 years ago · Nov 08, 2016, 12:02 AM
1
2/*
3@DANE OSOBOWE
4 Dawid Lipinski, 02.11.2016
5 informatyka rok II, semestr 1, gr 4, nrIndex 238186
6@INFORMACJA CO STWORZONY PROGRAM REALIZUJE
7 Program samodzielnie (chyba ze nie ma internetu, mozna inaczej) pobiera plik txt ze strony natywnej, nastepenie odfiltrowuje i laduje dane z pliku txt z
8 opconalnie 100/1000/wszystkie(ok 6000) wynikami losowan lotto
9 (od 27.01.1957 do 22.10.2016+) do bazy danych. Pozwala wyswietlic wszystkie rekordy, rekordy z rpzedzialu czasowego,
10 pokazac najczesciej wystepujace numery, sprawdzicile razy i w jakich rekordach padla podana przez uzytkownika liczba, dodac rekord,
11 usunac rekord(na podstawie id) oraz zapisac wszystie te czynnosci i ich wyniki w tabelach historie oraz ogolnej tabeli rejestr uzytkowania.
12 Ponadto wyswietlic informacje o programie oraz wylaczyc program
13@CO TRZEBA ZROBIC,ABY POPRAWNIE URUCHOMIC PROGRAM
14 program uzywa sqlite-jdbc-3.8.11.2
15 Wyniki lotto w txt pobieraja sie same (http://www.mbnet.com.pl/dl.txt)
16 ps. Rownie dobrze mozna zaladowac wyniki miniLotka : http://www.mbnet.com.pl/el.txt
17*/
18
19import java.io.*;
20import java.net.MalformedURLException;
21import java.net.URL;
22import java.sql.*;
23import java.util.StringTokenizer;
24
25
26public class dbRoot {
27 public static final String DRIVER = "org.sqlite.JDBC";
28 public static final String DB_URL = "jdbc:sqlite:lottoDataBase.db";
29 private static Connection conn;
30 private static Statement stmt;
31 private static String fileAdress="http://www.mbnet.com.pl/dl.txt";
32
33 public static void noInternet(String source) throws SQLException, IOException, InterruptedException{
34 CreateTable();
35 LoadRecordsLottoNew(source,100);
36
37 }
38 public static void testSourceComp(String source) throws Exception{
39 try{
40 CreateTable();
41
42
43 String fileName=readAndSaveTxt(fileAdress);
44 String fileSource = source.trim()+fileName;
45
46 LoadRecordsLottoNew(fileSource);
47
48 }catch(SQLException o){
49 System.err.println("Problem z utworzeniem lub z zaladowaniem bazy");
50 }
51 }
52
53
54 public static void justDoIt() throws Exception{
55 try{
56 CreateTable();
57
58
59 String fileName=readAndSaveTxt(fileAdress);
60 String fileSource = fileName;
61
62 LoadRecordsLottoNew(fileSource);
63
64 }catch(SQLException o){
65 System.err.println("Problem z utworzeniem lub z zaladowaniem bazy");
66 }
67
68 }
69
70 public static void mehDoIt(int zakres) throws Exception{
71 CreateTable();
72
73 try{
74 String fileName=readAndSaveTxt(fileAdress);
75
76 String fileSource = fileName;
77
78 LoadRecordsLottoNew(fileSource,zakres+1);
79 }catch(Exception l){
80 System.err.println("Brak pliku.");
81 }
82 }
83
84
85 public static void CreateTable(){
86 //SPRAWDZENIA STEROWNIKA JDBC
87 try{
88 Class.forName(DRIVER);
89 }catch (ClassNotFoundException e) {
90 System.err.println("Brak sterownika JDBC");}
91
92 //NAWIAZANIE POLACZENIA Z BAZA DANYCH
93 try{
94 conn = DriverManager.getConnection(DB_URL);
95 stmt = conn.createStatement();
96 }catch (SQLException e){
97 System.err.println("Problem z otwarciem polaczenia");}
98
99 //USUWA TABELE
100 String resetTables = "DROP TABLE IF EXISTS lotto;DROP TABLE IF EXISTS datarecords;DROP TABLE IF EXISTS bestnumbers;DROP TABLE IF EXISTS howmanytimes;DROP TABLE IF EXISTSnewrecord;DROP TABLE IF EXISTS oldrecord;";
101 try{
102 stmt.execute(resetTables);
103 resultMethods.AddUsage("Usuniecie tabel bazy danych");
104 }catch(SQLException e) {
105 System.err.println("Blad przy usuwaniu tabeli");
106 e.printStackTrace();
107 }
108 //STRINGI DO TWORZENIA TABEL
109 String createTableLotto= "CREATE TABLE IF NOT EXISTS lotto (id INTEGER PRIMARY KEY AUTOINCREMENT, data DATE, l1 INTEGER, l2 INTEGER, l3, INTEGER,l4 INTEGER, l5 INTEGER, l6 INTEGER)";
110 String createTableDataRecords= "CREATE TABLE IF NOT EXISTS datarecords (id INTEGER PRIMARY KEY AUTOINCREMENT, requesttime DATETIME DEFAULT (DATETIME('now','localtime','+2 hour')), datefrom DATE, dateto DATE)";
111 String createTableBestNumbers= "CREATE TABLE IF NOT EXISTS bestnumbers (id INTEGER PRIMARY KEY AUTOINCREMENT, requesttime DATETIME DEFAULT (DATETIME('now','localtime')), numbers STRING)";
112 String createTableHowManyTimes="CREATE TABLE IF NOT EXISTS howmanytimes (id INTEGER PRIMARY KEY AUTOINCREMENT, requesttime DATETIME DEFAULT (DATETIME('now','localtime')), number INTEGER, howmanytimes INTEGER)";
113 String createTableAddRecord= "CREATE TABLE IF NOT EXISTS newrecord (id INTEGER PRIMARY KEY AUTOINCREMENT, requesttime DATETIME DEFAULT (DATETIME('now','localtime')), l1 INTEGER , l2 INTEGER, l3, INTEGER,l4 INTEGER, l5 INTEGER, l6 INTEGER)";
114 String createTableDeleteRecord="CREATE TABLE IF NOT EXISTS oldrecord (id INTEGER PRIMARY KEY AUTOINCREMENT, requesttime DATETIME DEFAULT (DATETIME('now','localtime')), datedeleted DATE, l1 INTEGER , l2 INTEGER, l3, INTEGER,l4 INTEGER, l5 INTEGER, l6 INTEGER)";
115 String createTableUsage = "CREATE TABLE IF NOT EXISTS usage (id INTEGER PRIMARY KEY AUTOINCREMENT, requesttime DATETIME DEFAULT (DATETIME('now','localtime')), usetype STRING)";
116 //TWORZY TABELE
117 try{
118 stmt.execute(createTableLotto);
119 stmt.execute(createTableDataRecords);
120 stmt.execute(createTableBestNumbers);
121 stmt.execute(createTableHowManyTimes);
122 stmt.execute(createTableAddRecord);
123 stmt.execute(createTableDeleteRecord);
124 stmt.execute(createTableUsage);
125 }catch (SQLException e) {
126 System.err.println("Blad przy tworzeniu tabeli");
127 e.printStackTrace();
128 }
129 resultMethods.AddUsage("Utworzenie tabel bazy danych");
130 try{
131 conn.close();
132 }catch(SQLException e){
133 System.err.println("Blad przy zamykaniu polaczenia");
134 e.printStackTrace();
135 }
136 }
137 public static void LoadRecordsLottoNew(String fileSource) throws IOException, SQLException{
138 //SPRAWDZENIA STEROWNIKA JDBC
139 //It obtains a reference to the class object with the FQCN (fully qualified class name) oracle.jdbc.driver.OracleDriver.
140 //It doesn't "do" anything in terms of connecting to a database, aside from ensure that the specified class is loaded by the current classloader.
141 try{
142 Class.forName(DRIVER);
143 }catch (ClassNotFoundException e) {
144 System.err.println("Brak sterownika JDBC");}
145
146 //NAWIAZANIE POLACZENIA Z BAZA DANYCH
147 try{
148 conn = DriverManager.getConnection(DB_URL);
149 stmt = conn.createStatement();
150
151 }catch (SQLException e){
152 System.err.println("Problem z otwarciem polaczenia");}
153
154 String sql;
155
156
157 FileReader lottoFileReader = new FileReader(fileSource);
158 FileReader lottoFileReader1 = new FileReader(fileSource);
159 //Sposob wczytywania znaleziony: http://stackoverflow.com/questions/28977308/read-all-lines-with-bufferedreader
160 try (BufferedReader buffer = new BufferedReader(lottoFileReader)){
161
162 int licznik = 1;
163 int iloscLini=0;
164 BufferedReader buffer1 = new BufferedReader(lottoFileReader1);
165 String line = new String();
166 while((line = buffer1.readLine()) != null){
167 iloscLini++;
168 }
169
170 while((line = buffer.readLine()) != null){//dopoki jest z czego czytac
171 //ROZDZIELANIE STRINGTOKANIZEREM
172 String rekordData=new String();
173 String wyniki=new String();
174 int[] rekordL=new int[6];
175 StringTokenizer glowny = new StringTokenizer(line.trim(), " ");
176 while(glowny.hasMoreTokens())
177 {
178 glowny.nextToken();//ominiecie ID
179 rekordData =glowny.nextToken();
180 wyniki=glowny.nextToken();
181 }
182 StringTokenizer numery = new StringTokenizer(wyniki,",");
183 while(numery.hasMoreTokens())
184 {
185 for(int i = 0; i<6;i ++)rekordL[i]=Integer.parseInt(numery.nextToken());
186 }
187 //ZAMIANA FORMATU DATY
188 char[] rekordDataCZle=rekordData.trim().toCharArray();
189 char[] rekordDataC = new char[10];
190 for(int i = 0; i < 4; i ++) rekordDataC[i]=rekordDataCZle[i+6];//zamiana na format YYYY-MM-DD
191 for(int i = 0; i < 2; i ++) rekordDataC[i+5]=rekordDataCZle[i+3];
192 for(int i = 0; i < 2; i ++) rekordDataC[i+8]=rekordDataCZle[i];
193 rekordDataC[4]='-';rekordDataC[7]='-';
194 rekordData="";
195 for(int i=0;i<10;i++)rekordData+=rekordDataC[i];
196
197 //WSADZENIE WSZYSTKIEGO DO BAZY
198 sql="INSERT INTO lotto (data,l1,l2,l3,l4,l5,l6) VALUES ('"+rekordData.trim()+"',"+rekordL[0]+","+rekordL[1]+","+rekordL[2]+","+rekordL[3]+","+rekordL[4]+","+rekordL[5]+")";
199 stmt.execute(sql); //wsadzenie do bazy INSERT INTO db_name (x_name,y_name) VALUES (x_value, y_value)
200
201 //lottoFileReader.close();//zamkniecie czytania z pliku
202 subMethods.cls();
203 System.out.println(" Pobieranie ze strony rekordow i wczytywanie do bazy danych.");
204 System.out.println(" ("+licznik+" of "+iloscLini+")");
205 System.out.println();
206
207 System.out.println(" ===================================================");
208 System.out.print(" ");
209 double unoProc=iloscLini/100;
210 double tenProc=iloscLini/50;
211 for( int proc=0; proc<100; proc++){
212
213 if(licznik>=tenProc*proc && licznik<tenProc*(proc+1)) for(int i = 0; i < proc; i ++)System.out.print("|");
214
215 }
216 System.out.println();
217 System.out.println(" ===================================================");
218
219 for( int proc=0; proc<100; proc++){
220
221 if(licznik>=unoProc*proc && licznik<unoProc*(proc+1)) System.out.println(" "+proc+"% ");
222 if(licznik==iloscLini && proc==1) System.out.println(" 100%");
223
224 }
225 licznik++;
226 }
227 System.out.println();
228 System.out.println(" Prawidlowo zaladowano wyniki!");
229 resultMethods.AddUsage("Zaladowanie z pliku txt do bazy danych "+licznik+" rekordow");
230
231 buffer.close();
232 lottoFileReader.close();
233 buffer1.close();
234 lottoFileReader1.close();
235
236 try{
237 conn.close();
238 }catch(SQLException e){
239 System.err.println("Blad przy zamykaniu poalczenia");
240 } }
241
242 }
243 public static void LoadRecordsLottoNew(String fileSource,int zakres) throws IOException, SQLException{
244 //SPRAWDZENIA STEROWNIKA JDBC
245 //It obtains a reference to the class object with the FQCN (fully qualified class name) oracle.jdbc.driver.OracleDriver.
246 //It doesn't "do" anything in terms of connecting to a database, aside from ensure that the specified class is loaded by the current classloader.
247 try{
248 Class.forName(DRIVER);
249 }catch (ClassNotFoundException e) {
250 System.err.println("Brak sterownika JDBC");}
251
252 //NAWIAZANIE POLACZENIA Z BAZA DANYCH
253 try{
254 conn = DriverManager.getConnection(DB_URL);
255 stmt = conn.createStatement();
256
257 }catch (SQLException e){
258 System.err.println("Problem z otwarciem polaczenia");}
259
260 String sql;
261
262
263 FileReader lottoFileReader = new FileReader(fileSource);
264 FileReader lottoFileReader1 = new FileReader(fileSource);
265 //Sposob wczytywania znaleziony: http://stackoverflow.com/questions/28977308/read-all-lines-with-bufferedreader
266 try (BufferedReader buffer = new BufferedReader(lottoFileReader)){
267 int licznik = 1;
268 BufferedReader buffer1 = new BufferedReader(lottoFileReader1);
269 String line = new String();
270
271 while((line = buffer.readLine()) != null && licznik<zakres){//dopoki jest z czego czytac
272 //ROZDZIELANIE STRINGTOKANIZEREM
273 String rekordData=new String();
274 String wyniki=new String();
275 int[] rekordL=new int[6];
276 StringTokenizer glowny = new StringTokenizer(line.trim(), " ");
277 while(glowny.hasMoreTokens())
278 {
279 glowny.nextToken();//ominiecie ID
280 rekordData =glowny.nextToken();
281 wyniki=glowny.nextToken();
282 }
283 StringTokenizer numery = new StringTokenizer(wyniki,",");
284 while(numery.hasMoreTokens())
285 {
286 for(int i = 0; i<6;i ++)rekordL[i]=Integer.parseInt(numery.nextToken());
287 }
288 //ZAMIANA FORMATU DATY
289 char[] rekordDataCZle=rekordData.trim().toCharArray();
290 char[] rekordDataC = new char[10];
291 for(int i = 0; i < 4; i ++) rekordDataC[i]=rekordDataCZle[i+6];//zamiana na format YYYY-MM-DD
292 for(int i = 0; i < 2; i ++) rekordDataC[i+5]=rekordDataCZle[i+3];
293 for(int i = 0; i < 2; i ++) rekordDataC[i+8]=rekordDataCZle[i];
294 rekordDataC[4]='-';rekordDataC[7]='-';
295 rekordData="";
296 for(int i=0;i<10;i++)rekordData+=rekordDataC[i];
297
298 //WSADZENIE WSZYSTKIEGO DO BAZY
299 sql="INSERT INTO lotto (data,l1,l2,l3,l4,l5,l6) VALUES ('"+rekordData.trim()+"',"+rekordL[0]+","+rekordL[1]+","+rekordL[2]+","+rekordL[3]+","+rekordL[4]+","+rekordL[5]+")";
300 stmt.execute(sql); //wsadzenie do bazy INSERT INTO db_name (x_name,y_name) VALUES (x_value, y_value)
301
302 //lottoFileReader.close();//zamkniecie czytania z pliku
303 subMethods.cls();
304 System.out.println(" Pobieranie ze strony rekordow i wczytywanie do bazy danych.");
305 System.out.println(" ("+licznik+" of "+zakres+")");
306 System.out.println();
307
308 System.out.println(" ===================================================");
309 System.out.print(" ");
310 double unoProc=zakres/100;
311 double tenProc=zakres/50;
312 for( int proc=0; proc<100; proc++){
313
314 if(licznik>=tenProc*proc && licznik<tenProc*(proc+1)) for(int i = 0; i < proc; i ++)System.out.print("|");
315
316 }
317 System.out.println();
318 System.out.println(" ===================================================");
319
320 for( int proc=0; proc<100; proc++){
321
322 if(licznik>=unoProc*proc && licznik<unoProc*(proc+1)) System.out.println(" "+proc+"% ");
323 if(licznik==zakres && proc==1) System.out.println(" 100%");
324
325 }
326
327
328
329 licznik++;
330
331 }
332 System.out.println();
333 System.out.println(" Prawidlowo zaladowano wyniki!");
334 resultMethods.AddUsage("Zaladowanie z pliku txt do bazy danych "+licznik+" rekordow");
335
336 buffer.close();
337 lottoFileReader.close();
338 buffer1.close();
339 lottoFileReader1.close();
340
341
342 try{
343 conn.close();
344 }catch(SQLException e){
345 System.err.println("Blad przy zamykaniu poalczenia");
346 } }
347
348
349
350
351
352 }
353 //NIE ZNALEM JESZCZE TOKENIZERA--->
354 public static void LoadRecordsLottoOld(String fileSource) throws SQLException, IOException, InterruptedException{
355 //SPRAWDZENIA STEROWNIKA JDBC
356 //It obtains a reference to the class object with the FQCN (fully qualified class name) oracle.jdbc.driver.OracleDriver.
357 //It doesn't "do" anything in terms of connecting to a database, aside from ensure that the specified class is loaded by the current classloader.
358 try{
359 Class.forName(DRIVER);
360 }catch (ClassNotFoundException e) {
361 System.err.println("Brak sterownika JDBC");}
362
363 //NAWIAZANIE POLACZENIA Z BAZA DANYCH
364 try{
365 conn = DriverManager.getConnection(DB_URL);
366 stmt = conn.createStatement();
367
368 }catch (SQLException e){
369 System.err.println("Problem z otwarciem polaczenia");}
370
371 String sql;
372
373
374 FileReader lottoFileReader = new FileReader(fileSource);
375 FileReader lottoFileReader1 = new FileReader(fileSource);
376 //Sposob wczytywania znaleziony: http://stackoverflow.com/questions/28977308/read-all-lines-with-bufferedreader
377 try (BufferedReader buffer = new BufferedReader(lottoFileReader)){
378
379 int licznik = 1;
380 int iloscLini=0;
381 BufferedReader buffer1 = new BufferedReader(lottoFileReader1);
382 String line = new String();
383 while((line = buffer1.readLine()) != null){
384 iloscLini++;
385 }
386
387 while((line = buffer.readLine()) != null){//dopoki jest z czego czytac
388 //WCZYTANIE LINI
389 String rekordS = line;//cala linia w stringu
390 char[] rekordC = new char[50];
391 rekordC=rekordS.toCharArray();//cala linia w tablicy char
392 //WCZYTANIE ID - POTRZEBNA DLUGOSC
393 char[] rekordIdC = new char[4];//tablica char do operacji na ID
394 for(int i = 0; rekordC[i] != '.'; i++) rekordIdC[i] = rekordC[i];//przepisanie z calej lini
395 String rekordIdS = "";
396 for (int i = 0; i < rekordIdC.length; i++) rekordIdS = rekordIdS + rekordIdC[i];//przepisanie z tablicy do stringa
397
398 //WCZYTYWANIE DATY
399 char[] rekordDataCZle = new char[10]; int dataCount = 0;//tablica do przechowania daty w formacie DD.MM.YYYY
400 for (int i =rekordIdS.trim().length()+2 ; i <rekordIdS.trim().length()+12 ;i++){ rekordDataCZle[dataCount++] += rekordC[i];}
401 char[] rekordDataC = new char[10];
402 for(int i = 0; i < 4; i ++) rekordDataC[i]=rekordDataCZle[i+6];//zamiana na format YYYY-MM-DD
403 for(int i = 0; i < 2; i ++) rekordDataC[i+5]=rekordDataCZle[i+3];
404 for(int i = 0; i < 2; i ++) rekordDataC[i+8]=rekordDataCZle[i];
405 rekordDataC[4]='-';rekordDataC[7]='-';
406
407 String rekordData = new String();
408 for ( int i = 0; i < rekordDataC.length; i ++) rekordData = rekordData + rekordDataC[i];//przepisanie do stringa
409 //WCZYTANIE NUMEROW
410 String rekordNumbersS = new String();//string do przechowywania numerow
411 for (int i = rekordIdS.trim().length()+2+rekordData.length(); i< rekordS.trim().length();i++) rekordNumbersS += rekordC[i];
412
413 char[] rekordNumbersC = new char[rekordNumbersS.length()];
414 rekordNumbersC =rekordNumbersS.toCharArray();//przepisanie do talbicy char
415
416 int rekordWynikStart = rekordIdS.trim().length()+2+rekordData.length()+1;//lokacja pierwszej cyfry pierwszego numeru
417
418 int[] commaFinder = new int[5]; int commaFinderCounter = 0;;//tablica do przechowywania lokacji przecinkow
419 for(int i = 0; i < rekordNumbersC.length; i ++){ if(rekordNumbersC[i]==',') {commaFinder[commaFinderCounter] = i;commaFinderCounter++;}}
420
421 char [] rekordL1C = new char[2];//rekord 1 jako tablica [2]
422 for (int j= 0; j < commaFinder[0]-1 ;j++) rekordL1C[j] = rekordC[rekordWynikStart+j];//od poczatku do pierwszego przecinka
423 String rekordL1S = ""; for(int i = 0; i < rekordL1C.length; i ++) rekordL1S = rekordL1S + rekordL1C[i];
424 int rekordL1 = Integer.parseInt(rekordL1S.trim());//lczba pierwsza jako liczba calkowita
425
426 char [] rekordL2C = new char[2]; int l1f=0;//liczba 2
427 for (int i = rekordWynikStart+commaFinder[0]; i < rekordWynikStart+commaFinder[1]-1; i ++ ) {rekordL2C[l1f] =rekordC[rekordWynikStart+commaFinder[0]+l1f];l1f++;}
428 String rekordL2S = ""; for(int i = 0; i < rekordL2C.length; i ++) rekordL2S = rekordL2S + rekordL2C[i];
429 int rekordL2 = Integer.parseInt(rekordL2S.trim());//liczba 2 jako int
430
431 char[] rekordL3C = new char[2]; l1f = 0;//liczba 3
432 for(int i = rekordWynikStart+commaFinder[1]; i < rekordWynikStart+commaFinder[2]-1;i++){ rekordL3C[l1f] = rekordC[rekordWynikStart+commaFinder[1]+l1f];l1f++;}
433 String rekordL3S = ""; for(int i = 0; i < rekordL3C.length; i ++) rekordL3S = rekordL3S + rekordL3C[i];
434 int rekordL3 = Integer.parseInt(rekordL3S.trim());//liczba 3 jako int
435
436 char[] rekordL4C = new char[2]; l1f = 0;//liczba 4
437 for(int i = rekordWynikStart+commaFinder[2]; i < rekordWynikStart+commaFinder[3]-1;i++){ rekordL4C[l1f] = rekordC[rekordWynikStart+commaFinder[2]+l1f];l1f++;}
438 String rekordL4S = ""; for(int i = 0; i < rekordL4C.length; i ++) rekordL4S = rekordL4S + rekordL4C[i];
439 int rekordL4 = Integer.parseInt(rekordL4S.trim());//liczba 4 jako int
440
441 char[] rekordL5C = new char[2]; l1f = 0;//liczba 5
442 for(int i = rekordWynikStart+commaFinder[3]; i < rekordWynikStart+commaFinder[4]-1;i++){ rekordL5C[l1f] = rekordC[rekordWynikStart+commaFinder[3]+l1f];l1f++;}
443 String rekordL5S = ""; for(int i = 0; i < rekordL5C.length; i ++) rekordL5S = rekordL5S + rekordL5C[i];
444 int rekordL5 = Integer.parseInt(rekordL5S.trim());//liczba 5 jako int
445
446 char[] rekordL6C = new char[2]; l1f = 0;//liczba 6
447 for(int i = rekordWynikStart+commaFinder[4]; i < rekordWynikStart+rekordNumbersS.trim().length();i++){ rekordL6C[l1f] = rekordC[rekordWynikStart+commaFinder[4]+l1f];l1f++;}
448 String rekordL6S = ""; for(int i = 0; i < rekordL6C.length; i ++) rekordL6S = rekordL6S + rekordL6C[i];
449 int rekordL6 = Integer.parseInt(rekordL6S.trim());//liczba 6 jako int
450
451
452
453 //WSADZENIE WSZYSTKIEGO DO BAZY
454 sql="INSERT INTO lotto (data,l1,l2,l3,l4,l5,l6) VALUES ('"+rekordData+"',"+rekordL1+","+rekordL2+","+rekordL3+","+rekordL4+","+rekordL5+","+rekordL6+")";
455 stmt.execute(sql); //wsadzenie do bazy INSERT INTO db_name (x_name,y_name) VALUES (x_value, y_value)
456
457 //lottoFileReader.close();//zamkniecie czytania z pliku
458 subMethods.cls();
459 System.out.println(" Pobieranie ze strony rekordow i wczytywanie do bazy danych.");
460 System.out.println(" ("+licznik+" of "+iloscLini+")");
461 System.out.println();
462
463 System.out.println(" ===================================================");
464 System.out.print(" ");
465 double unoProc=iloscLini/100;
466 double tenProc=iloscLini/50;
467 for( int proc=0; proc<100; proc++){
468
469 if(licznik>=tenProc*proc && licznik<tenProc*(proc+1)) for(int i = 0; i < proc; i ++)System.out.print("|");
470
471 }
472 System.out.println();
473 System.out.println(" ===================================================");
474
475 for( int proc=0; proc<100; proc++){
476
477 if(licznik>=unoProc*proc && licznik<unoProc*(proc+1)) System.out.println(" "+proc+"% ");
478 if(licznik==iloscLini && proc==1) System.out.println(" 100%");
479
480 }
481
482
483
484 licznik++;
485
486 }
487 System.out.println();
488 System.out.println(" Prawidlowo zaladowano wyniki!");
489 resultMethods.AddUsage("Zaladowanie z pliku txt do bazy danych "+licznik+" rekordow");
490
491 buffer.close();
492 lottoFileReader.close();
493 buffer1.close();
494 lottoFileReader1.close();
495
496
497 try{
498 conn.close();
499 }catch(SQLException e){
500 System.err.println("Blad przy zamykaniu poalczenia");
501 } }
502
503
504
505 }
506 //NIE ZNALEM JESZCZE TOKENIZERA--->
507 public static void LoadRecordsLotto(String fileSource,int zakres) throws SQLException, IOException, InterruptedException{
508 //SPRAWDZENIA STEROWNIKA JDBC
509 //It obtains a reference to the class object with the FQCN (fully qualified class name) oracle.jdbc.driver.OracleDriver.
510 //It doesn't "do" anything in terms of connecting to a database, aside from ensure that the specified class is loaded by the current classloader.
511 try{
512 Class.forName(DRIVER);
513 }catch (ClassNotFoundException e) {
514 System.err.println("Brak sterownika JDBC");}
515
516 //NAWIAZANIE POLACZENIA Z BAZA DANYCH
517 try{
518 conn = DriverManager.getConnection(DB_URL);
519 stmt = conn.createStatement();
520
521 }catch (SQLException e){
522 System.err.println("Problem z otwarciem polaczenia");}
523
524 String sql;
525
526
527 FileReader lottoFileReader = new FileReader(fileSource);
528 FileReader lottoFileReader1 = new FileReader(fileSource);
529 //Sposob wczytywania znaleziony: http://stackoverflow.com/questions/28977308/read-all-lines-with-bufferedreader
530 try (BufferedReader buffer = new BufferedReader(lottoFileReader)){
531 int zakres1 = 0;
532 int licznik = 1;
533
534 BufferedReader buffer1 = new BufferedReader(lottoFileReader1);
535 String line = new String();
536
537
538 while((line = buffer.readLine()) != null && zakres1<zakres){//dopoki jest z czego czytac
539 zakres1++;
540 //WCZYTANIE LINI
541 String rekordS = line;//cala liniaw stringu
542 char[] rekordC = new char[50];
543 rekordC=rekordS.toCharArray();//cala linia w tablicy char
544 //WCZYTANIE ID - POTRZEBNA DLUGOSC
545 char[] rekordIdC = new char[4];//tablica char do operacji na ID
546 for(int i = 0; rekordC[i] != '.'; i++) rekordIdC[i] = rekordC[i];//przepisanie z calej lini
547 String rekordIdS = "";
548 for (int i = 0; i < rekordIdC.length; i++) rekordIdS = rekordIdS + rekordIdC[i];//przepisanie z tablicy do stringa
549
550 //WCZYTYWANIE DATY
551 char[] rekordDataCZle = new char[10]; int dataCount = 0;//tablica do przechowania daty w formacie DD.MM.YYYY
552 for (int i =rekordIdS.trim().length()+2 ; i <rekordIdS.trim().length()+12 ;i++){ rekordDataCZle[dataCount++] += rekordC[i];}
553 char[] rekordDataC = new char[10];
554 for(int i = 0; i < 4; i ++) rekordDataC[i]=rekordDataCZle[i+6];//zamiana na format YYYY-MM-DD
555 for(int i = 0; i < 2; i ++) rekordDataC[i+5]=rekordDataCZle[i+3];
556 for(int i = 0; i < 2; i ++) rekordDataC[i+8]=rekordDataCZle[i];
557 rekordDataC[4]='-';rekordDataC[7]='-';
558
559 String rekordData = new String();
560 for ( int i = 0; i < rekordDataC.length; i ++) rekordData = rekordData + rekordDataC[i];//przepisanie do stringa
561 //WCZYTANIE NUMEROW
562 String rekordNumbersS = new String();//string do przechowywania numerow
563 for (int i = rekordIdS.trim().length()+2+rekordData.length(); i< rekordS.trim().length();i++) rekordNumbersS += rekordC[i];
564
565 char[] rekordNumbersC = new char[rekordNumbersS.length()];
566 rekordNumbersC =rekordNumbersS.toCharArray();//przepisanie do talbicy char
567
568 int rekordWynikStart = rekordIdS.trim().length()+2+rekordData.length()+1;//lokacja pierwszej cyfry pierwszego numeru
569
570 int[] commaFinder = new int[5]; int commaFinderCounter = 0;;//tablica do przechowywania lokacji przecinkow
571 for(int i = 0; i < rekordNumbersC.length; i ++){ if(rekordNumbersC[i]==',') {commaFinder[commaFinderCounter] = i;commaFinderCounter++;}}
572
573 char [] rekordL1C = new char[2];//rekord 1 jako tablica [2]
574 for (int j= 0; j < commaFinder[0]-1 ;j++) rekordL1C[j] = rekordC[rekordWynikStart+j];//od poczatku do pierwszego przecinka
575 String rekordL1S = ""; for(int i = 0; i < rekordL1C.length; i ++) rekordL1S = rekordL1S + rekordL1C[i];
576 int rekordL1 = Integer.parseInt(rekordL1S.trim());//lczba pierwsza jako liczba calkowita
577
578 char [] rekordL2C = new char[2]; int l1f=0;//liczba 2
579 for (int i = rekordWynikStart+commaFinder[0]; i < rekordWynikStart+commaFinder[1]-1; i ++ ) {rekordL2C[l1f] =rekordC[rekordWynikStart+commaFinder[0]+l1f];l1f++;}
580 String rekordL2S = ""; for(int i = 0; i < rekordL2C.length; i ++) rekordL2S = rekordL2S + rekordL2C[i];
581 int rekordL2 = Integer.parseInt(rekordL2S.trim());//liczba 2 jako int
582
583 char[] rekordL3C = new char[2]; l1f = 0;//liczba 3
584 for(int i = rekordWynikStart+commaFinder[1]; i < rekordWynikStart+commaFinder[2]-1;i++){ rekordL3C[l1f] = rekordC[rekordWynikStart+commaFinder[1]+l1f];l1f++;}
585 String rekordL3S = ""; for(int i = 0; i < rekordL3C.length; i ++) rekordL3S = rekordL3S + rekordL3C[i];
586 int rekordL3 = Integer.parseInt(rekordL3S.trim());//liczba 3 jako int
587
588 char[] rekordL4C = new char[2]; l1f = 0;//liczba 4
589 for(int i = rekordWynikStart+commaFinder[2]; i < rekordWynikStart+commaFinder[3]-1;i++){ rekordL4C[l1f] = rekordC[rekordWynikStart+commaFinder[2]+l1f];l1f++;}
590 String rekordL4S = ""; for(int i = 0; i < rekordL4C.length; i ++) rekordL4S = rekordL4S + rekordL4C[i];
591 int rekordL4 = Integer.parseInt(rekordL4S.trim());//liczba 4 jako int
592
593 char[] rekordL5C = new char[2]; l1f = 0;//liczba 5
594 for(int i = rekordWynikStart+commaFinder[3]; i < rekordWynikStart+commaFinder[4]-1;i++){ rekordL5C[l1f] = rekordC[rekordWynikStart+commaFinder[3]+l1f];l1f++;}
595 String rekordL5S = ""; for(int i = 0; i < rekordL5C.length; i ++) rekordL5S = rekordL5S + rekordL5C[i];
596 int rekordL5 = Integer.parseInt(rekordL5S.trim());//liczba 5 jako int
597
598 char[] rekordL6C = new char[2]; l1f = 0;//liczba 6
599 for(int i = rekordWynikStart+commaFinder[4]; i < rekordWynikStart+rekordNumbersS.trim().length();i++){ rekordL6C[l1f] = rekordC[rekordWynikStart+commaFinder[4]+l1f];l1f++;}
600 String rekordL6S = ""; for(int i = 0; i < rekordL6C.length; i ++) rekordL6S = rekordL6S + rekordL6C[i];
601 int rekordL6 = Integer.parseInt(rekordL6S.trim());//liczba 6 jako int
602
603
604
605 //WSADZENIE WSZYSTKIEGO DO BAZY
606 sql="INSERT INTO lotto (data,l1,l2,l3,l4,l5,l6) VALUES ('"+rekordData+"',"+rekordL1+","+rekordL2+","+rekordL3+","+rekordL4+","+rekordL5+","+rekordL6+")";
607 stmt.execute(sql); //wsadzenie do bazy INSERT INTO db_name (x_name,y_name) VALUES (x_value, y_value)
608
609
610 subMethods.cls();
611 System.out.println(" Pobieranie ze strony rekordow i wczytywanie do bazy danych.");
612 System.out.println(" ("+licznik+" of "+zakres+")");
613 System.out.println();
614
615 System.out.println(" ===================================================");
616 System.out.print(" ");
617 double unoProc=zakres/100;
618 double tenProc=zakres/50;
619 for( int proc=0; proc<100; proc++){
620
621 if(licznik>=tenProc*proc && licznik<tenProc*(proc+1)) for(int i = 0; i < proc; i ++)System.out.print("|");
622
623 }
624 System.out.println();
625 System.out.println(" ===================================================");
626
627 for( int proc=0; proc<100; proc++){
628
629 if(licznik>=unoProc*proc && licznik<unoProc*(proc+1)) System.out.println(" "+proc+"% ");
630 if(licznik==zakres && proc==1) System.out.println(" 100%");
631
632 }
633
634
635
636 licznik++;
637
638 }
639 System.out.println();
640 System.out.println(" Prawidlowo zaladowano wyniki!");
641 resultMethods.AddUsage("Zaladowanie z pliku txt do bazy danych "+licznik+" rekordow");
642
643 buffer.close();
644 lottoFileReader.close();
645 buffer1.close();
646 lottoFileReader1.close();
647
648
649 try{
650 conn.close();
651 }catch(SQLException e){
652 System.err.println("Blad przy zamykaniu poalczenia");
653 } }
654
655
656
657 }
658
659
660 static String readAndSave(URL url) throws Exception {//http://forum.4programmers.net/Java/100820-Pobranie_kodu_strony_HTML?p=343006#id343006
661
662 BufferedReader in = new BufferedReader(
663 new InputStreamReader(
664 url.openStream() // zwraca InputStream zwiazany z URLem
665 )
666 );
667
668 String fname = null;
669 StringTokenizer st = new StringTokenizer(
670 url.getFile(), // <- zwraca nazwe pliku dla URLa
671 "/" //odcinamy domene pobieramu url
672 );
673 // System.out.println(url);
674 while (st.hasMoreTokens()) fname = st.nextToken(); // pobieramy nazwe pliku
675 // pod ktora ma byc zachowany
676 if(fname == null){
677 fname = "index.html"; //jesli fname okaze sie nullem
678 } //fname ustawiamy na index.html
679
680 BufferedWriter out = new BufferedWriter(new FileWriter(fname));
681
682 String s;
683 while ((s = in.readLine()) != null) {//odczyt ze strumienia i
684 out.write(s); //zapis do pliku
685 out.newLine();
686 }
687 in.close(); //zamkniecie strumieni
688 out.close();
689 in.close();
690 return fname;
691 }
692
693 public static String readAndSaveTxt(String adres) throws Exception{
694 String fileName = new String();
695 try{
696
697 URL url= new URL(adres);
698 fileName=readAndSave(url);
699 }catch(MalformedURLException e){
700 System.err.println("Nie udalo sie pobrac pliku z bazy.");
701
702 }
703 resultMethods.AddUsage("Pobranie danych ze strony");
704 return fileName;
705
706 }
707}