1 / 35

Java - Tietokanta

Java - Tietokanta. 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.

jaclyn
Download Presentation

Java - Tietokanta

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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 • JDBC-ODBC silta • Osittain Javalla toteutettu, tietokannan verkkoprotokollaa käyttävä ajuri • Puhdas java-ajuri omalla verkkoprotokollalla • 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: • close(), isClosed() • getMetadata() • commit(), rollback() • createStatement(), prepareStatement(); • 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 • 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);

  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; • tietueiden vierityssuunta • 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 • TYPE_SCROLL_FORWARD_ONLY = (default) Ei vieritettävä, kursori vain eteenpäin, tehdyt päivitykset tapahtuvat kun tulosjoukko suljetaan, tai avataan uudelleen. • TYPE_SCROLL_INSENSITIVE = Vieritettävä, tehdyt päivitykset tapahtuvat kun tulosjoukko suljetaan, tai avataan uudelleen. • 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ä tulosjoukossatapahtuu seuraavilla metodeilla: objRS.next(); = aina käytössä, oli vieritettävä tai ei, hyppää seuraavalle rivilleobjRS.previous(); = hyppää edelliselle rivilleobjRS.beforeFirst(); = vie kursorin ennen ensimmäistä riviäobjRS.afterLast(); = vie kursorin viimeisen rivin jälkeenobjRS.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: • Lisäys SQL –lauseen ja executeUpdate()metodin avulla • 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: • Muutos SQL –lauseen ja executeUpdate()metodin avulla • 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

More Related