Java a pripojenie k databzam pomocou JDBC Databzy
Java a pripojenie k databázam pomocou JDBC Databázy a JDBC 1
• vytvorenie inštancie ovládača (Driver) – deje sa len raz (pri štarte aplikácie) • • • otvorenie spojenia (Connection) vytvorenie SQL príkazu (Statement) vykonanie príkazu a vrátanie výsledku (Result. Set) spracovanie výsledku uzatvorenie výsledku, príkazu a spojenia Databázy a JDBC 2
Vytvorenie inštancie ovládača • každý tvorca databázy by mal poskytovať JDBC ovládač • množina Java tried, ktorá komunikuje s databázou • k dispozícii sú ovládače ku všetkým významným databázam (Oracle, My. SQL, DB 2, Postgre. SQL, Firebird. . . ) • pred prvým pripojením z aplikácie treba inicializovať ovládač Class. for. Name("com. mysql. jdbc. Driver"); Databázy a JDBC 3
Otvorenie spojenia • otvoríme spojenie s databázou • reprezentuje ho inštancia java. sql. Connection • potrebujeme – URL k serveru – login – heslo String url = "jdbc: mysql: //localhost: 3306/database; Connection conn = Driver. Manager. get. Connection(url, "user", "password"); Databázy a JDBC 4
Vykonávanie príkazov • nad otvoreným spojením môžeme vykonávať príkazy • SQL príkaz reprezentuje trieda java. sql. Statement st = conn. create. Statement(); • alternatívne môžeme vytvoriť predkompilovaný statement – ak ho mienime vykonávať viackrát Prepared. Statement st = conn. prepare. Statement("SELECT NOW()"); Databázy a JDBC 5
Vykonanie príkazu • statement môžeme spustiť a získať tak výsledky – reprezentované triedou java. sql. Result. Set alebo počtom ovplyvnených riadkov • typický príklad: dopyt typu SELECT Result. Set result. Set = statement. execute. Query("SELECT * FROM student"); • typický príklad: aktualizačný dopyt int počet. Zmenených. Riadkov = statement. execute. Update("DELETE FROM student"); Databázy a JDBC 6
Vytvorenie inštancie ovládača • každý tvorca databázy by mal poskytovať JDBC ovládač • množina Java tried, ktorá komunikuje s databázou • k dispozícii sú ovládače ku všetkým významným databázam (Oracle, My. SQL, DB 2, Postgre. SQL, Firebird. . . ) • pred prvým pripojením z aplikácie treba inicializovať ovládač Class. for. Name("com. mysql. jdbc. Driver"); Databázy a JDBC 7
Spracovanie Result. Set-u • Result. Set predstavuje "tabuľku" s výsledkami • server posiela dáta po riadkoch, položky vyberáme po stĺpcoch while (result. Set. next()) { int id = result. Set. get. Int(1); String meno = result. Set. get. String("meno"); boolean je. Aktívny = result. Set. get. Boolean(3); //. . . } • metóda next() sa presunie na ďalší riadok • k hodnotám v stĺpcoch pristupujeme podľa indexov (indexované od 1) alebo názvami stĺpcov Databázy a JDBC 8
Štábna kultúra • všetky objekty je treba po skončení práce uzavrieť metódou close() • uzatvárame v opačnom poradí – Result. Set, Statement, Connection • neuzatvorenie spôsobí problémy – databázy môžu mať limitovaný počet pripojení – neuzavreté spojenia vyčerpajú kapacitu Databázy a JDBC 9
Kompletný príklad • kompletný príklad možno vidieť na http: //ics. upjs. sk/~novotnyr/wiki/Java/Spring. AJDBC#toc 2 Databázy a JDBC 10
Spring a JDBC • Spring Framework je univerzálny aplikačný rámec pre použitie v Jave • množstvo využití, o. i. podpora JDBC Databázy a JDBC 11
Práca s vrstvou Spring. Jdbc • vytvorenie inštancie dátového zdroja (Data. Source) – deje sa len raz (pri štarte aplikácie) • vytvorenie JDBC šablóny (Jdbc. Template) • vykonávanie príkazov Databázy a JDBC 12
Vytvorenie inštancie dátového zdroja • dátový zdroj (javax. sql. Data. Source) je analógiou JDBC ovládača • komunikuje s databázou • k dispozícii sú ovládače ku všetkým významným databázam (Oracle, My. SQL, DB 2, Postgre. SQL, Firebird. . . ) Mysql. Data. Source ds = new Mysql. Data. Source(); ds. set. User("login"); ds. set. Password("heslo"); ds. set. Server. Name("dbserver"); ds. set. Database. Name("databaza"); Databázy a JDBC 13
Vytvorenie JDBC šablóny • JDBC šablóna (org. springframework. jdbc. core. simple. Simple. Jdbc. Template) je pomocná trieda pre vykonávanie SQL dopytov • odbúrava nutnosť písať zbytočný kód • automaticky manažuje otváranie a zatváranie pripojení, Statement-ov a Result. Set-ov • pre fungovanie potrebuje Data. Source Simple. Jdbc. Template jt = new Simple. Jdbc. Template(data. Source); int rows = jt. query. For. Int("SELECT COUNT(*) FROM TABULKA"); Databázy a JDBC 14
Aktualizačné dopyty • aktualizačný dopyt je jednoriadkovou záležitosťou int počet. Ovplyvnených. Riadkov = jdbc. Template. update("DELETE FROM STUDENT"); • aktualizačný dopyt s parametrami String meno = "Ostap"; String priezvisko = "Bender"; String sql = "DELETE FROM STUDENT WHERE meno = ? AND priezvisko = ? "; int počet. Ovplyvnených. Riadkov = jdbc. Template. update(sql, meno, priezvisko); Databázy a JDBC 15
Získavanie dát z databázy • Spring JDBC podporuje jednoduché mapovanie na objekty: "čo riadok – to objekt" public class Student { private int id; ID MENO PRIEZVISKO 1 Fero Taraba 2 Ostap Bender private String first. Name; private String last. Name; … } • stĺpce tabuľky mapujeme na atribúty inštancie Databázy a JDBC 16
Mapovanie riadkov na objekty • mapovanie sa deje prostredníctvom triedy implementujúcej interfejs org. springframework. jdbc. core. simple. Parametrized. Row. Mapper public class Student. Mapper implements Parametrized. Row. Mapper<Student> { public Student map. Row(Result. Set rs, int row. Num) throws SQLException { Student s = new Student(); s. set. Id(rs. get. Int("id")); s. set. Name(rs. get. String("meno")); s. set. Surname(rs. get. String("priezvisko")); return s; } } Databázy a JDBC 17
Mapovanie riadkov na objekty • získanie zoznamu objektov Student. Mapper mapper = new Student. Mapper(); List<Student> studenti = jdbc. Template. query("SELECT * FROM student", mapper); • získanie jedného objektu String sql = "SELECT * FROM student WHERE id = ? "; Student. Mapper mapper = new Student. Mapper(); Student student = jdbc. Template. query. For. Object(sql, mapper, 25); Databázy a JDBC 18
- Slides: 18