Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

Java - Tietokanta. JDBC=Java database connectivity  ODBC:n kaltainen ohjelmointiliittymä SQL- tietokantoihin  Koostuu Java-kehitysympäristön (esim.

Samankaltaiset esitykset


Esitys aiheesta: "Java - Tietokanta. JDBC=Java database connectivity  ODBC:n kaltainen ohjelmointiliittymä SQL- tietokantoihin  Koostuu Java-kehitysympäristön (esim."— Esityksen transkriptio:

1 Java - Tietokanta

2 JDBC=Java database connectivity  ODBC:n kaltainen ohjelmointiliittymä SQL- tietokantoihin  Koostuu Java-kehitysympäristön (esim. Sunin JDK) mukana toimitettavasta JDBC- rajapinnasta ja tietokantakohtaisesta JDBC- ajurista.  Voidaan käyttää sekä kaksi- että monitasoisena

3 JDBC-Ajurit, 4 vaihtoehtoa 1. JDBC-ODBC silta 2. Osittain Javalla toteutettu, tietokannan verkkoprotokollaa käyttävä ajuri 3. Puhdas java-ajuri omalla verkkoprotokollalla 4. Puhdas java-ajuri tietokantakohtaisella verkkoprotokollalla

4 Yhteyden muodostaminen kantaan  Yhteys tietokantaan muodostetaan JDBC-ajurin sisältämien Driver-interfacen ja DriverManager- luokan avulla.  Muodostunutta yhteyttä voidaan käsitellä Connection-interfacella.

5 Yhteyden hallinta Connection interfacella  Connection interface sisältää funktioita yhteyden ja tapahtumien käsittelyyn: 1.close(), isClosed() 2.getMetadata() 3.commit(), rollback() 4.createStatement(), prepareStatement(); 5.Erityisen tärkeää muistaa Connection – olion sulkeminen: objConn.close(); Etteivät yhteydet jää roikkumaan!

6 Tarvittavat objektit  Tarvitaan tietokantayhteyden toimittaja. Class.forName("sun.jdbc.odbc.JdbcOdbcDriver”);  Tarvitaan yhteysobjekti. (objConn) String connString = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=../Ilmo.mdb”; Connection objConn = DriverManager.getConnection(connString,"","");

7 Tarvittavat objektit...  Tarvitaan kyselijä. Statement stmt = objConn.createStatement  Tarvitaan tietuejoukko-objekti. String sqlStr = "SELECT * FROM Opettaja"; ResultSet objRS = stmt.executeQuery(sqlStr);

8 Yhteyden määrittely 1. Class.forName("sun.jdbc.odbc.JdbcOdbcDriver”); 2. String connString = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=../Ilmo.mdb”; 3. Connection objConn = DriverManager.getConnection(connString,"",""); 4. Statement stmt = objConn.createStatement(); 5. String sqlStr = "SELECT * FROM Opettaja"; 6. ResultSet objRS = stmt.executeQuery(sqlStr);

9 1. Class.forName("sun.jdbc.odbc.JdbcOdbcDriver”);  Valitaan yhteyden toimittaja Java DataBase Connectivity Open DataBase Connectivity Ota annettuna

10 2+3. Connection objConn  Luodaan yhteysobjekti objConn Connection objConn = DriverManager.getConnection(connString,"",""); connString  jdbc:odbc:kanta (protokolla:aliprotokolla:tietolähde)  kanta -> kerrotaan joko DSN:n nimi tai Driver ja tietokannan nimi ja sijainti.,”tunnus”,”salasana”  jos tyhjiä, niin ei määriteltyjä

11 4. Statement stmt = objConn.createStatement();  Esitellään kyselijä –olio Lähettää SQL –lauseen tietokantapalvelimelle erityisellä executeXXX() metodilla

12 5+6. ResultSet objRS  Luodaan tietuejoukko-objekti objRS ja tehdään tietokantakysely ResultSet objRS = stmt.executeQuery(sqlStr); stmt.  executeQuery() –Tietokantakysely -> SELECT  executeUpdate() –Tietojen päivitys -> muut sqlStr  Varsinainen suoritettava SQL-lause

13 import java.sql.*; public class Yhteys { public static void main(String[] args) { try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String connString = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=../Ilmo.mdb"; Connection objConn = DriverManager.getConnection(connString,"",""); Statement stmt = objConn.createStatement(); String sqlStr = "SELECT * FROM Opettaja"; ResultSet objRS = stmt.executeQuery(sqlStr); while (objRS.next()){ System.out.print(objRS.getString(1)); } objRS.close(); if (objConn!=null){ objConn.close(); } } catch (Exception e) { e.printStackTrace(); }}}

14 Tietueiden käsittely  Opettaja taulun 1. sarake kertoo opettajan lyhenteen. Lyhenne saadaan: objRS.getString(1) tai objRS.getString(”Opettaja_id”) Indeksointi alkaa numerosta 1 (VB 0) HUOM! Suosi getString() –metodia, koska sillä voidaan hakea lähes minkä tahansa tietotyypin dataa  Muita getXXX() –metodeja getInt() getFloat() getDouble() getDate()

15 Tietueiden läpikäynti  objRS.next() –metodi siirtää kursorin taulun 1.riville ja käy taulun läpi palauttaen jokaiselta riviltä true. Kun kursori ohittaa viimeisen rivin metodi palauttaa false. while (objRS.next()){... }

16 Metadata  Metadatalla tarkoitetaan tietoa tiedosta  ResultSetMetaData –oliolla saadaan tietoa mm. taulun kenttien nimistä, lukumäärästä ja tietotyypeistä.

17 Metadata... ResultSetMetaData metaData = objRS.getMetaData();  metaData.getColumnCount(); palauttaa taulun kenttien lukumäärän  metaData.getColumnName(); palauttaa taulun kenttien nimet  metaData.getColumnTypeName(1); palauttaa taulun 1.kentän tietotyypin tekstinä

18 Kaikkien kenttien läpikäynti ResultSetMetaData metaData; metaData = objRS.getMetaData(); int kentat = metaData.getColumnCount(); while (objRS.next()){ for(int i=1;i<=kentat;i++){ objRS.getString(i) }

19 Harjoitus  Tee aliohjelma tulosta(), jolla tulostat kaikki tiedot opettajataulusta konsoliin  Ohjelmaa kutsutaa pääohjelmasta  Esittele muuttujat siten, että niitä voidaan käyttää myös kyseisen aliohjelman ulkopuolella

20 Esitellään muuttujat import java.sql.*; import javax.swing.*; public class Yhteys { static String connString = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=../Ilmo.mdb static Connection objConn; static Statement stmt; static String sqlStr; static ResultSet objRS; static ResultSetMetaData metaData; }

21 Aliohjelma: public static void tulosta(){ try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); objConn = DriverManager.getConnection(connString,"",""); stmt = objConn.createStatement(); sqlStr = "SELECT * FROM Opettaja"; objRS = stmt.executeQuery(sqlStr); metaData = objRS.getMetaData(); while (objRS.next()){ for (int i=1; i <= metaData.getColumnCount();++i){ System.out.print(objRS.getString(i) + "\t"); } System.out.println(); } objRS.close(); } catch (Exception e) { e.printStackTrace(); }} }

22 Vieritettävä tulosjoukko  Mikäli createStatement -metodia kutsutaan ilman parametrejä, voidaan tietuejoukko- objektin tietueita selata vain eteenpäin. stmt = objConn.createStatement();  Mikäli tietueita halutaan selata myös taaksepäin, tulee parametreinä antaa; 1.tietueiden vierityssuunta 2.tietueiden päivitettävyys (kyllä/ei)

23 Vieritettävä tulosjoukko  JDBC 2.0 mahdollistaa tietyissä tapauksissa kursorin liikuttamisen eri kohtiin hakutulosjoukossa eli ResultSetissä. Tällaista tulosjoukkoa voidaan kutsua vieritettäväksi tulosjoukoksi ja sen käyttö on mahdollista, jos JDBC 2.0 –ajuri tukee vieritettävää tulosjoukkoa käytettävissä olevalle kannalle.  Käytettäessä vieritettävää tulosjoukkoa voidaan määrätä, millaisella kursorilla joukossa liikutaan ja pystytäänkö joukon sisältämää dataa muokkaamaan.

24 Vieritettävä tulosjoukko Esim. Statement stmt = con.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); ResultSet rs = stmt.executeQuery(query);

25 Vieritettävä tulosjoukko 1.TYPE_SCROLL_FORWARD_ONLY = (default) Ei vieritettävä, kursori vain eteenpäin, tehdyt päivitykset tapahtuvat kun tulosjoukko suljetaan, tai avataan uudelleen. 2.TYPE_SCROLL_INSENSITIVE = Vieritettävä, tehdyt päivitykset tapahtuvat kun tulosjoukko suljetaan, tai avataan uudelleen. 3.TYPE_SCROLL_SENSITIVE = Vieritettävä, tehdyt päivitykset tapahtuvat välittömästi

26 Vieritettävä tulosjoukko  CONCUR_READ_ONLY = vain lukua varten.  CONCUR_UPDATABLE = (default) Myös päivitykset mahdollisia

27 Vieritettävä tulosjoukko  Liikkuminen vieritettävässä tulosjoukossa tapahtuu seuraavilla metodeilla: objRS.next(); = aina käytössä, oli vieritettävä tai ei, hyppää seuraavalle riville objRS.previous(); = hyppää edelliselle riville objRS.beforeFirst(); = vie kursorin ennen ensimmäistä riviä objRS.afterLast(); = vie kursorin viimeisen rivin jälkeen objRS.absolute(int muutos); = annetaan muutos edelliseen riviin, positiivinen kokonaisluku eteenpäin tai negatiivinen kokonaisluku taaksepäin esim. 8 tai –6.  Kaikki liikkumismetodit palauttavat false, jos mennään yli tulosjoukon rajojen!  Kursorin sijainti vieritettävässä tulosjoukossa: objRS.getRow(); objRS.isLast(); objRS.isFirst(); objRS.isAfterLast(); (EOF)objRS.isBeforeFirst(); (BOF)

28 Tietueen lisääminen  Kaksi vaihtoehtoa: 1. Lisäys SQL –lauseen ja executeUpdate()metodin avulla 2. Lisäys SQL –lauseen ja tietuejoukko- objektin objRS:n avulla

29 Lisäys (SQL –lause ja executeUpdate()) objConn = DriverManager.getConnection(connString,"",""); stmt = objConn.createStatement(); sqlStr = "INSERT INTO Opettaja VALUES('"+tunnus+"', '"+etuNimi+"','"+sukuNimi+"','"+eMail+"')"; stmt.executeUpdate(sqlStr); stmt.close();

30 Lisäys ( objRS –tietuejoukko-objekti) objConn = DriverManager.getConnection(connString,"",""); stmt = objConn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); sqlStr = "SELECT * FROM Opettaja"; objRS = stmt.executeQuery(sqlStr); objRS.moveToInsertRow(); //Kursori tyhjälle riville objRS.updateString("Opettaja_id",tunnus);//Kenttä,arvo objRS.updateString("Etunimi",etuNimi); //Kenttä,arvo objRS.updateString("Sukunimi",sukuNimi); //Kenttä,arvo objRS.updateString("E_mail",eMail); //Kenttä,arvo objRS.insertRow();//Päivitä tiedot riville objRS.close();

31 Harjoitus  Tee ohjelma, jolla voit lisätä opettajatietoja tietokantaan.  Tiedot voit kerätä vaikka inputboxeilla  Huomioi pakolliset tiedot ja virheenkäsittely

32 Tietueen Muuttaminen  Kaksi vaihtoehtoa: 1. Muutos SQL –lauseen ja executeUpdate()metodin avulla 2. Muutos SQL –lauseen ja tietuejoukko- objektin objRS:n avulla

33 Muutos (SQL –lause ja executeUpdate()) objConn = DriverManager.getConnection(connString,"",""); stmt = objConn.createStatement(); sqlStr = ”UPDATE Opettaja SET E_mail=’kalle.koe@haaga.fi’ WHERE Opettaja_id=’KOE’”; stmt.executeUpdate(sqlStr); stmt.close();

34 Muutos ( objRS –tietuejoukko-objekti) objConn = DriverManager.getConnection(connString,"",""); stmt = objConn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); sqlStr = "SELECT * FROM Opettaja WHERE Opettaja_id=’KOE’ "; objRS = stmt.executeQuery(sqlStr); objRS.first();//Kursori 1.riville objRS.updateString("E_mail", ”kalle.koe@haaga.fi” ); //Kenttä,arvo objRS.updateRow();//Päivitä rivin tiedot objRS.close();

35 Harjoitus  Tee ohjelma, jolla voit muuttaa opettajan tietoja tietokannassa  Kysy ensin muutettavan opettajan Opettaja_id inputboxilla  Tarkista ensin, että Opettaja_id löytyy if(objRS.isBeforeFirst()==true){}  Tiedot voit muuttaa vaikka inputboxeilla  Huomioi pakolliset tiedot ja virheenkäsittely


Lataa ppt "Java - Tietokanta. JDBC=Java database connectivity  ODBC:n kaltainen ohjelmointiliittymä SQL- tietokantoihin  Koostuu Java-kehitysympäristön (esim."

Samankaltaiset esitykset


Iklan oleh Google