Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych http://www.mini.pw.edu.pl/~lucknerm
Utworzenie tabeli w Oracle Utworzenie użytkownika Utworzenie połączenia w NetBeans Utworzenie tabeli z poziomu NetBeans Utworzenie servletu Podłączenie do bazy danych z poziomu servletu Szereg skomplikowanych operacji 2014-02-26 2
1. Uruchom usługi Oracle (jeśli konieczne) 2. Uruchom http://localhost:1158/em w przeglądarce internetowej 3. Zaloguj się przy pomocy danych uzyskanych na zajęciach 4. Na podstronie Administration/User Utwórz nowego użytkownika nazwanego swoim loginem Przydziel mu rolę DBA 2014-02-26 3
1. Uruchom Netbeans 2. Otwórz zakładkę Services 3. Wybierz grupę Databases 4. Z menu kontekstowego obiektu Databases wybierz New Connection 5. Wybierz sterownik Oracle Thin (ojdbc6.jar) 6. Podaj na kolejnych ekranach Username - login utworzonego użytkownika Password - jego hasło Hostname localhost W pozostałych polach pozostaw ustawienia domyślne 7. Przetestuj utworzone połączenie 8. Połączenie do localhost zastało utworzone z użyciem portu TCP/IP 1521 2014-02-26 4
1. Wybierz połączenie i schemat 2. Utwórz tabelę Persons Pola id (int), Name (vchar(20)), Surname (vchar(50)) Wprowadź kilka rekordów 3. Uruchom Execute command Wpisz SELECT * FROM persons Uruchom zapytanie 2014-02-26 5
Utwórz nowy projekt New project->java Web->Web Application W Source Packages dodaj servlet (menu kontekstowe) Uruchom Servlet Metody doget, dopost 2014-02-26 6
Pobieranie połączenia do bazy danych na podstawie nazwy Definiowane poprzez JDBC Resource Zapisywane w Server Resource np. glassfishsources.xml <jdbc-resource jndi-name="jdbc/mydatasource"> </jdbc-resource> 2014-02-26 7
Pobranie kontekstu w którym wyszukujemy źródła danych new initialcontex(); Wyszukiwanie źródła danych na podstawie nazwy lookup(dbname); String dbname = jdbc/mydatasource ; InitialContex initialcontex = new InitialContex(); javax.sql.datasource ds. = (javax.sql.datasource) initialcontext.lookup(dbname); 2014-02-26 8
Uzyskanie połączenia do bazy danych getconnection(); Należy dodać obsługę wyjątków Warto utworzyć odrębną klasę zwracającą połączenie na podstawie nazwy Zamykanie java.sql.connection conn = ds.getconnection(); conn.close(); 2014-02-26 9
Tworzenie klasy obsługującej zapytania createstatement(); Wywoływanie zapytań SELECT executequery(); UPDATE, INSERT, DELETE executeupdate(); Zapytania typu SELECT zwracają ResultSet Zamykanie Statement stmt = conn.createstatement(); String query = SELECT * FROM PERSONS ResultSet resultset= stmt.executequery(query); stmt.close(); 2014-02-26 10
Opis danych (metadane) Klasa ResultSetMetaData Liczba zwracanych kolumn getcolumncount() odczyt kolejnych rekordów resultset.next() Odczyt zwracanych wartości resultset.getstring(index) Indeksacja od 1! ResultSetMetaData rsmd = resultset.getmetadata(); int nrofcol = rsmd.getcolumncount(); while( resultset.next() ) for(int i=0; i< nrofcol ; i++) resultset.getstring(i+1); 2014-02-26 11
InitialContext initialcontext = new InitialContext(); javax.sql.datasource ds = (javax.sql.datasource) initialcontext.lookup(dbname); java.sql.connection conn = ds.getconnection(); Statement stmt = conn.createstatement(); ResultSet resultset= stmt.executequery(query); ResultSetMetaData rsmd = resultset.getmetadata(); int numberofcolumns = rsmd.getcolumncount(); String result+="<table>"; result+="<tr>"; while( resultset.next() ){ for(int i=0; i< numberofcolumns; i++){ result+="<td>" + resultset.getstring(i+1) + "</td>";} result+="</tr>";} result+="</table>"; stmt.close(); conn.close(); 2014-02-26 12
Podłącz się do bazy danych umieszczonej na innym komputerze Zbadaj możliwości klasy ResultSetMetaData Spróbuj przeprowadzić operacje INSERT, UPDATE, DELETE Używając executequery Używając executeupdate 2014-02-26 13