Innehåll. Föreläsning 3. javax.naming.context. javax.sql.datasource. Vad är JDBC? Java Naming and Directory Interface(JNDI) Viktigaste metoder:

Relevanta dokument
Exempel. Lektion 4. Innehåll. Fördefinierade variabler. PageContext. Java Server Pages (JSP) DD2483 Enterprise Java 6 hp

Klientprogrammering mot databaser

INTRODUKTION TILL JDBC

Sample exam questions. Database exam TIG058

Exempel. Föreläsning 6. Innehåll. Fördefinierade variabler. PageContext. Java Server Pages (JSP) DD2390 Internetprogrammering 6 hp

Classpath. Class loading + resurser. Class loader. jar-filer

Högskolan Dalarna sid 1 av 5 DI-institutionen Hans-Edy Mårtensson Sten Sundin

Genomgång av tentamen. Databasteknik ITHS 4/3 2016

Du skall naturligtvis visa körexempel med output där det behövs i din rapport!

ADO.NET Murach Kapitel 17-20

Karlstads Universitet, Datavetenskap 1

Starta MySQL Query Browser

2I1070 Lektion 2 Servlets och databaskopplingar Internetprogrammering 2I1049 Treskiktsarkitektur Klient-server med servlets

Arbeta med databas. Översikt. Lektion 1: Arbeta med Entity Data Models. Arbeta med Entity Data Models. LINQ (Language Integrated Query).

1. SQL DML (Data Manipulation Language) 2. Lägga till data. 4. Uppdatera data 5. Aktivera default value 6. Hantera datum 7.

Databasens består av: Tabell Kolumner fält Rader poster (varje post är unik)

Laboration 5 - Biblioteksapplikation

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

Innehåll MySQL Intro. Allmänt om Lagrade Procedurer Enkel utformning Skapa en lagrad procedur Använda parameter som indata

SQL. Structured Query Language. Frågespråk för att används för. Kommandon. data åtkomst data manipulation

FÖ 07 - JDBC Åtkomst till databaser från applikationer med Java - exempelkod -

! Teori och praktik. ! Ändringar från förra året. ! Examination (tenta, projekt) LiU. ! Varför ni? ! Varför överhuvudtaget? LiU

Stored procedure i ASP.NET

TENTAMEN DATABASKUNSKAP ITEK12

Databaser - Design och programmering. Kursöversikt. Exempel: telefonbok. Varför databaser?

Lösningsförslag, tentamen i Databaser

DAT043 - föreläsning 8

Föreläsning 3: Booleans, if, switch

Föreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser

Transaktioner. 1. Transaktioner 2. Samtidighet ( concurrency ) och lås. 3. Deadlock. Kap. 17. Informatik B: Databashantering med SQL Server

1.Lär känna MS SQL Observera. Tips. Förberedelse

FÖRSLAG TILL LÖSNINGAR, TENTAMEN I IKB007 INTERNETPROGRAMMERING MED JAVA, 5p för SY2, , kl

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om?

Lab 6: ASP.NET 2.0 Providermodellen

Typkonvertering. Java versus C

ÖVERVAKNING AV SQL SERVER

Vyer, Prepared Statements, Triggers

De ska vara möjligt att separera kod med olika utvecklingsbehov. Det ska vara enkelt att gå från en web-centrerad design till en komponentbaserad

Programmering för språkteknologer II, HT2014. Rum

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin Micael Karlsson

Generiska konstruktioner. Kursbokens kapitel 13

Stored procedure i ASP.NET

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

Databaser - Design och programmering

Tabeller och kolumner SQL. Lägga till en ny post. Lägga till en ny post

Labb LIVE. Exempelkod från föreläsningen. Plushögskolan Frågeutveckling inom MSSQL - SU14

OOP Objekt-orienterad programmering

Language Integrated Query, LINQ, och databaser

Laboration 24 Databasen MySQL och java

Föreläsning 1. Abstrakta datatyper, listor och effektivitet

Föreläsning 2. Länkad lista och iterator

Objektorienterad programmering E. Telefonboken, än en gång. Gränssnitt. Telefonboken med gränssnitt specificerat, del 1.

Tentamen Nätverksprogrammering Lösningsförslag

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Lär känna MS SQL 2008 / Övning. Observera. Tips. Förberedelse

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Databasutveckling Microsoft T-SQL - Fortsättning. Funktioner GROUP BY HAVING Skapa databaser Skapa tabeller Lite om transaktioshantering

