Download de presentatie
De presentatie wordt gedownload. Even geduld aub
GepubliceerdMartina Dekker Laatst gewijzigd meer dan 10 jaar geleden
1
Deel 9: Relationele Databases: Oef. & 1e client- server app 1 Internetapplicaties Deel 9: Relationele Databases: Oefeningen en 1e client- serverapplicatie
2
Deel 9: Relationele Databases: Oef. & 1e client- server app 2 Doelstelling Vertrouwd raken met SQL 1e kennismaking met client-serverapplicaties: Java en SQL.
3
Deel 9: Relationele Databases: Oef. & 1e client- server app 3 Boeken/tutorials: Google: online SQL tutorial Beginning JSP Web Development, Wrox Vooral hfdst. 15
4
Deel 9: Relationele Databases: Oef. & 1e client- server app 4 Like Syntax: …where [veldnaam] like ‘%xyz’ Dit betekent dat die records gekozen worden waarvan de veldnaam eindigt met xyz. In de plaats van, de % mag om het even wat staan. Voorbeelden: Select * from persoon where voornaam like ‘J%’ Select * from persoon where naam like ‘%van%’
5
Deel 9: Relationele Databases: Oef. & 1e client- server app 5 Opgaven Oplossingen: zie bijgevoegd blad 1. Creëer een nieuwe database les9 2. Creëer een tabel werknemer met de velden vnaam, naam, titel, gebdat, salaris met gepaste types. Gebruik decimal(12,2) als type voor het salaris. 3. Vul de volgende gegevens in maar laat u niet vangen. (bron http://sqlcourse.com/): Jonie Weber, Secretary, 2 mei 1968, 19500.00 Potsy Weber, Programmer, 8 maart 1970, 45300.00 Dirk Smith, Programmer II, 24 feb 1972, 75020.00
6
Deel 9: Relationele Databases: Oef. & 1e client- server app 6 Opgaven (select) Selecteer uit de tabel Werknemer: 4. alle velden voor alle records 5. voornaam en naam van iedereen, geboren na 1/1/1970 6. alle velden van iedereen wiens naam ‘ebe’ bevat.
7
Deel 9: Relationele Databases: Oef. & 1e client- server app 7 Opgaven (update/delete) 7. Jonie Weber is net getrouwd met Bob Williams. Pas haar naam aan: Weber- Williams. 8. Iedereen die minder dan 30000 verdient, krijgt 3500 opslag. (deze syntax hebben we niet helemaal gezien: doe een gok!) 9. Jonie Weber-Williams heeft het huis zojuist verlaten. Verwijder haar uit de tabel.
8
Deel 9: Relationele Databases: Oef. & 1e client- server app 8 Aggregate functions MIN kleinste waarde MAX grootste waarde SUMsom AVGgemiddelde COUNT(*) Aantal records
9
Deel 9: Relationele Databases: Oef. & 1e client- server app 9 Aggregate functions Voorbeeld : mysql> select avg(salaris) as gemsal from werknemer; +--------------+ | gemsal | +--------------+ | 60160.000000 | +--------------+ Ander voorbeeld: mmysql> select count(*) from werknemer; +----------+ | count(*) | +----------+ | 2 | +----------+
10
Deel 9: Relationele Databases: Oef. & 1e client- server app 10 Opgaven (aggregate functions) 10. Vraag de totale salarismassa van iedereen op. 11. Vraag het grootste salaris en noem dit maxsal.
11
Deel 9: Relationele Databases: Oef. & 1e client- server app 11 Structuurwijzigingen Noot: In gewone programmacode hoef je als programmeur dit meestal niet zo te doen. Meestal gaat dit via een GUI. De syntax is bovendien behoorlijk verwarrend (alter/modify/change). Toevoegen van een veld: mysql>alter table werknemer ADD (persnr char(8)); Wijzigen veldnaam (type herhalen): mysql>alter table werknemer ->CHANGE persnr personeelsnr char(8); ->CHANGE persnr personeelsnr char(8); Wijzig velddefinitie (vb type) : mysql>alter table werknemer MODIFY personeelsnr char(10); Verwijderen veldnaam : mysql>alter table werknemer DROP personeelsnr;
12
Deel 9: Relationele Databases: Oef. & 1e client- server app 12 Installatie JDBC driver www.mysql.com www.mysql.com JDBC driver production version : Connector/J Production 3.0.10 (zip-file) Bewaar de zipfile ergens: mysql-connector-java-3.0.10-stable.zip We hebben alleen de jar-file nodig die in de zipfile zit: mysql-connector-java-3.0.10-stable-bin.jar Bewaar deze in de de common\lib subfolder van uw Tomcat directory (u kunt dit bestand slepen) C:\jakarta-tomcat-4.1.24\common\lib De CLASSPATH systeemvariabele moet aangepast worden. Control panel/Systeem/Advanced/System Variables. Achteraan toevoegen !!!: ;C:\jakarta-tomcat-4.1.24\common\lib\mysql-connector-java-3.0.10-stable-bin.jar
13
Deel 9: Relationele Databases: Oef. & 1e client- server app 13 Eerste client server applicatie We maken eerst een nieuwe tabel aan in onze database les9, nl de tabel book. C:\mysql\bin>mysql mysql> use les9 mysql> create table book (title_id integer, category_id integer, title char(25), price decimal(12,2) ); price decimal(12,2) ); mysql> exit We zullen deze tabel opvullen vanuit een java- programmaatje. (Zie volgende slide)
14
Deel 9: Relationele Databases: Oef. & 1e client- server app 14 Eerste client server applicatie: PopulateTable.java Download het bestand PopulateTable.java van de website, bewaar het in C:\testcs, compileer en laat lopen. C:\testcs>javac PopulateTable.java C:\testcs>java PopulateTable JDBC driver loaded Database connection established Books added.
15
Deel 9: Relationele Databases: Oef. & 1e client- server app 15 Eerste client server applicatie: PopulateTable.java : controle U kunt controleren dat er effectief iets werd toegevoegd. In c:\mysql\bin, tikt u mysql en vervolgens: mysql> use les9 mysql> select * from book; +----------+-------------+---------------------------+-------+ | title_id | category_id | title | price | +----------+-------------+---------------------------+-------+ | 19 | 1 | Professional Java Data 2 | 59.99 | | 21 | 1 | Professional Java Securit | 49.99 | | 22 | 1 | Beginning SQL Programming | 49.99 | +----------+-------------+---------------------------+-------+ 3 rows in set (0.00 sec)
16
Deel 9: Relationele Databases: Oef. & 1e client- server app 16 PopulateTable.java: Opmerkingen Dit pakket bevat klassen ivm sql, zoals Connection: import java.sql.*; Het creëren van 1 instantie (object van de klasse org.gjt.mm.mysql.Driver zorgt dat de driver geladen wordt: Class.forName("org.gjt.mm.mysql.Driver").newIns tance(); DriverManager is kennelijk een klasse met een statische methode getConnection() die een nieuwe connectie terug geeft: con = DriverManager.getConnection( "jdbc:mysql://localhost/les9 ?user=root&password="); "jdbc:mysql://localhost/les9 ?user=root&password=");
17
Deel 9: Relationele Databases: Oef. & 1e client- server app 17 PopulateTable.java : Opmerkingen Connectie-objecten kunnen kennelijk statement-objecten maken en teruggeven. Een statement-object heeft een executeUpdate()-methode die een SQL-string als parameter verwacht: Statement stmt = con.createStatement(); String upd = "insert into book (title_id,category_id,title,price) " + "insert into book (title_id,category_id,title,price) " + "values (19,1,'Professional Java Data 2',59.99)," + "values (19,1,'Professional Java Data 2',59.99)," + " (21,1,'Professional Java Security 2',49.99)," + " (21,1,'Professional Java Security 2',49.99)," + " (22,1,'Beginning SQL Programming 2',49.99);"; " (22,1,'Beginning SQL Programming 2',49.99);";stmt.executeUpdate(upd); (In de code zie je dat verschillende records, gescheiden door comma’s, worden toegevoegd.) Het geheel zit in verschillende try/catch blocks om ons te informeren over wat er misgegaan is als iets niet werkt.
18
Deel 9: Relationele Databases: Oef. & 1e client- server app 18 Recordsets: ShowTable.java Download het bestand ShowTable.java van de website, bewaar het in C:\testcs, compileer en laat lopen. C:\testcs>javac ShowTable.java C:\testcs>java ShowTable JDBC driver loaded Database connection established 22 Beginning SQL Programming 49.99 … 21 Professional Java Securit 49.99 Klaar met tonen.
19
Deel 9: Relationele Databases: Oef. & 1e client- server app 19 Opmerkingen Om via SQL een resultaat terug te krijgen moet je op het statement de executeQuery()-methode uitvoeren. Het resultaat is een ‘result set’, die de records bevat en die je kunt doorlopen: ResultSet rs = stmt.executeQuery( "SELECT title_id, title,price " + "SELECT title_id, title,price " + "FROM book ORDER BY title"); "FROM book ORDER BY title"); Recordsets hebben een methode next() die tegelijk de ‘recordpointer’ verschuift én een boolean teruggeeft die aangeeft of er daar wel een record staat. Er zijn verschillende get-methodes, naargelang hetveldtype. De type-mappings zijn helaas verschillend voor elke combinatie van SQL-dialect en programmeertaal. while (rs.next()) System.out.println(rs.getInt("title_id") + " " + System.out.println(rs.getInt("title_id") + " " + rs.getString("title") + " " + rs.getFloat("price")); rs.getString("title") + " " + rs.getFloat("price")); Als de database-server stored procedures ondersteunt, werken deze ook gewoon met de databasetypen die dan als typen voor variabelen kunnen gebruikt worden. N.B. Bij sommige gespecializeerde tools, zijn de databasetypen en de programmeertaaltypen gelijk (dBASE, FoxPro, Visual Objects)
Verwante presentaties
© 2024 SlidePlayer.nl Inc.
All rights reserved.