Klientprogrammering mot databaser

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

INTRODUKTION TILL JDBC

Lösningsförslag, tentamen i Databaser

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

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

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

Sample exam questions. Database exam TIG058

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

Vyer, Prepared Statements, Triggers

DB2-åtkomst från WebSphere

1. PLSQL 2 2. Select into

Idag. Hur skapar vi och underhåller en databas? DD1370 (Föreläsning 4) Databasteknik och informationssystem 7,5 hp Hösten / 20

SQLs delar. Idag. Att utplåna en databas. Skapa en databas

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

Innehåll Programability Del 2

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

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

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

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

ADO.NET Murach Kapitel 17-20

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

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

Databasföreläsning. Del 2 lagrade procedurer, vyer och transaktioner

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

Björn Eiderbäck, Cristian Bogdan

MVC med Javascript och Ajax. Filip Ekberg

Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016

Databasutveckling Introduktion till SQL och TSQL

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

DI-institutionen Sid 1 av 5 Hans-Edy Mårtensson Sten Sundin Micael Karlsson

Laboration 24 Databasen MySQL och java

Testning av program. Verklig modell för programutveckling

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

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

Klassen javax.swing.timer

Föreläsning 2: Översikt över ett databassystem

Databaser och Datamodellering Foreläsning IV

Applikationsprogramgränsnitt mot relationsdatabaser

Laboration 5 - Biblioteksapplikation

Kopiering av objekt i Java

Felhantering TDDD78, TDDE30, 729A

Lösningsförslag till tentamen i OOP, HI1027 Fredag 21 oktober 2011

Stored procedure i ASP.NET

Stored procedure i ASP.NET

ÖVERVAKNING AV SQL SERVER

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

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

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

Vad är en databas? Exempel på databaser: Databas = Organiserad samling och lagring av information.

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

Objektorienterad programmering

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

Länkade strukturer, parametriserade typer och undantag

Undantagshantering. Fördjupad Java. Fel. Undantag. Fånga Undantag. Grupper av Undantag

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

Undantagshantering. Fördjupad Java. Undantag. Fel. Grupper av Undantag. Fånga Undantag

Databaser - Design och programmering

DB, DATA, LOGIC, EXPOSURE (WEB)

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

TENTAMEN DATABASKUNSKAP ITEK12

Asp.net mvc intro PER KVARNBRINK,

732G16: Databaser - Design och programmering

VAD GÖR DU / VEM ÄR DU?

Exceptions (undantag) Murach s: kap 7

Föreläsnings 9 - Exceptions, I/O

Innehåll Security. Chapter 4 och 7 Beginning SQL Server 2008 for Developers

CliMate: Laboration 3 dataselektion

Objektorienterad mjukvaruutveckling. 15 högskolepoäng. TentamensKod: Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

F4. programmeringsteknik och Matlab

Webbservrar, severskript & webbproduktion

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

PHP-presentation Dataföreningens Open Source-nätverk

Föreläsning 6 Databaser och säkerhet

Skapa en databas. Skapa en tabell. Gör man antingen genom kommandot

Javas Exceptions. DD2385 Programutvecklingsteknik Fler bilder till föreläsning 7 23/ Kort om Javas Exceptions Trådar i Java

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

Övningar i SQL. SQLAccess.doc Ove Lundgren

Fördjupad Java. Undantagshantering. Fel

Tentamen LÖSNINGSFÖRSLAG. c) Tilldelningen C x = new D() ger kompileringsfel eftersom klassen D är abstrakt.

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista Läsanvisningar och uppgifter

9. :new och :old -värden 10. Triggerns olika delar 11. Olika typer av triggrar 12. Kodexempel. Pär Douhan,

Spara papper! Skriv inte ut sammanfattning utan ladda ner PDF!

Skapa exempeldatabasen

Föreläsning 3 Innehåll. Generiska klasser. Icke-generisk lista ArrayList, skiss av implementering. Icke-generisk lista Risk för fel

Modern webbutveckling. av Robert Welin-Berger

OOP Objekt-orienterad programmering

Generiska konstruktioner. Kursbokens kapitel 13

Lab 6: ASP.NET 2.0 Providermodellen

Tentamen ID1004 Objektorienterad programmering May 29, 2012

Spara papper! Skriv inte ut sammanfattning utan ladda ner PDF!

Objektorienterad Programmering (TDDC77)

Internationalisering/lokalisering på webben

TENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. VT-13 Datum: Tid: kl

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

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

Parallellism, återblick

Webbprogrammering, grundkurs 725G54

Transkript:

Klientprogrammering mot Databaser Java DataBase Connectivity, JDBC Klientprogrammering mot databaser Native API olika för olika DBMS, ofta i C/C++ ODBC, Open Datbase Connectivity samma API för olika databashanterare. C/C++ JDBC, Java Database Connectivity samma API för olika databashanterare. Java Webbserver + skriptspråk för dynamiska webbsidor PHP, Active Server Pages (ASP), Java Server Pages (JSP) m.fl. 1

JDBC, Arkitektur Klientapplikation Applikationskod i Java API (java.sql, javax.sql) JDBC driver (drivrutin) Nätverk, t.ex. internet (Protokoll specifikt för DBMS) DBMS Server MyDB Treskiktsarkitektur Källa: http://docs.oracle.com/javase/tutorial/jdbc/index.html 2

