JDBC. Java DataBase Connectivity SQL i Java Læreboken: 8.5, s Forelesning i TDT4145, 9. mars 2004 Av Gisle Grimen

Like dokumenter
Hva er Derby og Java DB? Denne forelesningen. Java Database Connectivity (JDBC) Hva er Derby og Java DB?

Java Database Connectivity (JDBC) Norvald H. Ryeng

JDBC. Java Data Base Connec.vity

Videregående programmering 6

Tilkobling og Triggere

Bruke SQL fra Java. Med JDBC (Java Database Connec/vity)

SQL: Systemaspekter. Evgenij Thorstensen V18. Evgenij Thorstensen SQL: Systemaspekter V18 1 / 21

8. JDBC-programmering med tilrettelegging for webapplikasjoner

EKSAMEN. TILLATTE HJELPEMIDLER: Alle trykte og skrevne. INNFØRING MED PENN, evt. trykkblyant som gir gjennomslag

INF1300 Det meste av resten av SQL. Utleggsark v. 2.0

INF1300 Det meste av resten av

Eksamen i Internetteknologi Fagkode: ITE1526

HØGSKOLEN I SØR-TRØNDELAG

Transaksjoner og flerbrukerproblematikk. Transaksjoner

INF1300 Introduksjon til databaser

Klasser skal lages slik at de i minst mulig grad er avhengig av at klienten gjør bestemte ting STOL ALDRI PÅ KLIENTEN!

HØGSKOLEN I SØR-TRØNDELAG

Transaksjoner og flerbrukerproblematikk. Transaksjoner

Å bruke Java API-et til å sortere tabeller/arraylister der elementene er (referanser til) objekter

INF1300 Introduksjon til databaser

Å programmere databasetjeneren JavaDB. Programkoden ligger i databasen

Oblig 4Hybelhus litt mer tips enn i oppgaven

Løsningsforslag til eksamen i INF1000 våren 2006

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

Seminaroppgaver IN1010, uke 2

SQL-omgivelser. SQL-omgivelse

Bruke SQL fra Python. Med Psycopg2

SQL Structured Query Language. Definere tabeller Skranker Fylle tabeller med data

INF1000: noen avsluttende ord

Løsningsforslag Test 2

Lenkelister. Lister og køer. Kopi av utvalgte sider fra forelesningen.

BOKMÅL Side 1 av 7. KONTINUASJONSEKSAMEN I FAG TDT4100 Objektorientert programmering / IT1104 Programmering, videregående kurs

10. ASP og SQL Innledning Recordset-objektet. Innhold. Referanse til læreboka Kapittel Se detaljer nedenfor.

Databaser: Relasjonsmodellen, del I