Tentamen ID1004 Objektorienterad programmering May 29, 2012

Malmö högskola 2007/2008 Teknik och samhälle

Sätta upp e-post server Ubuntu 14.04, del 1 installation av programvara, konfiguration av mysql och Postfix

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

INTRODUKTION TILL SQLJ & MAKEFILE

DAT043 Objektorienterad Programmering

Tillämpad programmering

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

L0009B. Moment. Introduktion till geografiska databaser: G:\L0009B\Allmänt\IntroGeoDB.pdf (F)

Avbildningar och hashtabeller. Koffman & Wolfgang kapitel 7, mestadels avsnitt 2 4

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt

Påminnelse: en datatyp för bilder. Programmering. En datatyp för bilder. Spegelbild. hh.se/db2004

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Tentamen i EDAF25. 1 juni Skrivtid: Skriv inte med färgpenna enda tillåtna färg är svart/blyerts.

Databaser och Datamodellering Foreläsning IV

Webbprogrammering, grundkurs 725G54

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

1. PLSQL 2 2. Select into

Lektion 5 HTML, CSS, PHP och MySQL

FactoryCast HMI. Premium & Quantum PLC. MySQL Server och FactoryCast HMI databastjänst

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

TDDC74 Programmering: Abstraktion och modellering Dugga 3, kl 14 16, 25 mars 2015

Trafla databasen vi hämtar data från (remote export) ligger på en godtycklig maskin i nätverket. Den här databasen är en MIMER databas.

DDL Kommandon CREATE/DROP Database CREATE /ALTER/DROP Table ALTER/ADD/DROP Column CREATE /ALTER/DROP Index

Lösningsförslag till exempeltenta 2

Programmering för språkteknologer II, HT2011. Rum

Länkade strukturer. (del 2)

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

Chapter 4: Writing Classes/ Att skriva egna klasser.

732G16: Databaser - Design och programmering

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

Polymorfi. Objektorienterad och komponentbaserad programmering

Tentamen i Objektorienterad modellering och diskreta strukturer

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Att skriva till och läsa från terminalfönstret

Övningar i SQL. SQLAccess.doc Ove Lundgren

Databaser och. SQL, utsökningar mot flera tabeller TENTA. # radnr (#) studnr (#) kursnr * tentadatum * betyg

Lektion 1 - Programmeringsteknik F1, ht 2003

Transkript:

Föreläsning 3 JDBC Innehåll JNDI Java Naming and Directory Interface En slags DNS för Objekt JDBC Grunderna Uppkoppling Exekvera SQL-satser Ta hand om resulterande ResultSets Finesser PreparedStatement Commit & Rollback Java Naming and Directory Interface(JNDI) För att distribuerade applikationers komponenter skall kunna hitta varandra behövs någon tjänst som hjälper till med detta, en s k namngivningstjänst (Naming Service) JNDI mappar namn mot objekt (jämför med DNS). JNDI är ett erface som är beroende av en underliggande implementation t.ex. LDAP för att fungera JNDI använder ett fåtal objekt, främst Context & InitialContext Ett Context objekt har metoder för att binda namn till objekt, lista existerande namn, ta bort och döpa om javax.naming.context Viktigaste metoder: void bind(string stringname, Object object) Object lookup(string stringname) javax..datasource Datasource är ett Interface och implementeras av Driverförsäljaren Man får normalt tag på ett Datasource objekt genom en JNDI-uppslagning. Är en abstraktion av drivrutinen som ligger under orion/lib och konfigureras under orion/config/data-sources.xml Vad är JDBC? Ett API för att kommunicera med databaser från javaapplikationer Relevanta paket: java. javax. 1