Komponenter i JDBC DriverManager laddar rätt drivrutin (om den finns på systemet) och skapar en connection. Connection representerar en session med databasen och sköter kommunikationen. Statement/PreparedStatement/CallableState ment används för att exekvera SQLkommandon. Fås från Connection objektet. ResultSet en tabell data, resultatet av en SQL fråga. Skapa en anslutning String server = "jdbc:postgresql://localhost:5432/" + nameofdatabase + "?UseClientEnc=UTF8"; Class.forName("org.postgresql.Driver"); Connection con = DriverManager.getConnection( server, user, pwd);... con.close(); 3

Exekvera en SQL sats Statement stmt = con.createstatement(); String sql = DELETE FROM Employee WHERE name LIKE Anders ; int n = stmt.executeupdate(sql); executeupdate kan exekvera satser med INSERT, DELETE och UPDATE satser (och DDL satser) Exekvera en SQL fråga, SELECT Statement stmt = con.createstatement(); String sql = SELECT * FROM Employee ; ResultSet rs = stmt.executequery(sql); while(rs.next()) { int eno = rs.getint( eno ); String name = rs.getstring( name );...... stmt.close(); 4

ResultSet Cursor (ung. en iterator) pekar på aktuell rad, next() förflyttar cursorn 1 rad Metoder för att hämta alla vanliga datayper, t.ex. getdate(string columnname) getdate(int column) första index är 1 getmetadata() antal, typer, namn m.m. för kolumnerna NB! ResultSet är temporärt, om stmt stängs, eller ny fråga exekveras på samma stmt, stängs rs. PreparedStatment Använd Prepared statement då en specifik sats exekveras ofta Satsen kompileras första gången den exekveras och kan återanvändas tills den uttryckligen stängs (eller session avslutas) String sql = INSERT... ; PreparedStatement pstmt = con.preparestatement(sql); int n = pstmt.executeupdate(); 5

PreparedStatement Man kan, och bör, använda in parametrar till ett PreparedStatement String sql = "INSERT INTO Emp_Proj VALUES (?,?,?)"; PreparedStatement addemptoproj = con.preparestatement(sql); addemptoproj.setint(1, 107); addemptoproj.setint(2, 1002); addemptoproj.setdouble(3, 100); int n = addemptoproj.executeupdate(); CallableSatement Används för att anropa lagrade procedurer String call = {? = call proj_hours(?) ; CallableStatement cstmt = con.preparecall(call); cstmt.registeroutparameter(1, Types.BIGINT); cstmt.setint(2, projno); cstmt.execute(); int hours = cstmt.getint(1); 6

Felhantering SQLException och subklasser Checked exceptions se.getsqlstate()sql state enligt SQL:2003 konventioner se.geterrorcode() se.getmessage() Länk till ursprunglig(a) exception(s) Felhantering Viktigt att allokerade resurser frigörs (ex statement stängs) oavsett om fel uppstår eller ej Om du inte kan hantera felet i metoden kasta det vidare till anropande metod public void sqlmethod(...) throws SQLException { Statement stmt null; try { stmt = con.createstatement();... finally { stmt.close(); 7

Transaktioner 1. Slå av auto commit (som är default) 2. Exekvera sql satserna som ingår i transaktionen 3. Kontrollera om transaktionen verkligen ska genomföras... 4. Utifrån svaret ovan: con.commit() eller con.rollback() 5. Slå på auto commit igen Transaktioner Statement stmt = null; try { stmt = con.createstatement(); con.setautocommit(false); stmt.executeupdate("insert..."); stmt.executeupdate("update..."); //... con.commit(); catch (SQLException e) { if (con!= null) con.rollback(); throw e; finally { if (stmt!= null) stmt.close(); con.setautocommit(true); 8

Användare(!) Connection con = DriverManager.getConnection( server, user, pwd); Vilken användare? Skapa en användare som har på lämpligt sätt begränsade rättigheter till din databas Ex för PostgreSQL: CREATE USER clienttapp PASSWORD 'qwerty GRANT SELECT ON Employee, Department, Project TO clienttapp Alternativt ge rättigheter endast till specialiserade vyer SQL injection(!) String sql = SELECT name, phone FROM Employee WHERE name = + userinput + AND secretphone = FALSE ; Vad blir frågan om användaren matar in Anders OR x = x OR x = x? Vill du slippa problem med SQL injection använd PreparedStatement, där parameterar skickas till den förkompilerade frågan: pstmt.setstring(1, userinput); 9

Applikationen Model View Controller Model är klasser som kommunicerar med databasen via JDBC Ev mappa ResultSet mot objekt, ex ArrayList<Employee> som sedan skickas vidare till view Använd gärna PreparedStatements, effektivare och säkrare Exceptions som fångas först i UI bör åtminstone resultera i ett kort felmeddelande (använd JOptionPane). Applikationen, user interface Om endast vissa värden är tillåtna, gör det omöjligt att mata in annat, använd t.ex. JComboBox Inloggning sker lämpligen i ett separat fönster, använd JDialog Resultat av sökningar presenteras snyggt i en JTable (+ JTableModel) BorderLayout ger enkelt ett snyggt och intuitivt ui 10