1. Finn klassene (hvilke objekter er det i problemet) 1. Dataene som beskriver problemet (hvilke objekter har vi og hvor mange klasser er det?

Datamodellering og databaser SQL, del 2

IN2090 Introduksjon til databaser

TDT4100 Objektorientert programmering

Prosedyrer. Lars Vidar Magnusson. October 26, Lars Vidar Magnusson () Forelesning i DAS October 26, / 19

UNIVERSITETET I OSLO

1. SQL datadefinisjon og manipulering

Oppgave 1 Flervalgsoppgaver (25%)

INF100 Institutt for informatikk Universitetet i Bergen Øving 5

Løsningsforslag for eksamensoppgave, våren 2004

Dagens tema: Mer av det dere trenger til del 1

OPPGAVE 5b og 8b Java Kode

Forkurs INF1010. Dag 2. Andreas Færøvig Olsen Tuva Kristine Thoresen

Eksamen INF1010 V2009 Del B prøveeksamen V2010 Vekt 60 %

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Gard Inge Rosvold Institutt for Informatikk, 15.

Alle vet det, men ikke alle gjør det! Skalerbarhet ved BIND i IN-lister

Java, SQLJ og XML i Sybase databaser. nrik H Larsen nrik.larsen@sybase.com

Uke 8 Eksamenseksempler + Ilan Villanger om studiestrategier. 11. okt Siri Moe Jensen Inst. for informatikk, UiO

Innocent Code Kapittel 1: The Basics Kapittel 2: Passing Data to Subsystems

Datamodellering og databaser SQL, del 2

ORDBMS og OODBMS i praksis

Oppgave 1 (Opprett en database og en tabell)

Datamodellering og databaser SQL, del 2

LO191D/LC191D Videregående programmering eksamen des. 2009

UNIVERSITETET I OSLO

Repetisjon: Normalformer og SQL

6108 Programmering i Java. Leksjon 5. Tabeller. Roy M. Istad 2015

IN1010 våren januar. Objektorientering i Java

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

EKSAMEN. Dato: 9. mai 2016 Eksamenstid: 09:00 13:00

Leksjon 7. Filer og unntak

Applikasjonsutvikling med databaser

IN Notat om I/O i Java

Relasjoner terminologi

Oppgave 1. Oppgave 2. Høgskolen i Østfold Avdeling for informasjonsteknologi

Miniverden og ER- modell

LØSNINGSFORSLAG AVSLUTTENDE EKSAMEN TDT 4110, TDT 4115 og IT1102 Informasjonsteknologi, grunnkurs Mandag 19. desember,

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Eivind Storm Aarnæs

UNIVERSITETET I OSLO

SQL 3: Opprette tabeller, datainnsetting og utsnitt

Løsningsskisse, eksamen J2EE og distribuerte systemer 19.mai 2004

UNIVERSITETET I OSLO

Test 2 OOP. - Prøveeksamen

INF1000: noen avsluttende ord

INF Notater. Veronika Heimsbakk 10. juni 2012

Dagens tema: 12 gode råd for en kompilatorskriver. Sjekking av navn. Lagring av navn. Hvordan finne et navn?

Dagens tema: 12 gode råd for en kompilatorskriver

INF1010, 21. februar Om å gå gjennom egne beholdere (iteratorer) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

Oppgave 1 1. Spørring: Resultattabell: 2. Spørring: Resultattabell: 3. Spørring:

UNIVERSITETET I OSLO

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

Algoritmer og datastrukturer A.1 BitInputStream

Syntaksanalyse. Dagens tema: Språkdiagrammene Jernbanediagrammene er et ypperlig utgangspunkt for å analysere et program: INF2100 INF2100 INF2100

INF Uke 10. Ukesoppgaver oktober 2012

Enkle generiske klasser i Java

INF1300 Introduksjon til databaser

Konstruktører. Bruk av konstruktører når vi opererer med "enkle" klasser er ganske ukomplisert. Når vi skriver. skjer følgende:

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert programmering i Java I Løsningsforslag

Databaser kort intro. Tom Heine Nätt

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1

import java.io.*; import java.util.*; import javagently.text;

Metaspråket for å beskrive grammatikk

Dagens tema: INF2100. Syntaksanalyse. Hva annet gjør en kompilator? Sjekking av navnebruk. Testutskrifter

Del 3: Evaluere uttrykk

Transkript:

JDBC Java DataBase Connectivity SQL i Java Læreboken: 8.5, s. 393-397 Forelesning i TDT4145, 9. mars 2004 Av Gisle Grimen

JDBCs treenighet Databaseoppkobling java.sql.connection Utføre SQL java.sql.statement Behandle resultater java.sql.resultset (+ feilbehandling java.sql.sqlexception)

Eksempel 1. Koble opp 2. Legge in tabeller 3. Legge in poster 4. Søke 5. Koble ned

Databaseoppkobling 1. Driver Class.forName( oracle.jdbc.driver.oracledriver ); DriverManager Holder styr på drivere Lager Connection-objekt:

Databaseoppkobling 1. Connection Connection mycon = DriverManager.getConnection(url, bruker, pass ); url: database- og driveravhengig F.eks. jdbc:oracle:thin:@elefant.idi.ntnu.no: + 1521:ELEFANT

Connection: autocommit con.setautocommit(boolean) Default: true Committer etter hver executeupdate() Hvis false: Transaksjonsstyring con.commit() con.rollback()

Connection createstatement(), preparestatement(sql) Lager Statement-objekt close() Lukker databaseoppkoblingen

Koble opp public Connection connect() throws SQLException, ClassNotFoundException{ Class.forName("oracle.jdbc.driver.OracleDriver"); } Connection con = DriverManager.getConnection( jdbc:oracle:thin:@"+ "elefant.idi.ntnu.no:1521:elefant", "elefant", "test"); return con;

Koble ned public void disconnect(connection con)throws SQLException{ } con.close();

Statements To typer statements Statement Utføre SQL direkte PreparedStatememt Prekompilere SQL

Statement Sender SQL-setninger til databasen Lages ved hjelp av Connection objektet: Statement stmt = mycon.createstatement();

Statements tre metoder executeupdate(string sql) Resultat, antall rader påvirket (int) executequery(string sql) Resultat, svar på spørring (ResultSet) close()

Statement: executeupdate(sql) Alle SQL-setninger unntatt SELECT Eks. stmt.executeupdate( insert into post + values (5253, Sandsli ) ; Merk: Enkeltfnutter rundt SQL-stringer ( Sandsli ) Ikke semikolon til slutt i SQL-setningen Returverdi: antall rader påvirket (int)

Statement: executequery(sql) SELECT-setninger Eks. ResultSet rs = stmt.executequery( select * from post ); Returnerer ResultSet

Statement: close() Et Statement kan utføre mange SQL-setninger Bruk close() når du er ferdig Deallokerer ressurser Viktig hvis man lager mange Statementer man kan gå tom. NB: Husk å lukke statmements, ellers kan feilmeldinger som maximum open cursors exceeded oppstå

PreparedStatement Sender også SQL-setninger til databasen Prekompilering av SQL-setning Effektivt ved gjentakelse, ryddigere kode(?) Lages ved hjelp av Connection objektet: Statement stmt = mycon.preparestatement(sql);

PreparedStatement tre metoder executeupdate() Resultat, antall rader påvirket (int) executequery() Resultat, svar på spørring (ResultSet) close() SQLen lages i konstruktøren, metoder uten paramter

PreparedStatement; eksemepl PreparedStatement ps = mycon.preparestatement( insert into post + values (?,?) ); ps.setint(1,5253); ps.setstring(2, Sandsli ); ps.executeupdate();

ResultSet Innholder resultat av en SQL spørre setning. Resultat av en: executequery() executequery(sql)

ResultSet Tabell med resultat og peker 1 Postnr 2 Sted 5014 Bergen 5252 Søreidgrend 5253 Sandsli

ResultSet: next() Flytter pekeren til neste rad (hvis det er noen) Returnerer boolean true hvis raden finnes 1 Postnr 2 Sted 5014 Bergen 5252 Søreidgrend 5253 Sandsli

ResultSet: next() Flytter pekeren til neste rad (hvis det er noen) Returnerer boolean true hvis raden finnes 1 Postnr 2 Sted 5014 Bergen 5252 Søreidgrend 5253 Sandsli

ResultSet: next() Flytter pekeren til neste rad (hvis det er noen) Returnerer boolean true hvis raden finnes 1 Postnr 2 Sted 5014 Bergen 5252 Søreidgrend 5253 Sandsli

ResultSet: getint(), getstring()... getxxx()-metoder for de fleste primitive typer + String, Date m.fl. Parameter: enten kolonnenummer (start fra 1) eller kolonnenavn

ResultSet: getxxx()-eksempler rs.getint(1) 5014 rs.getstring(2) Bergen rs.getstring( Post_NR ) 5014 1 Postnr 2 Sted 5014 Bergen 5252 Søreidgrend 5253 Sandsli

ResultSet: null rs.getint(1) 0 rs.getint(2) 0 1 Tall1 2 Tall2 536 635 0 null 4846 6483

ResultSet: wasnull() rs.getint(1) 0 rs.getint(2) 0 rs.wasnull() false rs.wasnull() true 1 Tall1 2 Tall2 536 635 0 null 4846 6483

ResultSet: close() Frigjør ressurser Meget viktig

Legge in tabeller public void createtables(connection con)throws SQLException{ Statement s = con.createstatement(); } s.executeupdate("create TABLE POST" + "(Post_NR NUMBER(4),"+ "Post_Sted VARCHAR2(20),"+ "PRIMARY KEY(POST_NR))"); s.close();

Legge in poster } public void insertposts(connection con)throws SQLException{ Statement s = con.createstatement(); s.executeupdate("insert into post values "+ "( 5014, 'Bergen')"); s.executeupdate("insert into post values "+ "( 5252, 'Soreidgrend')"); s.executeupdate("insert into post values "+ "( 5253, 'Sandsli')"); s.close();

Søk } public void searchforpeoplegivenpoststed(string poststed, Connection con) throws SQLException{ PreparedStatement ps = con.preparestatement( "select P_NR, NAVN from Person,Post where "+ "Person.Post_NR = POST.Post_NR AND Post_Sted=?"); ps.setstring(1, poststed); ResultSet rs = ps.executequery(); while (rs.next()) { } rs.close(); ps.close(); System.out.println("P_NR: +rs.getint(1)+"\t Navn: "+rs.getstring(2));

Søk } public void searchstatement( String poststed,connection con) Statement s = con.createstatement(); ResultSet rs = s.executequery("select P_NR,"+ while (rs.next()) { } rs.close(); s.close(); " NAVN from Person,Post where "+ "Person.Post_NR = POST.Post_NR "+ "AND Post_Sted='"+postSted+"'"); throws SQLException{ System.out.println("P_NR: "+rs.getint(1)+"\t Navn: "+rs.getstring(2));

Hjelp http://java.sun.com/j2se/1.4.1/docs/api/ http://www.idi.ntnu.no/~sif8020/oppskrifter/jdbc.html http://java.sun.com/docs/books/tutorial/jdbc/ http://developer.java.sun.com/developer/books/jdbctutorial/ Oracle JDBC kan bli funnet på: http://www.idi.ntnu.no/emner/tdt4145/programvare/ojdbc14.jar