JDBC Arkitekturen Tre huvudkomponenter i JDBC program Java applikation Skapad av Java utvecklaren Alla anrop till databasen enligt JDBC API:t JDBC DriverManager Tillhandahållen av JavaSoft Fungerar som länk mellan applikationen och drivrutinen JDBC drivrutinen Tillhandahållen av DB företaget eller tredje part Konverterar JDBC kod till DB specifika databaskommandon JDBC Arkitekturen Java applikation/applet JDBC API JDBC DriverManager JDBC Driver API JDBC Driver(s) JDBC - klasserna DatabasURL:er Dessa tre klasser är viktigast att känna till i JDBC: Connection Statement ResultSet URL:en bidrar med nödvändig information Signalerar att det är en DB-URL Identifierar databasens sub-protokoll Lokaliserar databasen Generell syntax jdbc : <driverns sub-protokoll> : <db sökvägen> Exempel på DatabasURL:er ODBC Datakälla jdbc:odbc:test mysql datakälla jdbc:my://localhost:3306/test Informix Databas jdbc:informixi://dupond.nada.kth.se:1557/stene:informixservercour se_2000 Kolla i orion/config/data-sources.xml JDBC: Steg för steg Steg 1: Gör en JNDI-uppslagning av drivrutinen Steg 2: Skapa ett Connection-objekt Steg 3: Skapa ett Statement-objekt och utför en förfrågan Steg 4: Ta hand om ett resulterande ResultSet 2

Steg 1: JNDI-uppslagning @ page import"javax.naming.*,java..*,javax..*" Context env null; DataSource source null; env new InitialContext(); source (DataSource)env.lookup("jdbc/InformixCoreDS"); Connection con source.getconnection(); Statement s con.createstatement(); String "select * from studenter order by enamn"; ResultSet rs s.executequery(); JDBC: Steg för steg Steg 1: Ladda databasdrivern Steg 2: Skapa ett Connection-objekt Steg 3: Skapa ett Statement och utför en förfrågan Steg 4: Ta hand om ett resulterande ResultSet Steg 2: Skapa ett Connection objekt @ page import"javax.naming.*,java..*,javax..*" Context env null; DataSource source null; env new InitialContext(); source (DataSource)env.lookup("jdbc/InformixCoreDS"); Connection con source.getconnection(); Statement s con.createstatement(); String "select * from studenter order by enamn"; ResultSet rs s.executequery(); JDBC: Steg för steg Steg 1: Ladda databasdrivern Steg 2: Skapa ett Connection-objekt Steg 3: Skapa ett Statement-objekt och utför en förfrågan Steg 4: Ta hand om det resulterande ResultSet java..statement objektet Ett Statement objekt Används för att skicka förfrågningar till databasen Skapas via metoden createstatement() Statement stmt con.createstatement() Via statement sköts exekveringen av SQL Steg 3: statement-objekt / -fråga @ page import"javax.naming.*,java..*,javax..*" Context env null; DataSource source null; env new InitialContext(); source (DataSource)env.lookup("jdbc/InformixCoreDS"); Connection con source.getconnection(); Statement s con.createstatement(); String "select * from studenter order by enamn"; ResultSet rs s.executequery(); 3

JDBC: Steg för steg Steg 1: Ladda databasdrivern Steg 2: Skapa ett Connection objekt Steg 3: Skapa ett Statement och utför en query Steg 4: Ta hand om det resulterande ResultSet Datamanipulation i JDBC VidUPDATE, INSERT, DELETE används executeupdate(string ) som returnerar antal berörda tupler Vid SELECT används istället ResultSet executequery(string ) som returnerar ett Resultset att navigera i Det finns också en execute(string)-metod som returnerar en boolean om det finns ett ResultSet att hämta. ResultSet Navigation genom ResultSet initial position av markören ResultSet All dataaccess sker genom en instans av ResultSet ResultSet har medoder för navigering i ResultSet åtkomst av datat position efter.next() markör.next() returnerar false här Läsning av data-innehåll Data avläses via ett antal typbestämda getxxx metoder getint(...) returnerar datan som en getstring(...) returnerar data som en sträng... Vilken kolumn man ska läsa från identifieras av namn eller index index number startar på 1 String name myrs.getstring(2); cursor Steg 4: Ta hand om resultset @ page import"javax.naming.*,java..*,javax..*" Context env null; DataSource source null; env new InitialContext(); source (DataSource)env.lookup("jdbc/InformixCoreDS"); Connection con source.getconnection(); Statement s con.createstatement(); String "select * from studenter order by enamn"; ResultSet rs s.executequery(); 1 2 3 4... 4

PreparedStatement I en s k förberedd SQL-sats läggs selektionsvärden in som vaiabler, p s s kan samma kod återanvändas vid ett senare tillfälle. Det finns en annan god anledning till att använda PreparedStatement (PS), nämligen säkerhet. Om man t e x har ett formulär där man ska välja att kunna radera en rad i en databas är det e så bra om användaren skriver in (select * from tabellnamn) PS ser automatiskt till att konvertera special tecken så som så att det e tolkas att databasen. PreparedStatement ps; ps con.preparestatement( SELECT * FROM studenter WHERE enamn? );... ps.setstring(1, Bengtsson ); rs ps.executequery(); Transaktions stöd När uppdatering i en tabell är beroenda av uppdateringen i en annan tabell Exempel: En student ska registreras i ett kursregister och på minst en kurs. Två tabeller finns ( studenter, kurser) och båda insert-satserna måste fungera. Transaktions stöd (forts) Connection har en metod setautocommit(boolean autocommit) Statement Statement s s con.createstatement(); con.createstatement(); con.setautocommit(false); con.setautocommit(false); String String studenter studenter VALUES(3,'Goran','Henriksson',3)"; VALUES(3,'Goran','Henriksson',3)"; s.executeupdate(); s.executeupdate(); transaktion1 transaktion1 kurser kurser VALUES(3,'2D1311','Programmeringsteknik VALUES(3,'2D1311','Programmeringsteknik med med PBL',4)"; PBL',4)"; s.executeupdate(); s.executeupdate(); transaktion2 transaktion2 if((transaktion1 if((transaktion1 1) 1) && && (transaktion2 (transaktion2 1)) 1)) { { con.commit(); con.commit(); System.out.prln("Båda System.out.prln("Båda tabellerna tabellerna uppdaterade!"); uppdaterade!"); else{ else{ con.rollback(); con.rollback(); System.out.prln("Ingen System.out.prln("Ingen tabell tabell uppdaterad uppdaterad då då ett ett fel fel har har uppstått!"); uppstått!"); Glöm e att sätta tillbaka autocommit! SQL syntax (fort...) UPDATE studenter SET fnamn Adam WHERE fnamn Ada UPDATE kurser SET credits 4 WHERE credits < 4 DELETE from studenter WHERE enamn like %sson INSERT studenter VALUES (4, Ada, Bengtsson ) SELECT * from studenter where fnamn Ada CREATE TABLE users ( username varchar(50), password varchar(50)) Exempel 1:5 Exempel 2:5 <html> <head><title>exempel 5</title></head> <body> <center> <html> <head><title>exempel 5</title></head> <body> <center> <h2>sparandeberäkning</h2> <form action"exempel5.jsp"> <p>insättning första året: <input typetext name"deposit"> <p>antal år att förräntas: <input typetext name"time"> <p><input typesubmit value"beräkna"> </form> </center> </body> </html> <jsp:usebean class"bean.savingsbean" id"sb" scope"session"/> <jsp:setproperty name"sb" property"*"> sb.compute(); <h2>resultat</h2> <p>du får ut <jsp:getproperty name"sb" property"withdrawal"> kr. <p>beräkningen är baserad på <jsp:getproperty name"sb" property"erest">% ränta för år <jsp:getproperty name"sb" property"year">. </center> </body> </html> 5

package bean; import java..*; import javax..*; import javax.naming.*; import java.text.*; public class SavingsBean{ private double deposit; private double time; private withdrawal; private double erest; private year; public SavingsBean(){ public void setdeposit(double deposit){ this.deposit deposit; public void settime(double time){ this.time time; Exempel 3:5 Exempel 4:5 public void compute(){ SimpleDateFormat formatter new SimpleDateFormat("yyyy"); java.util.date rightnow new java.util.date(); String datestring formatter.format(rightnow); Context env null; DataSource source null; env new InitialContext(); source (DataSource)env.lookup("jdbc/InformixCoreDS"); //source (DataSource)env.lookup("jdbc/MySqlCoreDS"); System.out.prln("<p>"+e.getMessage()); Connection con source.getconnection(); Statement s con.createstatement(); String "select * from erest where year " + datestring; ResultSet rs s.executequery(); year Integer.parseInt(rs.getString("year")); erest Double.parseDouble(rs.getString("rate")); System. withdrawal ()Math.round(deposit*Math.pow((100+erest)/100,time)); Exempel 5:5 public getwithdrawal(){ return withdrawal; public double getinterest(){ return erest; public getyear(){ return year; 6