Πανεπιστήμιο Πειραιώς Τμήμα Ψηφιακών Συστημάτων Σχεδιασμός Βάσεων Δεδομένων Εργαστήριο 5 Δρ. Βασιλική Κούφη
Περιεχόμενα Ανάπτυξη προγράμματος Java Σύνδεση με βάση δεδομένων Άσκησης 2 (Εργαστηριακά Μαθήματα 2 & 3) Εκτέλεση ερωτημάτων SQL στη Βάση Δεδομένων Δημιουργία Βάσης Δεδομένων Χρήση μοντέλου E-R από την Άσκηση 3 (Εργαστηριακά Μαθήματα 2 & 3) Εκτέλεση SQL ερωτημάτων στη βάση δεδομένων
Σύνδεση στη ΒΔ με Java 1. Η java παρέχει κάποιες κλάσεις και APIs με τη βοήθεια των οποίων μπορεί να γίνει εύκολη χρήση μιας βάσης δεδομένων - Σύνδεση αρχείου Java με βάση δεδομένων (με χρήση MySQL driver) - Διαχείριση βάσης δεδομένων (insert, query, update) 2. Απαραίτητο λογισμικό: Eclipse for Java Developers JDBC Driver της MySQL (Είναι αναρτημένο στον Εύδοξο)
Σύνδεση στη ΒΔ με Java Ανοίγουμε το Eclipse και δημιουργούμε ένα Java Project επιλέγοντας File > New > Java Project
Σύνδεση στη ΒΔ με Java Στο παράθυρο που εμφανίζεται ορίζουμε ως Project Name το testmysqlconn και πατάμε Finish.
Σύνδεση στη ΒΔ με Java Από το φάκελο Έγγραφα > Labs > Εργαστηριακό Μάθημα 5 > Αρχεία υλοποίησης για σύνδεση με ΒΔ στον Εύδοξο κατεβάζοθμε τα ακόλουθα: Το πρόγραμμα Java για σύνδεση με τη Βάση Δεδομένων της Άσκησης 2 του Εργαστηριακού Μαθήματος 2 Το αρχείο MySQL JDBC Driver Αντιγράφουμε το αρχείο java στο folder src του project που δημιουργήσαμε. Κάνουμε extract στο Desktop τον JDBC Driver της MySQL
Σύνδεση στη ΒΔ με Java Στον Package Explorer του Eclipse κάνουμε δεξί κλικ και επιλέγουμε Build Path > Configure Build Path.
Σύνδεση στη ΒΔ με Java Στο παράθυρο που εμφανίζεται κάνουμε κλικ στο Add External JARs.
Σύνδεση στη ΒΔ με Java Στο παράθυρο που εμφανίζεται εντοπίζουμε και επιλέγουμε το αρχείο mysql-connector-java-5.1.41-bin.jar το οποίο βρίσκεται μέσα στο φάκελο που προήλθε απο την αποσυμπίεση του JDBC Connector (το κάναμε extract πριν στο Desktop).
Εφαρμογή Java Ανάκτηση Δεδομένων από τη ΒΔ Τρέχουμε το πρόγραμμα και παίρνουμε ως Output
Δημιουργία ΒΔ Άσκησης 3 Κατεβάζουμε από τον Εύδοξο: Τα DDL aρχεία για τη δημιουργία της Βάσης Δεδομένων (θα χρειαστούμε μόνο το oracle-data-modeler-converted-to-mysql.ddl) Τις εντολές SQL για Βάση Δεδομένων Άσκησης 3 (Εργαστηριακά Μαθήματα 2 & 3) (αρχείο data-insertion.txt) Δημιουργούμε μια κενή βάση δεδομένων στην MySQL, την BookingDB Στην καρτέλα SQL της BookinDB εκτελούμε: Όλες τις εντολές SQL που βρίσκονται μέσα στο αρχείο oracle-datamodeler-converted-to-mysql.ddl το οποίο κατεβάσαμε προηγουμένως. Όλες τις εντολές SQL που βρίσκονται μέσα στο αρχείο datainsertion.txt το οποίο κατεβάσαμε προηγουμένως.
Εκτέλεση SQL ερωτημάτων στη Βάση Δεδομένων BookingDB 1. Εμφάνιση αλυσίδας ξενοδοχείων 2. Εμφάνιση όλων των δωματίων ανά ξενοδοχείο 3. Εμφάνιση όλων των δωματίων ανά ξενοδοχείο με τα amenities που διαθέτει το καθένα 4. Εμφάνιση όλων των δωματίων που έχουν τιμή μεταξύ 80 και 200 ευρώ 5. Εμφάνιση μέσης τιμής δωματίων της ίδιας χωρητικότητας 6. Εμφάνιση μέσης τιμής δωματίων της ίδιας χωρητικότητας ανά ξενοδοχείο 7. Εμφάνιση όλων των στοιχείων των κρατήσεων ανά πελάτη 8. Εμφάνιση όλων των στοιχείων των κρατήσεων ανά πελάτη οι οποίες πραγματοποιήθηκαν από την 1-1-2017 έως και τις 28-2- 2017
Εκτέλεση SQL ερωτημάτων στη Βάση Δεδομένων BookingDB 1. select * from HOTEL 2. select HOTEL.HOTEL_NAME as hotel, ROOM.ROOM_NUMBER, ROOM.ROOM as room,, ROOM.ROOM_CAPACITY as capacity, ROOM.ROOM_PRICE as price from ROOM, HOTEL where ROOM.HOTEL_HOTEL_UNIT=HOTEL.HOTEL_UNIT order by HOTEL.HOTEL_UNIT 3. select HOTEL.HOTEL_NAME as hotel, ROOM.ROOM_NUMBER as room, ROOM.ROOM_CAPACITY as capacity, ROOM.ROOM_PRICE as price, AMENITY.AMENITY_DESCR as amenity from ROOM, HOTEL, AMENITY, ROOM_AMENITY where ROOM.HOTEL_HOTEL_UNIT=HOTEL.HOTEL_UNIT and ROOM.ROOM_NUMBER= ROOM_AMENITY.ROOM_ROOM_NUMBER and ROOM.HOTEL_HOTEL_UNIT=ROOM_AMENITY.ROOM_HOTEL_HOTEL_UNIT and ROOM_AMENITY.AMENITY_AMENITY_CODE=AMENITY.AMENITY_CODE order by HOTEL.HOTEL_UNIT, ROOM.ROOM_NUMBER
Εκτέλεση SQL ερωτημάτων στη Βάση Δεδομένων BookingDB 4. select count(*) from room where room_price between 80 and 200 5. select ROOM.ROOM_CAPACITY as capacity, AVG(ROOM.ROOM_PRICE) as avgprice from HOTEL,ROOM group by capacity 6. select HOTEL.HOTEL_NAME as hotel, ROOM.ROOM_CAPACITY as capacity, AVG(ROOM.ROOM_PRICE) as avgprice from HOTEL,ROOM where ROOM.HOTEL_HOTEL_UNIT=HOTEL.HOTEL_UNIT group by hotel, capacity
Εκτέλεση SQL ερωτημάτων στη Βάση Δεδομένων BookingDB 7. select HOTEL.HOTEL_NAME, ROOM.ROOM_NUMBER, ROOM.ROOM_CAPACITY, BOOKING.BOOKING_ARRIVAL_DATE, BOOKING.BOOKING_DEP_DATE, CUSTOMER.CUSTOMER_NAME, CUSTOMER.CUSTOMER_SURNAME, CUSTOMER.CUSTOMER_TEL, CUSTOMER.CUSTOMER_ADT, CUSTOMER.CUSTOMER_PASSPORT from HOTEL,ROOM,BOOKING,CUSTOMER where BOOKING.ROOM_HOTEL_HOTEL_UNIT=ROOM.HOTEL_HOTEL_UNIT and ROOM.HOTEL_HOTEL_UNIT=HOTEL.HOTEL_UNIT and BOOKING.ROOM_ROOM_NUMBER=ROOM.ROOM_NUMBER and BOOKING.CUSTOMER_CUSTOMER_CODE=CUSTOMER.CUSTOMER_CODE order by CUSTOMER.CUSTOMER_CODE
Εκτέλεση SQL ερωτημάτων στη Βάση Δεδομένων BookingDB 8. select HOTEL.HOTEL_NAME, ROOM.ROOM_NUMBER, ROOM.ROOM_CAPACITY, BOOKING.BOOKING_ARRIVAL_DATE, BOOKING.BOOKING_DEP_DATE, CUSTOMER.CUSTOMER_NAME, CUSTOMER.CUSTOMER_SURNAME, CUSTOMER.CUSTOMER_TEL, CUSTOMER.CUSTOMER_ADT, CUSTOMER.CUSTOMER_PASSPORT from HOTEL,ROOM,BOOKING,CUSTOMER where BOOKING.ROOM_HOTEL_HOTEL_UNIT=ROOM.HOTEL_HOTEL_UNIT and ROOM.HOTEL_HOTEL_UNIT=HOTEL.HOTEL_UNIT and BOOKING.ROOM_ROOM_NUMBER=ROOM.ROOM_NUMBER and BOOKING.CUSTOMER_CUSTOMER_CODE=CUSTOMER.CUSTOMER_CODE and BOOKING.BOOKING_ARRIVAL_DATE between '2017-1-1' and '2017-2-28' order by CUSTOMER.CUSTOMER_CODE