Commit 2fcb5b0d by Patryk Czarnik

Przykłądy Apache - Commons

parent 350f8014
employee_id;first_name;last_name;email;phone_number;hire_date;job_id;salary;commission_pct;manager_id;department_id
100;Steven;King;SKING;515.123.4567;1987-06-17;AD_PRES;24000;;;90
101;Neena;Kochhar;NKOCHHAR;515.123.4568;1989-09-21;AD_VP;17000;;100;90
102;Lex;De Haan;LDEHAAN;515.123.4569;1993-01-13;AD_VP;17000;;100;90
103;Alexander;Hunold;AHUNOLD;590.423.4567;1990-01-03;IT_PROG;9000;;102;60
104;Bruce;Ernst;BERNST;590.423.4568;1991-05-21;IT_PROG;6000;;103;60
105;David;Austin;DAUSTIN;590.423.4569;1997-06-25;IT_PROG;4800;;103;60
106;Valli;Pataballa;VPATABAL;590.423.4560;1998-02-05;IT_PROG;4800;;103;60
107;Diana;Lorentz;DLORENTZ;590.423.5567;1999-02-07;IT_PROG;4200;;103;60
108;Nancy;Greenberg;NGREENBE;515.124.4569;1994-08-17;FI_MGR;12000;;101;100
109;Daniel;Faviet;DFAVIET;515.124.4169;1994-08-16;FI_ACCOUNT;9000;;108;100
110;John;Chen;JCHEN;515.124.4269;1997-09-28;FI_ACCOUNT;8200;;108;100
111;Ismael;Sciarra;ISCIARRA;515.124.4369;1997-09-30;FI_ACCOUNT;7700;;108;100
112;Jose Manuel;Urman;JMURMAN;515.124.4469;1998-03-07;FI_ACCOUNT;7800;;108;100
113;Luis;Popp;LPOPP;515.124.4567;1999-12-07;FI_ACCOUNT;6900;;108;100
114;Den;Raphaely;DRAPHEAL;515.127.4561;1994-12-07;PU_MAN;11000;;100;30
115;Alexander;Khoo;AKHOO;515.127.4562;1995-05-18;PU_CLERK;3100;;114;30
116;Shelli;Baida;SBAIDA;515.127.4563;1997-12-24;PU_CLERK;2900;;114;30
117;Sigal;Tobias;STOBIAS;515.127.4564;1997-07-24;PU_CLERK;2800;;114;30
118;Guy;Himuro;GHIMURO;515.127.4565;1998-11-15;PU_CLERK;2600;;114;30
119;Karen;Colmenares;KCOLMENA;515.127.4566;1999-08-10;PU_CLERK;2500;;114;30
120;Matthew;Weiss;MWEISS;650.123.1234;1996-07-18;ST_MAN;8000;;100;50
121;Adam;Fripp;AFRIPP;650.123.2234;1997-04-10;ST_MAN;8200;;100;50
122;Payam;Kaufling;PKAUFLIN;650.123.3234;1995-05-01;ST_MAN;7900;;100;50
123;Shanta;Vollman;SVOLLMAN;650.123.4234;1997-10-10;ST_MAN;6500;;100;50
124;Kevin;Mourgos;KMOURGOS;650.123.5234;1999-11-16;ST_MAN;5800;;100;50
125;Julia;Nayer;JNAYER;650.124.1214;1997-07-16;ST_CLERK;3200;;120;50
126;Irene;Mikkilineni;IMIKKILI;650.124.1224;1998-08-28;ST_CLERK;2700;;120;50
127;James;Landry;JLANDRY;650.124.1334;1999-01-14;ST_CLERK;2400;;120;50
128;Steven;Markle;SMARKLE;650.124.1434;2000-03-08;ST_CLERK;2200;;120;50
129;Laura;Bissot;LBISSOT;650.124.5234;1997-08-20;ST_CLERK;3300;;121;50
130;Mozhe;Atkinson;MATKINSO;650.124.6234;1997-10-30;ST_CLERK;2800;;121;50
131;James;Marlow;JAMRLOW;650.124.7234;1997-02-16;ST_CLERK;2500;;121;50
132;TJ;Olson;TJOLSON;650.124.8234;1999-04-10;ST_CLERK;2100;;121;50
133;Jason;Mallin;JMALLIN;650.127.1934;1996-06-14;ST_CLERK;3300;;122;50
134;Michael;Rogers;MROGERS;650.127.1834;1998-08-26;ST_CLERK;2900;;122;50
135;Ki;Gee;KGEE;650.127.1734;1999-12-12;ST_CLERK;2400;;122;50
136;Hazel;Philtanker;HPHILTAN;650.127.1634;2000-02-06;ST_CLERK;2200;;122;50
137;Renske;Ladwig;RLADWIG;650.121.1234;1995-07-14;ST_CLERK;3600;;123;50
138;Stephen;Stiles;SSTILES;650.121.2034;1997-10-26;ST_CLERK;3200;;123;50
139;John;Seo;JSEO;650.121.2019;1998-02-12;ST_CLERK;2700;;123;50
140;Joshua;Patel;JPATEL;650.121.1834;1998-04-06;ST_CLERK;2500;;123;50
141;Trenna;Rajs;TRAJS;650.121.8009;1995-10-17;ST_CLERK;3500;;124;50
142;Curtis;Davies;CDAVIES;650.121.2994;1997-01-29;ST_CLERK;3100;;124;50
143;Randall;Matos;RMATOS;650.121.2874;1998-03-15;ST_CLERK;2600;;124;50
144;Peter;Vargas;PVARGAS;650.121.2004;1998-07-09;ST_CLERK;2500;;124;50
145;John;Russell;JRUSSEL;011.44.1344.429268;1996-10-01;SA_MAN;14000;0.4;100;80
146;Karen;Partners;KPARTNER;011.44.1344.467268;1997-01-05;SA_MAN;13500;0.3;100;80
147;Alberto;Errazuriz;AERRAZUR;011.44.1344.429278;1997-03-10;SA_MAN;12000;0.3;100;80
148;Gerald;Cambrault;GCAMBRAU;011.44.1344.619268;1999-10-15;SA_MAN;11000;0.3;100;80
149;Eleni;Zlotkey;EZLOTKEY;011.44.1344.429018;2000-01-29;SA_MAN;10500;0.2;100;80
150;Peter;Tucker;PTUCKER;011.44.1344.129268;1997-01-30;SA_REP;10000;0.3;145;80
151;David;Bernstein;DBERNSTE;011.44.1344.345268;1997-03-24;SA_REP;9500;0.25;145;80
152;Peter;Hall;PHALL;011.44.1344.478968;1997-08-20;SA_REP;9000;0.25;145;80
153;Christopher;Olsen;COLSEN;011.44.1344.498718;1998-03-30;SA_REP;8000;0.2;145;80
154;Nanette;Cambrault;NCAMBRAU;011.44.1344.987668;1998-12-09;SA_REP;7500;0.2;145;80
155;Oliver;Tuvault;OTUVAULT;011.44.1344.486508;1999-11-23;SA_REP;7000;0.15;145;80
156;Janette;King;JKING;011.44.1345.429268;1996-01-30;SA_REP;10000;0.35;146;80
157;Patrick;Sully;PSULLY;011.44.1345.929268;1996-03-04;SA_REP;9500;0.35;146;80
158;Allan;McEwen;AMCEWEN;011.44.1345.829268;1996-08-01;SA_REP;9000;0.35;146;80
159;Lindsey;Smith;LSMITH;011.44.1345.729268;1997-03-10;SA_REP;8000;0.3;146;80
160;Louise;Doran;LDORAN;011.44.1345.629268;1997-12-15;SA_REP;7500;0.3;146;80
161;Sarath;Sewall;SSEWALL;011.44.1345.529268;1998-11-03;SA_REP;7000;0.25;146;80
162;Clara;Vishney;CVISHNEY;011.44.1346.129268;1997-11-11;SA_REP;10500;0.25;147;80
163;Danielle;Greene;DGREENE;011.44.1346.229268;1999-03-19;SA_REP;9500;0.15;147;80
164;Mattea;Marvins;MMARVINS;011.44.1346.329268;2000-01-24;SA_REP;7200;0.1;147;80
165;David;Lee;DLEE;011.44.1346.529268;2000-02-23;SA_REP;6800;0.1;147;80
166;Sundar;Ande;SANDE;011.44.1346.629268;2000-03-24;SA_REP;6400;0.1;147;80
167;Amit;Banda;ABANDA;011.44.1346.729268;2000-04-21;SA_REP;6200;0.1;147;80
168;Lisa;Ozer;LOZER;011.44.1343.929268;1997-03-11;SA_REP;11500;0.25;148;80
169;Harrison;Bloom;HBLOOM;011.44.1343.829268;1998-03-23;SA_REP;10000;0.2;148;80
170;Tayler;Fox;TFOX;011.44.1343.729268;1998-01-24;SA_REP;9600;0.2;148;80
171;William;Smith;WSMITH;011.44.1343.629268;1999-02-23;SA_REP;7400;0.15;148;80
172;Elizabeth;Bates;EBATES;011.44.1343.529268;1999-03-24;SA_REP;7300;0.15;148;80
173;Sundita;Kumar;SKUMAR;011.44.1343.329268;2000-04-21;SA_REP;6100;0.1;148;80
174;Ellen;Abel;EABEL;011.44.1644.429267;1996-05-11;SA_REP;11000;0.3;149;80
175;Alyssa;Hutton;AHUTTON;011.44.1644.429266;1997-03-19;SA_REP;8800;0.25;149;80
176;Jonathon;Taylor;JTAYLOR;011.44.1644.429265;1998-03-24;SA_REP;8600;0.2;149;80
177;Jack;Livingston;JLIVINGS;011.44.1644.429264;1998-04-23;SA_REP;8400;0.2;149;80
178;Kimberely;Grant;KGRANT;011.44.1644.429263;1999-05-24;SA_REP;7000;0.15;149;
179;Charles;Johnson;CJOHNSON;011.44.1644.429262;2000-01-04;SA_REP;6200;0.1;149;80
180;Winston;Taylor;WTAYLOR;650.507.9876;1998-01-24;SH_CLERK;3200;;120;50
181;Jean;Fleaur;JFLEAUR;650.507.9877;1998-02-23;SH_CLERK;3100;;120;50
182;Martha;Sullivan;MSULLIVA;650.507.9878;1999-06-21;SH_CLERK;2500;;120;50
183;Girard;Geoni;GGEONI;650.507.9879;2000-02-03;SH_CLERK;2800;;120;50
184;Nandita;Sarchand;NSARCHAN;650.509.1876;1996-01-27;SH_CLERK;4200;;121;50
185;Alexis;Bull;ABULL;650.509.2876;1997-02-20;SH_CLERK;4100;;121;50
186;Julia;Dellinger;JDELLING;650.509.3876;1998-06-24;SH_CLERK;3400;;121;50
187;Anthony;Cabrio;ACABRIO;650.509.4876;1999-02-07;SH_CLERK;3000;;121;50
188;Kelly;Chung;KCHUNG;650.505.1876;1997-06-14;SH_CLERK;3800;;122;50
189;Jennifer;Dilly;JDILLY;650.505.2876;1997-08-13;SH_CLERK;3600;;122;50
190;Timothy;Gates;TGATES;650.505.3876;1998-07-11;SH_CLERK;2900;;122;50
191;Randall;Perkins;RPERKINS;650.505.4876;1999-12-19;SH_CLERK;2500;;122;50
192;Sarah;Bell;SBELL;650.501.1876;1996-02-04;SH_CLERK;4000;;123;50
193;Britney;Everett;BEVERETT;650.501.2876;1997-03-03;SH_CLERK;3900;;123;50
194;Samuel;McCain;SMCCAIN;650.501.3876;1998-07-01;SH_CLERK;3200;;123;50
195;Vance;Jones;VJONES;650.501.4876;1999-03-17;SH_CLERK;2800;;123;50
196;Alana;Walsh;AWALSH;650.507.9811;1998-04-24;SH_CLERK;3100;;124;50
197;Kevin;Feeney;KFEENEY;650.507.9822;1998-05-23;SH_CLERK;3000;;124;50
198;Donald;OConnell;DOCONNEL;650.507.9833;1999-06-21;SH_CLERK;2600;;124;50
199;Douglas;Grant;DGRANT;650.507.9844;2000-01-13;SH_CLERK;2600;;124;50
200;Jennifer;Whalen;JWHALEN;515.123.4444;1987-09-17;AD_ASST;4400;;101;10
201;Michael;Hartstein;MHARTSTE;515.123.5555;1996-02-17;MK_MAN;13000;;100;20
202;Pat;Fay;PFAY;603.123.6666;1997-08-17;MK_REP;6000;;201;20
203;Susan;Mavris;SMAVRIS;515.123.7777;1994-06-07;HR_REP;6500;;101;40
204;Hermann;Baer;HBAER;515.123.8888;1994-06-07;PR_REP;10000;;101;70
205;Shelley;Higgins;SHIGGINS;515.123.8080;1994-06-07;AC_MGR;12000;;101;110
206;William;Gietz;WGIETZ;515.123.8181;1994-06-07;AC_ACCOUNT;8300;;205;110
...@@ -32,5 +32,25 @@ ...@@ -32,5 +32,25 @@
<version>3.46.0.0</version> <version>3.46.0.0</version>
<scope>runtime</scope> <scope>runtime</scope>
</dependency> </dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.14.0</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.16.1</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-math3</artifactId>
<version>3.6.1</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-csv</artifactId>
<version>1.11.0</version>
</dependency>
</dependencies> </dependencies>
</project> </project>
\ No newline at end of file
package apacz;
import java.io.File;
import java.io.IOException;
import java.nio.file.attribute.FileTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import org.apache.commons.io.FileUtils;
public class CommonsIO {
public static void main(String[] args) {
// Sprawdźmy datę modyfikacji pliku pom.xml
File plik = new File("pom.xml");
try {
FileTime fileTime = FileUtils.lastModifiedFileTime(plik);
System.out.println(fileTime);
ZonedDateTime dt = ZonedDateTime.ofInstant(fileTime.toInstant(), ZoneId.systemDefault());
System.out.println(dt);
} catch (IOException e) {
e.printStackTrace();
}
}
}
package apacz;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
public class CommonsLang {
public static void main(String[] args) {
String[] t = {null, "Ala", "Agnieszka", "Zenon", "Żaneta", "Łukasz", "Łucja", "ala", "łukasz", "", " "};
// Gdy w Javie porównujemy Stirngi (i inne obiekty), robimy to za pomocą equals.
// Gdybyśmy próbowali wywołać equals na zmiennej, która może by nullem, to doprowadzimy do błędu NPE
// for(int i = 2; i >= 0; i--) {
// if(t[i].equals("Ala")) {
// System.out.println(i + " to jest Ala");
// } else {
// System.out.println(i + " to nie jest Ala");
// }
// }
// Dlatego zalecane jest, aby zmienne porównywać z konkretnymi napisami w tej kolejności:
// "Napis".equals(zmienna)
// a nie zmienna.equals("Napis")
for(int i = 2; i >= 0; i--) {
if("Ala".equals(t[i])) {
System.out.println(i + " to jest Ala");
} else {
System.out.println(i + " to nie jest Ala");
}
}
// Jednak czasami porównujemy dwie zmienne, z których obie mogą być nullem, wtedy jest trudniej.
// Biblioteka commons-lang i klasa StringUtils pomaga w operacjach porównywania, sprawdzania czy napis jest pusty itd.
System.out.println();
// Porównania stringów, które są odporne na wartości null (nie pojawiają się błędy)
System.out.println(StringUtils.equalsIgnoreCase(t[0], t[7])); // false, bo null != ala
System.out.println(StringUtils.equalsIgnoreCase(t[1], t[7]));
System.out.println(StringUtils.equalsIgnoreCase(t[5], t[8])); // Łukasz == łukasz
System.out.println();
System.out.println(StringUtils.isEmpty(t[0])); // tak, bo jest nullem
System.out.println(StringUtils.isEmpty(t[9])); // tak, bo jest pustym stringiem
System.out.println(StringUtils.isEmpty(t[10])); // false, bo zawiera 3 spacje
System.out.println(StringUtils.isBlank(t[10]));
System.out.println(StringUtils.isBlank(t[0]));
System.out.println(StringUtils.isBlank(t[1]));
System.out.println();
// są też wersje dla wielu wartości na raz
System.out.println(StringUtils.isAllBlank(t[0], t[9], t[10]));
System.out.println(StringUtils.isAllBlank(t[0], t[8], t[10]));
// praktyczne zastosowanie: walidacja danych wprowadzonych przez użytkownika:
String imie = "Ala", nazwisko = "Kowalska", adres = " ";
if(StringUtils.isAnyBlank(imie, nazwisko, adres)) {
System.out.println("Nie podałeś danych");
} else {
// robimy coś ważnego
}
System.out.println();
for (String s : t) {
if(StringUtils.isNotEmpty(s)) {
System.out.println("|" + StringUtils.center(s, 20, '.') + "|");
}
}
System.out.println();
System.out.println(ObjectUtils.firstNonNull(t));
}
}
package apacz;
import java.util.Arrays;
import org.apache.commons.math3.stat.StatUtils;
public class CommonsMath {
public static void main(String[] args) {
double[] a = {2, 10, 4.44, 3.14, 0, 25.5};
System.out.println(Arrays.toString(a));
double srednia = StatUtils.mean(a);
System.out.println("średnia: " + srednia);
System.out.println("min i max: " + StatUtils.min(a) + " , " + StatUtils.max(a));
System.out.println("wariancja: " + StatUtils.variance(a));
}
}
package apacz;
import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVRecord;
public class CzytajPlikCSV {
public static void main(String[] args) {
File plik = new File("emps.csv");
CSVFormat format = CSVFormat.Builder.create()
.setDelimiter(';')
.setHeader().setSkipHeaderRecord(true)
.build();
try(CSVParser parser = CSVParser.parse(plik, StandardCharsets.UTF_8, format)) {
for(CSVRecord record : parser) {
// System.out.println(record);
// System.out.printf("Pracownik %s %s (%s) zarabia %s\n",
// record.get(1), record.get(2), record.get(3), record.get(4));
System.out.printf("Pracownik %s %s (%s) zarabia %s\n",
record.get("first_name"), record.get("last_name"), record.get("job_title"), record.get("salary"));
}
} catch (IOException e) {
e.printStackTrace();
};
}
}
package apacz;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVPrinter;
public class EksportCSV {
public static void main(String[] args) {
System.out.println("Zadaję zapytanie");
try(Connection c = DriverManager.getConnection("jdbc:sqlite:hr.db");
PreparedStatement stmt = c.prepareStatement("SELECT * FROM employees");
ResultSet rs = stmt.executeQuery()) {
System.out.println("Zapisuję do pliku");
eksportujDoCSV(rs, "eksport.csv");
System.out.println("Gotowe");
} catch (SQLException | IOException e) {
e.printStackTrace();
}
}
static void eksportujDoCSV(ResultSet rs, String sciezka) throws SQLException, IOException {
CSVFormat format = CSVFormat.Builder.create()
.setDelimiter(';')
.setHeader(rs)
.build();
try(PrintWriter out = new PrintWriter(sciezka);
CSVPrinter printer = new CSVPrinter(out, format)) {
printer.printRecords(rs);
}
}
}
package apacz;
import org.apache.commons.lang3.StringUtils;
public class PrzykladyString {
public static void main(String[] args) {
String[] a = {"Ala", "Ola", "", "Ewelina", " ", null};
String[] b = {"Ala", "Ola", "Ewelina"};
String[] c = {" ", "", null};
// Pisząc w "zwykłej Javie" gdy chcemy wypisać z tablicy a wszystkie napisy, które nie są puste
// trzeba uwzględnić możliwość, że wartość jest nullem
int ile = 0;
for (String s : a) {
if(s != null && !s.isBlank()) {
System.out.println(s);
ile++;
}
}
System.out.println("tyle: " + ile);
System.out.println();
// biblioteka Apache Commons Lang oferuje gotowe metody umieszczona w klasach narzędziowych
// np. dla stringów mamy klasę StringUtils.
ile = 0;
for (String s : a) {
if(StringUtils.isNotBlank(s)) {
System.out.println(s);
ile++;
}
}
System.out.println("tyle: " + ile);
System.out.println();
// operacje dla całych tablic (lub wartości podawanych po przecinku)
if(StringUtils.isNoneBlank(a)) {
System.out.println("W a są same dobre napisy");
} else {
System.out.println("W a są też pustaki");
}
if(StringUtils.isNoneBlank(b)) {
System.out.println("W b są same dobre napisy");
} else {
System.out.println("W b są też pustaki");
}
if(StringUtils.isAllBlank(c)) {
System.out.println("ccc");
}
}
}
package apacz;
import static org.apache.commons.lang3.StringUtils.isAllBlank;
import static org.apache.commons.lang3.StringUtils.isNoneBlank;
import static org.apache.commons.lang3.StringUtils.isNotBlank;
public class PrzykladyString2 {
public static void main(String[] args) {
String[] a = {"Ala", "Ola", "", "Ewelina", " ", null};
String[] b = {"Ala", "Ola", "Ewelina"};
String[] c = {" ", "", null};
// Pisząc w "zwykłej Javie" gdy chcemy wypisać z tablicy a wszystkie napisy, które nie są puste
// trzeba uwzględnić możliwość, że wartość jest nullem
int ile = 0;
for (String s : a) {
if(s != null && !s.isBlank()) {
System.out.println(s);
ile++;
}
}
System.out.println("tyle: " + ile);
System.out.println();
// biblioteka Apache Commons Lang oferuje gotowe metody umieszczona w klasach narzędziowych
// np. dla stringów mamy klasę StringUtils.
ile = 0;
for (String s : a) {
if(isNotBlank(s)) {
System.out.println(s);
ile++;
}
}
System.out.println("tyle: " + ile);
System.out.println();
// operacje dla całych tablic (lub wartości podawanych po przecinku)
if(isNoneBlank(a)) {
System.out.println("W a są same dobre napisy");
} else {
System.out.println("W a są też pustaki");
}
if(isNoneBlank(b)) {
System.out.println("W b są same dobre napisy");
} else {
System.out.println("W b są też pustaki");
}
if(isAllBlank(c)) {
System.out.println("ccc");
}
if(isNoneBlank("Ala", "Ola", "Ela")) {
System.out.println("nie musi być tablica");
}
}
}
package apacz;
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
public class SkopiujKatalog {
// W standardowej bibliotece Javy nie ma operacji, która kopiowałaby na dysku cały katalog z plikami.
// W tym przykładzie użyjemy biblioteki Apache Commons IO, która taką operację zawiera.
public static void main(String[] args) {
try {
File zrodlo = new File("src/main/java");
File cel = new File("/home/patryk/Pulpit/zrodla");
FileUtils.copyDirectory(zrodlo, cel);
System.out.println("Gotowe");
} catch (IOException e) {
e.printStackTrace();
}
}
}
...@@ -9,7 +9,7 @@ import java.time.LocalTime; ...@@ -9,7 +9,7 @@ import java.time.LocalTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
public class P07_GenerowaneId { public class P07_GenerowaneId {
/* W abzach danych często stosowane są automatycznie generowane klucze. Gdy wykomnujemy polecenie INSERT nie wymieniając kolumny z kluczem, /* W bazach danych często stosowane są automatycznie generowane klucze. Gdy wykomnujemy polecenie INSERT nie wymieniając kolumny z kluczem,
* jego wartość jest generowana automatycznie (z sekwencji lub w oparciu o specjalny typ kolumny). * jego wartość jest generowana automatycznie (z sekwencji lub w oparciu o specjalny typ kolumny).
* Ale aplikacja zwykle potrzebuje poznać to ID, aby móc odwoływać się do tego rekordu w dalszej części programu. * Ale aplikacja zwykle potrzebuje poznać to ID, aby móc odwoływać się do tego rekordu w dalszej części programu.
* JDBC oferuje mechanizm, w którym przed wykonaniem operacji INSERT w obiekcie Statement rejestruje się automatycznie generowane kolumny, * JDBC oferuje mechanizm, w którym przed wykonaniem operacji INSERT w obiekcie Statement rejestruje się automatycznie generowane kolumny,
......
package pobieranie;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
public class Pobieranie1_URL {
public static void main(String[] args) {
final String adres = "http://api.nbp.pl/api/exchangerates/tables/A/?format=json";
try {
URL url = new URL(adres);
// Od Java 21 bardziej zalecane jest:
// URI uri = new URI(adres);
// URL url = uri.toURL();
try(InputStream input = url.openStream()) {
// z input stream dane można czytać porcjami jako ciągi bajtów
// byte[] tablica_bajtow = new byte[1024];
// int ile = input.read(tablica_bajtow);
// System.out.println(new String(tablica_bajtow, 0, ile));
// ale tutaj całość pobrnaych danych zapiszemy do pliku
Files.copy(input, Path.of("waluty.json"), StandardCopyOption.REPLACE_EXISTING);
System.out.println("Gotowe");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
package pobieranie;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.http.HttpResponse.BodyHandlers;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
public class Pobieranie2_HttpClient_DoPliku {
public static void main(String[] args) {
final String adres = "http://api.nbp.pl/api/exchangerates/tables/A/?format=json";
try {
URI uri = new URI(adres);
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder(uri).build();
HttpResponse<InputStream> response = client.send(request, BodyHandlers.ofInputStream());
System.out.println("response: " + response);
System.out.println("status: " + response.statusCode());
System.out.println("Content-Type: " + response.headers().firstValue("content-type").orElse("--"));
if(response.statusCode() != 200) {
return;
}
// body jest takiego typu, jaki wynika z użytego BodyHandler
try(InputStream input = response.body()) {
Files.copy(input, Path.of("waluty.json"), StandardCopyOption.REPLACE_EXISTING);
System.out.println("Gotowe");
}
} catch (IOException | URISyntaxException | InterruptedException e) {
e.printStackTrace();
}
}
}
package pobieranie;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.http.HttpResponse.BodyHandlers;
public class Pobieranie3_HttpClient_String {
public static void main(String[] args) {
final String adres = "http://api.nbp.pl/api/exchangerates/tables/A/?format=json"; // spróbuj xml
try {
URI uri = new URI(adres);
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder(uri).build();
HttpResponse<String> response = client.send(request, BodyHandlers.ofString());
System.out.println("response: " + response);
System.out.println("status: " + response.statusCode());
System.out.println("Content-Type: " + response.headers().firstValue("content-type").orElse("--"));
// if(response.statusCode() != 200) {
// return;
// }
// body jest takiego typu, jaki wynika z użytego BodyHandler
String body = response.body();
System.out.println("Długość stringa: " + body.length());
System.out.println(body);
} catch (IOException | URISyntaxException | InterruptedException e) {
e.printStackTrace();
}
}
}
package pobieranie;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.http.HttpResponse.BodyHandlers;
import jakarta.json.Json;
import jakarta.json.JsonArray;
import jakarta.json.JsonObject;
import jakarta.json.JsonReader;
import jakarta.json.JsonValue;
public class Pobieranie4_JSON {
public static void main(String[] args) {
final String adres = "http://api.nbp.pl/api/exchangerates/tables/A/?format=json";
try {
URI uri = new URI(adres);
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder(uri).build();
HttpResponse<InputStream> response = client.send(request, BodyHandlers.ofInputStream());
System.out.println("response: " + response);
System.out.println("status: " + response.statusCode());
System.out.println("Content-Type: " + response.headers().firstValue("content-type").orElse("--"));
if(response.statusCode() != 200) {
return;
}
// parsowanie JSONa z pomocą biblioteki Jakarta JSON (utworzone w Java EE 7 i dalej rozwijane)
// alternatywy: GSON, org.json, Jackson
JsonArray json;
try(JsonReader reader = Json.createReader(response.body())) {
json = reader.readArray();
} // tutaj już zamykamy połączenie
// zerowym (i jedynym) elementem tablicy jest {obiekt JSONowy} odpowiadający tabeli walut
JsonObject tabela = json.getJsonObject(0);
// bezpośrednio w tym obiekcie są takie pola, jak numer i data
System.out.println("Numer tabeli: " + tabela.getString("no"));
System.out.println("Data: " + tabela.getString("effectiveDate"));
// w polu rates znajduje się tablica zawierająca dane poszczególnych walut
JsonArray rates = tabela.getJsonArray("rates");
System.out.println("Liczba walut: " + rates.size());
System.out.println();
for(JsonValue rate : rates) {
// System.out.println(rate);
JsonObject rateObj = rate.asJsonObject();
String nazwa = rateObj.getString("currency");
String kod = rateObj.getString("code");
BigDecimal kurs = rateObj.getJsonNumber("mid").bigDecimalValue();
System.out.println(kod + " " + nazwa + ": " + kurs);
}
} catch (IOException | URISyntaxException | InterruptedException e) {
e.printStackTrace();
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment