Aplikacje bazodanowe dr inż. Arkadiusz Mirakowski
Plan prezentacji interfejs ODBC interfejs JDBC rodzaje sterowników JDBC niezbędne biblioteki interfejsu JDBC instalacja i konfiguracja sterownika JDBC współpracującego z MS SQL Server podstawowe operacje na tabeli SQL za pomocą Javy 2
Interfejs ODBC definicja budowa wady 3
Interfejs JDBC definicja sterowniki 4
Rodzaje sterowników JDBC JDBC-ODBC bridge driver Java plus native code driver JDBC-Net pure Java driver Proprietary protocol pure Java Driver 5
Niezbędne biblioteki JDBC java.sql.driver java.sql.drivermanager java.sql.connection java.sql.statement java.sql.preparedstatement java.sql.resultset java.sql.sqlexception 6
Przygotowanie środowiska JAVA pobranie sterownika Microsoft JDBD Driver for SQL Server: https://docs.microsoft.com/en-us/sql/connect/jdbc/microsoftjdbc-driver-for-sql-server?view=sql-server-2017 dowolna lokalizacja 7
8 instalacja sterownika JDBC w NetBeans
9 pojawi się ścieżka automatycznie do
10
11
połączenie sterownika JDBC z programem (pakietem) JAVA pakiet 12
13
Test połączenia z bazą danych Niezbędne dane: nazwa sterownika: 14 nazwa bazy danych, login/hasło związane z logowaniem do SQL Server,
15 1. package bazydanych; 2. import java.sql.connection; 3. import java.sql.drivermanager; 4. import java.sql.resultset; 5. import java.sql.sqlexception; 6. import java.sql.statement; 7. public class p01 8. { 9. public static void main(string[] args) 10. { 11. Connection con; 12. try{ 13. Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 14. con = DriverManager.getConnection("jdbc:sqlserver://"+ 15. "localhost:1433;databasename=test;"+ 16. "user=sa;password=zaq1@wsx;"); 17. System.out.println("Połączono z bazą danych"); 18. con.close(); 19. } 20. catch(sqlexception error_polaczenie) { 21. System.out.println("Błąd połączenia z bazą danych");} 22. catch(classnotfoundexception error_sterownik) { 23. System.out.println("Brak sterownika");} 24. } 25. }
Obsługa wyjątków 1. 2. Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 3. con = DriverManager.getConnection("jdbc:sqlserver://"+ 4. "localhost:1433;databasename=test_abc;"+ 5. "user=sa;password=zaq1@wsx;"); 6. System.out.println("Połączono z bazą danych"); 7. con.close(); 8. } 9. catch(sqlexception error_polaczenie) { 10. System.out.println("Błąd połączenia z bazą danych");} 11. 1. 2. Class.forName("sqlserver.jdbc.SQLServerDriver"); 3. con = DriverManager.getConnection("jdbc:sqlserver://"+ 4. "localhost:1433;databasename=test;"+ 5. "user=sa;password=zaq1@wsx;"); 6. System.out.println("Połączono z bazą danych"); 7. con.close(); 8. } 9. 10. catch(classnotfoundexception error_sterownik) { 11. System.out.println("Brak sterownika");} 12. 16
Wyświetlenie ilości rekordów 1. package bazydanych; 2. import java.sql.connection; 3. import java.sql.drivermanager; 4. import java.sql.sqlexception; 5. import java.sql.resultset; 6. import java.sql.statement; 7. 8. Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 9. con = DriverManager.getConnection("jdbc: ;"); 10. 11. Statement zapytanie = con.createstatement(); 12. String sql="select count(*) from waga"; 13. ResultSet wynik_zapytania = zapytanie.executequery(sql); 14. wynik_zapytania.next(); 15. int ile_rek = wynik_zapytania.getint(1); 16. System.out.println(ile_rek); 17. con.close(); 18. 19. } 20. catch 21. 17
Wyświetlenie wybranych rekordów 1. 2. Statement zapytanie = con.createstatement(); 3. String sql="select lp,nazwisko from waga"; 4. ResultSet wynik_zapytania = zapytanie.executequery(sql); 5. while(wynik_zapytania.next()) 6. { 7. System.out.print(wynik_zapytania.getString(1)+" "); 8. System.out.println(wynik_zapytania.getString(2)); 9. } 10. con.close(); 11. 18
Ile kolumn? 1. 2. import java.sql.connection; 3. import java.sql.drivermanager; 4. import java.sql.resultset; 5. import java.sql.sqlexception; 6. import java.sql.statement; 7. import java.sql.resultsetmetadata; 8. 9. Statement zapytanie = con.createstatement(); 10. String sql="select * from waga"; 11. ResultSet wynik1 = zapytanie.executequery(sql); 12. ResultSetMetaData wynik2 = wynik1.getmetadata(); 13. int ile_kolumn = wynik2.getcolumncount(); 14. System.out.println("Liczba kolumn: "+ile_kolumn); 15. System.out.println(" "); 16. for (int i=1;i<=ile_kolumn;i++) 17. { 18. String KolNazwa = wynik2.getcolumnname(i); 19. String KolTyp = wynik2.getcolumntypename(i); 20. System.out.println("Kolumna:"+KolNazwa+" -> Typ: "+KolTyp); 21. } 22. con.close(); 23. 19
Wyświetlenie wszystkich pól rekordów 1. 2. Statement zapytanie = con.createstatement(); 3. String sql="select * from waga"; 4. ResultSet wynik_zapytania = zapytanie.executequery(sql); 5. ResultSetMetaData wynik2 = wynik_zapytania.getmetadata(); 6. int ile_kolumn = wynik2.getcolumncount(); 7. while(wynik_zapytania.next()) 8. { 9. for (int i=1;i<=ile_kolumn;i++) 10. { 11. System.out.print(wynik_zapytania.getString(i)+" - "); 12. } 13. System.out.println(" <koniec>"); 14. } 15. con.close(); 16. 20
Update wybranej wartości rekordu (1 o ) 1. 2. Statement zapytanie1 = con.createstatement(); 3. String sql1="update waga set waga=70 where lp=1"; 4. zapytanie1.executeupdate(sql1); 5. zapytanie1.close(); 6. Statement zapytanie2 = con.createstatement(); 7. String sql2="update waga set nazwisko='kowalska' where lp=1"; 8. zapytanie2.executeupdate(sql2); 9. zapytanie2.close(); 10. Statement zapytanie = con.createstatement(); 11. String sql="select * from waga"; 12. ResultSet wynik = zapytanie.executequery(sql); 13. ResultSetMetaData wynik_kol = wynik.getmetadata(); 14. int ile_kolumn = wynik_kol.getcolumncount(); 15. while(wynik.next()) 16. { 17. for (int i=1;i<=ile_kolumn;i++) 18. {System.out.print(wynik.getString(i)+" ");} 19. System.out.println(" "); 20. } 21. zapytanie.close(); 22. con.close(); 23. 21
Update wybranej wartości rekordu (2 o ) 1. 2. import java.sql.preparedstatement; 3. 4. String sql1="update waga set waga=? where lp=1"; 5. PreparedStatement zapytanie1 = con.preparestatement(sql1); 6. zapytanie1.setint(1,95); 7. zapytanie1.executeupdate(); 8. zapytanie1.close(); 9. 10. Statement zapytanie = con.createstatement(); 11. String sql="select * from waga"; 12. ResultSet wynik = zapytanie.executequery(sql); 13. ResultSetMetaData wynik_kol = wynik.getmetadata(); 14. int ile_kolumn = wynik_kol.getcolumncount(); 15. while(wynik.next()) 16. { 17. for (int i=1;i<=ile_kolumn;i++) 18. { 19. System.out.print(wynik.getString(i)+" "); 20. } 21. System.out.println(" "); 22. } 23. zapytanie.close(); 24. con.close(); 25. 22
Update wybranej wartości rekordu (3 o ) 1. 2. String sql2="update waga set nazwisko=? where lp=?"; 3. PreparedStatement zapytanie2 = con.preparestatement(sql2); 4. String nowe_nazwisko="kowalski"; 5. int lp_nowe_nazwisko=1; 6. zapytanie2.setstring(1,nowe_nazwisko); 7. zapytanie2.setint(2,lp_nowe_nazwisko); 8. zapytanie2.executeupdate(); 9. zapytanie2.close(); 10. 11. Statement zapytanie = con.createstatement(); 12. String sql="select * from waga"; 13. ResultSet wynik = zapytanie.executequery(sql); 14. ResultSetMetaData wynik_kol = wynik.getmetadata(); 15. int ile_kolumn = wynik_kol.getcolumncount(); 16. while(wynik.next()) 17. { 18. for (int i=1;i<=ile_kolumn;i++) 19. { 20. System.out.print(wynik.getString(i)+" "); 21. } 22. System.out.println(" "); 23. } 24. zapytanie.close(); 25. con.close(); 23
Wstawienie nowego rekordu 1. 2. String sql2="insert into waga values(?,?)"; 3. PreparedStatement zapytanie2 = con.preparestatement(sql2); 4. zapytanie2.setstring(1,"nowicki"); 5. zapytanie2.setint(2,110); 6. zapytanie2.executeupdate(); 7. zapytanie2.close(); 8. 9. Statement zapytanie = con.createstatement(); 10. String sql="select * from waga"; 11. ResultSet wynik = zapytanie.executequery(sql); 12. ResultSetMetaData wynik_kol = wynik.getmetadata(); 13. int ile_kolumn = wynik_kol.getcolumncount(); 14. while(wynik.next()) 15. { 16. for (int i=1;i<=ile_kolumn;i++) 17. { 18. System.out.print(wynik.getString(i)+" "); 19. } 20. System.out.println(" "); 21. } 22. zapytanie.close(); 23. con.close(); 24
Usunięcie rekordu 1. 2. String sql2="delete from waga where nazwisko=?"; 3. PreparedStatement zapytanie2 = con.preparestatement(sql2); 4. zapytanie2.setstring(1,"nowicki"); 5. zapytanie2.executeupdate(); 6. zapytanie2.close(); 7. 8. Statement zapytanie = con.createstatement(); 9. String sql="select * from waga"; 10. ResultSet wynik = zapytanie.executequery(sql); 11. ResultSetMetaData wynik_kol = wynik.getmetadata(); 12. int ile_kolumn = wynik_kol.getcolumncount(); 13. while(wynik.next()) 14. { 15. for (int i=1;i<=ile_kolumn;i++) 16. { 17. System.out.print(wynik.getString(i)+" "); 18. } 19. System.out.println(" "); 20. } 21. zapytanie.close(); 22. con.close(); 25
Funkcje 1. package ; 2. import java.sql.connection; 3. import java.sql.drivermanager; 4. import java.sql.resultset; 5. import java.sql.sqlexception; 6. import java.sql.statement; 7. public class PRZYKŁAD 8. { 9. static Connection con; 10. //---------------------------------------------------- GŁÓWNA FUNKCJA PROGRAMU 11. public static void main(string[] args) 12. { 13. try 14. { 15. Polacz("test","sa","zaq1@WSX"); 16. IleRek("waga"); 17. con.close(); 18. } 19. catch(sqlexception error_polaczenie) { 20. System.out.println("Błąd połączenia z bazą danych");} 21. } 26
27 22. static void Polacz(String bd,string login,string pass) 23. { 24. try 25. { 26. Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 27. con = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;"+ 28. "databasename="+bd+";"+ 29. "user="+login+ 30. ";password="+pass+";"); 31. System.out.println("Połączono z bazą danych"); 32. } 33. catch(sqlexception error_polaczenie) { 34. System.out.println("Błąd połączenia z bazą danych");} 35. catch(classnotfoundexception error_sterownik) { 36. System.out.println("Brak sterownika");} 37. } 38. //---------------------------------------------------------- FUNKCJE 39. static void IleRek(String tab) 40. { 41. try 42. { 43. Statement zapytanie = con.createstatement(); 44. String sql="select count(*) from "+tab; 45. ResultSet wynik_zapytania = zapytanie.executequery(sql); 46. wynik_zapytania.next(); 47. int ile_rek = wynik_zapytania.getint(1); 48. System.out.println("Ilość rekordów:"+ile_rek); 49. } 50. catch(sqlexception error_polaczenie) { 51. System.out.println("Błąd połączenia z bazą danych");} 52. } 53. }
Wybrana kolumna z tabeli tablica 1. 2. static Connection con; 3. static int ile_rek; 4. //------------------------------------------------------ GŁÓWNA FUNKCJA PROGRAMU 5. public static void main(string[] args) 6. { 7. try 8. { 9. Polacz("test","sa","zaq1@WSX"); 10. IleRek("waga"); 11. System.out.println("ilość rekordów: "+ile_rek); 12. int[] tab=new int[ile_rek]; 13. Statement zapytanie = con.createstatement(); 14. String sql="select waga from waga"; 15. ResultSet wynik_zapytania = zapytanie.executequery(sql); 16. int i=0; 17. while(wynik_zapytania.next()) { 18. System.out.println(wynik_zapytania.getString(1)); 19. tab[i]=integer.parseint(wynik_zapytania.getstring(1)); 20. i++;} 21. con.close(); 28
24. System.out.println(""); 25. for (i=0;i<tab.length;i++) System.out.println(tab[i]); 26. int max = tab[0]; 27. for (i=0;i<tab.length;i++) 28. { 29. if (tab[i]>max) max = tab[i]; 30. } 31. System.out.println("\nmax. waga: "+max); 32. con.close(); 33. } 34. catch(sqlexception error_polaczenie) { 35. System.out.println("Błąd połączenia z bazą danych");} 36. } 37. //---------------------------------------------------------- FUNKCJE 38. static void Polacz(String bd,string login,string pass){ } 39. static void IleRek(String tab) 40. { 41. try 42. { 43. Statement zapytanie = con.createstatement(); 44. String sql="select count(*) from "+tab; 45. ResultSet wynik_zapytania = zapytanie.executequery(sql); 46. wynik_zapytania.next(); 47. ile_rek = wynik_zapytania.getint(1); 48. } 49. catch(sqlexception error_polaczenie) { 50. System.out.println("Błąd połączenia z bazą danych");} 51. } 29
Wybrana kolumna z tabeli lista 1. 2. import java.util.arraylist; 3. 4. static Connection con; 5. static int ile_rek; 6. 7. //----------------------------------------------------- GŁÓWNA FUNKCJA PROGRAMU 8. public static void main(string[] args) 9. { 10. try 11. { 12. Polacz("test","sa","zaq1@WSX"); 13. ArrayList<Integer> lista = new ArrayList<Integer>(); 14. Statement zapytanie = con.createstatement(); 30
31 13. String sql="select waga from waga"; 14. ResultSet wynik_zapytania = zapytanie.executequery(sql); 15. while(wynik_zapytania.next()) 16. { 17. lista.add(integer.parseint(wynik_zapytania.getstring(1))); 18. } 19. for (int wart_elementu:lista) System.out.println(wart_elementu); 20. con.close(); 21. } 22. catch(sqlexception error_polaczenie) { 23. System.out.println("Błąd połączenia z bazą danych");} 24. } 25. //---------------------------------------------------------- FUNKCJE 26. static void Polacz(String bd,string login,string pass){..}
Własna biblioteka plik java lib.java plik1.java 32
lib.java: 1. package bazydanych; 2. import java.sql.connection; 3. import java.sql.drivermanager; 4. import java.sql.sqlexception; 5. public class lib 6. { 7. 8. static Connection con; 9. static int ile_rek; 10. static void Polacz(String bd,string login,string pass) 11. { 12. try 13. { 14. Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 15. con = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;"+ 16. "databasename="+bd+";"+ 17. "user="+login+ 18. ";password="+pass+";"); 19. System.out.println("Połączono z bazą danych"); 20. } 21. catch(sqlexception error_polaczenie) { 22. System.out.println("Błąd połączenia z bazą danych");} 23. catch(classnotfoundexception error_sterownik) { 24. System.out.println("Brak sterownika");} 25. } 33 26. public static void main(string[] args) 27. { } 28. 29. }
plik1.java: 1. package bazydanych; 2. import java.sql.sqlexception; 3. import java.sql.connection; 4. import java.sql.resultset; 5. import java.sql.statement; 6. import java.util.arraylist; 7. public class plik1 8. { 9. public static void main(string[] args) 10. { 11. try 12. { 13. Polacz("test","sa","zaq1@WSX"); 14. ArrayList<Integer> lista = new ArrayList<Integer>(); 15. Statement zapytanie = con.createstatement(); 16. String sql="select waga from waga"; 17. ResultSet wynik_zapytania = zapytanie.executequery(sql); 18. while(wynik_zapytania.next()) 19. { 20. lista.add(integer.parseint(wynik_zapytania.getstring(1))); 21. } 22. for (int wart_elementu:lista) System.out.println(wart_elementu); 23. con.close(); 24. } 25. catch(sqlexception error_polaczenie) { 26. System.out.println("Błąd połączenia z bazą danych");} 27. } 28. } 34
Java widok SQL 1. select*from waga 2. create view widok1 as 3. select waga,nazwisko 4. from waga 5. where waga>80 6. select*from widok1 35
1. package bazydanych; 2. import static bazydanych.lib.*; 3. import java.sql.resultset; 4. import java.sql.resultsetmetadata; 5. import java.sql.sqlexception; 6. import java.sql.statement; 36 7. public class sample15 8. { 9. public static void main(string[] args) 10. { 11. try 12. { 13. Polacz("test","sa","zaq1@WSX"); 14. Statement zapytanie = con.createstatement(); 15. String sql="select * from widok1"; 16. ResultSet wynik1 = zapytanie.executequery(sql); 17. ResultSetMetaData wynik2 = wynik1.getmetadata(); 18. int ile_kolumn = wynik2.getcolumncount(); 19. while(wynik1.next()) 20. { 21. for (int i=1;i<=ile_kolumn;i++) 22. { 23. System.out.print(wynik1.getString(i)+" "); 24. } 25. System.out.println(""); 26. } 27. con.close(); 28. } 29. catch(sqlexception error_polaczenie) { 30. System.out.println("Błąd połączenia z bazą danych");} 31. } 32. }
Java Funkcja (1 o ) 1. create function f1() 2. returns int 3. begin 4. declare @ile int 5. set @ile=(select count(*) from widok1) 6. return @ile 7. end 8. select dbo.f1() 37
1. package bazydanych; 2. import static bazydanych.lib.*; 3. import java.sql.resultset; 4. import java.sql.resultsetmetadata; 5. import java.sql.sqlexception; 6. import java.sql.statement; 38 7. public class sample15 8. { 9. public static void main(string[] args) 10. { 11. try 12. { 13. Polacz("test","sa","zaq1@WSX"); 14. Statement zapytanie = con.createstatement(); 15. String sql="select dbo.f1()"; 16. ResultSet wynik1 = zapytanie.executequery(sql); 17. ResultSetMetaData wynik2 = wynik1.getmetadata(); 18. int ile_kolumn = wynik2.getcolumncount(); 19. while(wynik1.next()) 20. { 21. for (int i=1;i<=ile_kolumn;i++) 22. { 23. System.out.print(wynik1.getString(i)+" "); 24. } 25. System.out.println(""); 26. } 27. con.close(); 28. } 29. catch(sqlexception error_polaczenie) { 30. System.out.println("Błąd połączenia z bazą danych");} 31. } 32. }
Java Funkcja (2 o ) 1. create function f2() 2. returns table as 3. return (select*from widok1 where waga>90) 4. select*from dbo.f2() 39
1. package bazydanych; 2. import static bazydanych.lib.*; 3. import java.sql.resultset; 4. import java.sql.resultsetmetadata; 5. import java.sql.sqlexception; 6. import java.sql.statement; 40 7. public class sample15 8. { 9. public static void main(string[] args) 10. { 11. try 12. { 13. Polacz("test","sa","zaq1@WSX"); 14. Statement zapytanie = con.createstatement(); 15. String sql="select*from dbo.f2()"; 16. ResultSet wynik1 = zapytanie.executequery(sql); 17. ResultSetMetaData wynik2 = wynik1.getmetadata(); 18. int ile_kolumn = wynik2.getcolumncount(); 19. while(wynik1.next()) 20. { 21. for (int i=1;i<=ile_kolumn;i++) 22. { 23. System.out.print(wynik1.getString(i)+" "); 24. } 25. System.out.println(""); 26. } 27. con.close(); 28. } 29. catch(sqlexception error_polaczenie) { 30. System.out.println("Błąd połączenia z bazą danych");} 31. } 32. }