Lataa esitys
Esittely latautuu. Ole hyvä ja odota
JulkaistuRisto Kapulainen Muutettu yli 9 vuotta sitten
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
Samankaltaiset esitykset
© 2024 SlidePlayer.fi Inc.
All rights reserved.