ΑΝΑΠΤΥΞΗ ΕΡΓΑΛΕΙΟΥ ΤΗΛΕ- ΕΚΠΑΙ ΕΥΣΗΣ ΓΙΑ ΤΗ ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ JAVA

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "ΑΝΑΠΤΥΞΗ ΕΡΓΑΛΕΙΟΥ ΤΗΛΕ- ΕΚΠΑΙ ΕΥΣΗΣ ΓΙΑ ΤΗ ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ JAVA"

Transcript

1 ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΝΑΠΤΥΞΗ ΕΡΓΑΛΕΙΟΥ ΤΗΛΕ- ΕΚΠΑΙ ΕΥΣΗΣ ΓΙΑ ΤΗ ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ JAVA ιπλωµατική Εργασία του Παρασκευόπουλου Παύλου (ΑΕΜ: 1133) Επιβλέπων καθηγητής: Ιωάννης Σταµέλος ΘΕΣΣΑΛΟΝΙΚΗ ΜΑΡΤΙΟΣ 2009

2 ΠΡΟΛΟΓΟΣ Η τεχνολογία έχει αναπτυχθεί πάρα πολύ, ειδικά τα τελευταία χρόνια. Αυτή η ανάπτυξη της τεχνολογίας είναι λογικό(έχει ως αποτέλεσµα) να επηρεάσει πολλούς τοµείς της ζωής µας. Ένας από τους τοµείς που έχει επηρεάσει πάρα πολύ είναι και ο τοµέας της εκπαίδευσης. Πλέον, χάρη στα τεχνολογικά επιτεύγµατα, και κυρίως την ανάπτυξη του ιαδικτύου, έχουµε την δυνατότητα να αναζητούµε, να διασταυρώνουµε και να διαµοιράζουµε πληροφορίες που παλαιότερα ήταν, εάν όχι αδύνατο, τροµερά χρονοβόρο να γίνει. Η ενσωµάτωση των Τεχνολογιών Πληροφορίας & Επικοινωνιών στην εκπαιδευτική δραστηριότητα επιτρέπει να προσφερθούν εκπαιδευτικές υπηρεσίες µέσω του διαδικτύου µε χρήση ποικίλων σύγχρονων και ασύγχρονων υπηρεσιών. Εισάγεται έτσι ο όρος τηλεεκπαίδευση (tele-education) που η ετυµολογική του ανάλυση δείχνει πως σηµαίνει την εκπαίδευση που προσφέρεται από µακριά, δηλαδή την εκπαίδευση από απόσταση. Έτσι η τηλεκπαίδευση µπορεί να θεωρηθεί ως η τοµή της εκπαίδευσης από απόσταση και της τεχνολογικά υποστηριζόµενης µάθησης. Ο ορισµός που δίνεται από την Γενική ιεύθυνση Τηλεπικοινωνιών MOPTMA είναι ο εξής: Η τηλεκπαίδευση θα πρέπει να γίνει κατανοητή ως η ανάπτυξη της διαδικασίας της εξ αποστάσεως εκπαίδευσης(ελεγχόµενης από κάποιον άλλον ή όχι), βασιζόµενη στην χρήση πληροφοριακών και τηλεπικοινωνιακών τεχνολογιών, οι οποίες κάνουν διαδραστική, ευέλικτη και προσβάσιµη την µάθηση για οποιονδήποτε ενδιαφερόµενο. Τα πλεονεκτήµατα τα οποία έχει η τηλεκπαίδευση σε σχέση µε τις κλασικές εκπαιδευτικές µεθόδους είναι πολλά. Πιο χαρακτηριστικά: 1. Μας προσφέρει ευελιξία καθώς είναι ανεξάρτητη από τον τόπο ή τον χρόνο 2. Είναι αυτορυθµιζόµενη και αυτοδιευθυνόµενη καθώς µας επιτρέπει να µελετάµε ότι µας ενδιαφέρει και όποτε εµείς θέλουµε. 3. Επιτρέπει την ανάπτυξη πιο καλών ερωτήσεων και πιο τεκµηριωµένων σχολίων, γεγονός που βοηθάει στην κατανόηση

3 4. Λόγω και του προηγούµενου πλεονεκτήµατος, καθώς και της πληθώρας πηγών που µπορούµε να έχουµε στο ιαδίκτυο, επιτυγχάνεται µία πιο ολοκληρωµένη διαµόρφωση ιδεών που οδηγεί σε µια πιο ολοκληρωµένη γνώση 5. Χάρη στην δυνατότητα της ανωνυµίας που µπορούµε να έχουµε, µας δύνεται η δυνατότητα να εκφράσουµε τις απόψεις µας ή τις ερωτήσεις µας χωρίς να φοβόµαστε ή ν ντρεπόµαστε Φυσικά εκτός από θετικά χαρακτηριστικά, η τηλεκπαίδευση έχει και αρκετά αρνητικά χαρακτηριστικά τα οποία θα µπορούσαν να αποτελέσουν αποτρεπτικούς παράγοντες. Μερικά από αυτά είναι: 1. Η απαιτούµενη καλή πρόσβαση που θα πρέπει να έχουµε στο ιαδίκτυο 2. Η µεγάλη πιθανότητα εγκατάλειψης των προσπαθειών λόγω µη κατανόησης του αντικειµένου 3. Η έλλειψη άµεσης επικοινωνίας µε κάποιον που θα µπορούσε να µας λύσει γρήγορα και εύκολα ενδεχόµενες απορίες ή προβλήµατα που θα παρουσιαστούν 4. Η έλλειψη καθοδήγησης και η δυσκολία της εύρεσης κατάλληλων πληροφοριών (µέσα στον τεράστιο όγκο πληροφοριών που υπάρχουν στο ιαδίκτυο) που αντιµετωπίζει κάποιος που δεν είναι ιδιαίτερα εξοικειωµένος 5. Η χρήση πληροφοριών που δεν είναι ακριβής ή δεν είναι καλά διατυπωµένες και µπορεί να οδηγήσουν τον χρήστη σε αδιέξοδα 6. Η απαίτηση ο χρήστης να έχει την κατάλληλη ωριµότητα και ικανότητα να προσαρµόζεται Το υπερκείµενο που ακολουθεί, έχει ως στόχο την ανάπτυξη ενός εργαλείου αυτoεκπαίδευσης γλώσσας προγραµµατισµού JAVA. Σκοπός µας είναι να πετύχουµε την δηµιουργία ενός εργαλείου το οποίο να λύνει όσο το δυνατόν περισσότερες απορίες και να αφήνει όσο το δυνατόν λιγότερα κενά. Επειδή για ευνόητους λόγους, δεν είναι

4 δυνατόν να καλύψουµε κάθε πτυχή της γλώσσας JAVA, θα επικεντρωθούµε στην ιασύνδεση Εφαρµογής JAVA µε Βάση εδοµένων, γνωστό ως JDBC. Πιο συγκεκριµένα τα κεφάλαια 1-2 είναι κεφάλαια εισαγωγικά τα οποία σκοπό έχουν να µας προϊδεάσουν για το τι είναι το JDBC και να µας παρουσιάσουν τις κυριότερες δυνατές ενέργειες που µπορούµε να κάνουµε σε µια Βάση εδοµένων καθώς και τις εντολές µε τις οποίες υλοποιούνται οι ενέργειες αυτές. Τα κεφάλαια 3-4 σκοπό έχουν την ανάλυση της αρχιτεκτονικής µε την οποία δουλεύει το JDBC καθώς και τα συστατικά του. Τα κεφάλαια 5-6 ως στόχο έχουν την εξοικείωση µας µε το Eclipse, την MySQL και την JAVA καθώς και την παρουσίαση των σηµαντικότερων δυνατών ενεργειών που µπορούµε να κάνουµε σε µία Βάση εδοµένων µέσω της JAVA(και εν δυνάµει όλων των αντικειµενοστραφών γλωσσών προγραµµατισµού). Η ανάπτυξη του κεφαλαίου 7 σκοπό έχει την σύγκριση και ανάδειξη των διαφορών όταν χρησιµοποιούµε διαφορετικές πλατφόρµες Βάσεων εδοµένων. Θα ήθελα να ευχαριστήσω ιδιαιτέρως την συνάδελφο Στυψανέλλη Ιωάννα- Βασιλική(Ιόβη) για την πολύτιµή βοήθεια της στην ολοκλήρωση του υπερκειµένου αυτού. Πηγές: i. Στ. ηµητριάδης, Χ.Καραγιαννίδης, Α.Ποµπόρτσης, Θρ.Τσιάτσος: Ευέλικτη Μάθηση µε χρήση τεχνολογιών πληροφορίας και επικοινωνιών, Εκδόσεις Τζιόλα ii.

5 Περιεχόµενα Περιεχόµενα Εισαγωγή Βάσεις εδοµένων Γενικά περί Βάσεων εδοµένων Στοιχεία γλώσσας SQL Εισαγωγή Πως δοµεί η SQL τα δεδοµένα µας και ποιοι είναι οι δυνατοί τύποι δεδοµένων; Βασικές πράξεις µε την SQL Ερωτήσεις, Ασκήσεις και ραστηριότητες Java Database Connectivity Εισαγωγή στη JDBC Αρχιτεκτονική JDBC Χρήση της JDBC σε αρχιτεκτονικές java Ερωτήσεις-Ασκήσεις Συστατικά JDBC JDBC API JDBC Driver Manager Τι είναι JDBC driver Επικοινωνία µε Βάση εδοµένων Εισαγωγή Αρχικοποίηση µίας Βάσης εδοµένων ηµιουργία βάσης µέσω κονσόλας ηµιουργία βάσης µέσω JDBC Σύνδεση µε Β Εξωτερική σύνδεση Εσωτερική σύνδεση Φόρτωση στοιχείων της βάσης Το αντικείµενο της κλάσης Statement ηµιουργία αντικειµένου Statement...44

6 5.4.3 Μέθοδοι που χρησιµοποιούνται από το Statement Ιδιότητες για το Statement Αρχικοποίηση Πίνακα ηµιουργία πίνακα Εισαγωγή, διαγραφή τιµών Εκτέλεση εντολών Ερωτήσεις-Ασκήσεις Ανάκτηση και εισαγωγή δεδοµένων Ανάκτηση και εµφάνιση εδοµένων Ανάκτηση εδοµένων Εµφάνιση εδοµένων Ενηµέρωση Πινάκων Εισαγωγή Ενηµέρωση Μέσω Των Μεθόδων της SQL Ενηµέρωση Μέσω Των Μεθόδων της JAVA Xρήση Έτοιµων Εντολών To αντικείµενο PreparedStatement ηµιουργία αντικειµένου της PreparedStatement Μέθοδοι της PreparedStatement Τρόποι εκτέλεσης Ανάθεση τιµών Χρήση Joins Εισαγωγή Χρήση Συναλλαγών (transactions) Σε τι χρησιµεύουν οι συναλλαγές; Η λογική µε την οποία λειτουργούν οι συναλλαγές Χρησιµοποίηση των συναλλαγών για τη διατήρηση της ακεραιότητας των δεδοµένων της βάσης Η δηµιουργία ενός Rollback σηµείου και ενός Savepoint Απελευθέρωση ενός Savepoint Πότε καλούµε ένα rollback...82

7 6.6 Αποθηκευµένες ιαδικασίες Τι είναι αποθηκευµένη διαδικασία; Σύνταξη αποθηκευµένης διαδικασίας Η κλάση CallableStatement ηµιουργία CallableStatement Πως καλούµε µια stored procedure από τη JDBC; Ερωτήσεις-Ασκήσεις- ραστηριότητες JDBC για τη Microsoft access Εισαγωγή ηµιουργία βάσης δεδοµένων µέσω MS Access ηµιουργία dsn Σύνδεση java µε βάση δεδοµένων ηµιουργία πίνακα ηµιουργία Πίνακα µε Microsoft Access-Εισαγωγή γραµµών ηµιουργία πίνακα µε JDBC Εισαγωγή νέων γραµµών στον πίνακα Επιλογή γραµµών από τον πίνακα...98 Σύνοψη Bιβλιογραφία ΠΑΡΑΡΤΗΜΑ...103

8 1 Εισαγωγή Τα δεδοµένα σήµερα υπάρχουν παντού και σχεδόν όλες οι πληροφορίες καταγράφονται. Οι µεγάλες ποσότητες δεδοµένων µάς επιβάλλουν την εύρεση µεθόδων αποθήκευσης ώστε να µπορούµε να κάνουµε την αναζήτηση και την ενηµέρωση πιο εύκολη και πιο λειτουργική, χρησιµοποιώντας όσο το δυνατόν λιγότερους υπολογιστικούς πόρους. Η ύπαρξη δεδοµένων χωρίς δοµηµένο τρόπο αποθήκευσης κάνει την χρήση των δεδοµένων πιο δύσκολη και προβληµατική. Η αρχική προσέγγιση αποθήκευσης και διαχείρισης δεδοµένων ήταν στην ευθύνη του κάθε προγράµµατος της κάθε εφαρµογής και η αποθήκευση γινόταν σε αρχεία του λειτουργικού συστήµατος. Η ανάγνωση, αποθήκευση και ενηµέρωση των δεδοµένων ανήκε στην ευθύνη του προγραµµατιστή της εφαρµογής. Για να γίνει πιο κατανοητό αυτό, θα µπορούσαµε να φανταστούµε µια τέτοια δοµή σαν µια βιβλιοθήκη όπου υπεύθυνος για την ταξινόµηση και διαχείριση των βιβλίων είναι µόνο ένας υπάλληλος. Έστω ότι ο υπάλληλος αυτός δεν χρησιµοποιεί ένα συγκεκριµένο αλγόριθµο για την ταξινόµηση των βιβλίων αλλά στηρίζεται µόνο στην εµπειρία και τη µνήµη του, για την εύρεση ενός βιβλίου. Κάτι τέτοιο καθιστά κατανοητό ότι εάν ο υπάλληλος αυτός πάρει µια µέρα άδεια ή βγει στην σύνταξη, για να βρει ο αντικαταστάτης του ένα βιβλίο θα πρέπει, ή να έχει εκπαιδευτεί δίπλα στον παλιό υπάλληλο, και να έχει µάθει ακριβώς το σύστηµα που χρησιµοποιούσε ο παλαιότερος υπάλληλος, ή να ψάχνει όλα τα βιβλία από την αρχή, µέχρι να βρει το βιβλίο που ψάχνει, ή να ξαναταξινοµήσει όλα τα βιβλία από την αρχή, κάτι που ενδεχοµένως θα του έπαιρνε βδοµάδες, εάν όχι µήνες. Επίσης η παραλαβή ενός νέου βιβλίου, ή ακόµα χειρότερα µιας νέας κατηγορίας βιβλίων, θα σήµαινε αδυναµία αλλαγής της δοµής της βιβλιοθήκης. Κάτι τέτοιο σαφώς κάνει κατανοητή την ανάγκη οργάνωσης των δεδοµένων σε µία Βάση εδοµένων (Β ) και ενός Συστήµατος ιαχείρισης Βάσεων εδοµένων ή Σ Β για εύκολη χρήση της Β. Ποια Σ Β υπάρχουν; τι είναι και σε τι χρησιµεύει το JDBC;

9 Ο περισσότερο διαδοµένος τύπος Β είναι ο λεγόµενος σχεσιακός (relational) τύπος που βασίζεται στις σχέσεις µεταξύ των οντοτήτων που αντιπροσωπεύονται από τα δεδοµένα(βλ.τόµο Β της ΠΛΗ11). Έχουν προταθεί και υλοποιηθεί και άλλων ειδών µοντέλα (π.χ. το αντικειµενοστρεφές µοντέλο τα αντικείµενα αποθηκεύονται απευθείας στη Β, το αντικειµενο-σχεσιακό µοντέλο - συνδυασµός των προηγουµένων) τα οποία όµως δεν έχουν τη επιτυχία που παρουσιάζει το σχεσιακό µοντέλο. Από την άλλη πλευρά, στον τοµέα του προγραµµατισµού, γνωρίζει µεγάλη διάδοση σήµερα ο Αντικειµενοστρεφής Προγραµµατισµός (βλ. Τόµο Γ της ΠΛΗ24), ο οποίος και έχει επικρατήσει στην υλοποίηση νέων, σχετικά µεγάλων συστηµάτων που επεξεργάζονται και διαχειρίζονται µεγάλο όγκο δεδοµένων (π.χ. σύγχρονα Πληροφοριακά Συστήµατα Επιχειρήσεων). Μία λοιπόν πολύ λογική επιλογή για την ανάπτυξη λογισµικού σήµερα είναι (α) αντικειµενοστρεφής κώδικας για την υλοποίηση της διασύνδεσης χρήστη και της λογικής του προγράµµατος και (β) σχεσιακό Σ Β για τη διαχείριση των δεδοµένων του προγράµµατος. Στο υπερκείµενο αυτό θα ασχοληθούµε ακριβώς µε την υλοποίηση αυτού του συνδυασµού. Πιο συγκεκριµένα, θα δούµε τη διασύνδεση εφαρµογής προγράµµατος Java Data Base Connectivity (JDBC), δηλ. το σύνολο των στοιχείων (εντολών, κλάσεων, µεθόδων κλπ) της γλώσσας Java που δίνει τη δυνατότητα σε ένα πρόγραµµα Java να συνεργάζεται µε ένα σχεσιακό Σ Β. Έχουν αναπτυχθεί πολλές σχεσιακές Β µε τα αντίστοιχα Σ Β, µε γνωστότερες από αυτές τη MySQL, τη MS SQL της Microsoft, την ORACLE και APACHE ORACLE και πολλές άλλες. Το JDBC ουσιαστικά αποτελεί µία γέφυρα που ενώνει τη γλώσσα προγραµµατισµού JAVA µε τα Σ Β που προαναφέρθηκαν. Πως να χρησιµοποιήσετε τον παρόντα οδηγό JDBC Ο οδηγός περιέχει αρχικά µία σύντοµη Εισαγωγή στις Β και στη γλώσσα SQL που αποσκοπεί στο να θυµίσει στο φοιτητή αναγνώστη έννοιες από τις Β και δεξιότητες που πρέπει να έχει ήδη αποκτήσει από προηγούµενες θεµατικές ενότητες. Αν ο φοιτητής

10 δεν αισθάνεται την ανάγκη να περάσει από αυτό το βοηθητικό στάδιο µπορεί να συνεχίσει απευθείας µε την περιγραφή και λεπτοµερή παρουσίαση του JDBC. Σε διάφορα σηµεία του οδηγού (συνήθως µετά την παρουσίαση κάποιας νέας έννοιας, εντολής κλπ) υπάρχουν παραδείγµατα και εκφωνήσεις ασκήσεων. Στις ασκήσεις δίνονται υποδείξεις και βοήθεια στην περίπτωση που η προσπάθεια απάντησης δεν ήταν ικανοποιητική.

11 2 Βάσεις εδοµένων 2.1 Γενικά περί Βάσεων εδοµένων Για να µπορέσουµε να κατανοήσουµε πλήρως το λόγο ύπαρξης του JDBC θα πρέπει πρώτα να γίνει κατανοητός ο λόγος ύπαρξης των Συστηµάτων ιαχείρισης Βάσεων εδοµένων (Σ Β ). Τι είναι ένα Σύστηµα ιαχείρισης Βάσεων εδοµένων και σε τι χρησιµεύει; Ως Σύστηµα ιαχείρισης Βάσεων εδοµένων (DBMS, Data Base Management System) ορίζεται ένα σύστηµα λογισµικού στο οποίο υλοποιούνται όλες οι λειτουργίες της Β που πρέπει να υποστηριχθούν, όπως αναζήτηση, εισαγωγή, διαγραφή, συγχρονισµός προσπελάσεων, προστασία κλπ.σύστηµα Βάσης εδοµένων (database system) είναι µια Β. µαζί µε το αντίστοιχο Σ Β ώστε να κάνουµε πιο εύκολη την εισαγωγή, διαγραφή και αναζήτηση δεδοµένων, την αλλαγή της δοµής των αρχείων, την αποφυγή της ύπαρξης πολλών ίδιων δεδοµένων, την εκτέλεση ερωτηµάτων προς τη Β σχετικά µε τα περιεχόµενά της, την τέλεση ταυτόχρονων πράξεων από πολλούς χρήστες (κάτι που ενδεχοµένως να αποτελεί θέµα ζωτικής σηµασίας σε προγράµµατα όπως τραπεζικά συστήµατα ή on-line συστήµατα κρατήσεων). Έτσι, µία Βάση εδοµένων αποτελεί ένα εργαλείο για τη συλλογή στοιχείων, σχετικών µεταξύ τους, τα οποία είναι δοµηµένα και καταχωρισµένα µε κατάλληλο τρόπο. Ένας

12 καθιερωµένος τρόπος για την αλληλεπίδραση µε µία σχεσιακή Β είναι η χρήση της γλώσσας SQL. 2.2 Στοιχεία γλώσσας SQL Εισαγωγή Η SQL (Structured Query Language ) είναι µία δοµηµένη γλώσσα ερωτηµάτων που χρησιµοποιεί το σχεσιακό µοντέλο ανάπτυξης ερωτηµάτων. Είναι µια γλώσσα υπολογιστών τυποποιηµένη κατά ANSI (American National Standards Institute) για την πρόσβαση και το χειρισµό των συστηµάτων βάσεων δεδοµένων. Η αρχική έκδοση της γλώσσας ονοµάστηκε SEQUEL (Structured English Query Language) και σχεδιάσθηκε από ερευνητική οµάδα της IBM στα πλαίσια του System R (1974). Η εταιρεία Oracle χρησιµοποίησε για πρώτη φορά τη γλώσσα σε εµπορικό Σ Β το Οι εντολές SQL χρησιµοποιούνται για να ανακτήσουν και να ενηµερώσουν τα στοιχεία σε µια βάση δεδοµένων. Χρησιµοποιείται από τους χρήστες όλων των Σ Β και µέσω αυτής µπορούµε να δηµιουργήσουµε, να ενηµερώσουµε και να διαγράψουµε δεδοµένα, καθώς και να διατυπώσουµε ερωτήµατα προς την Β µας µε σκοπό την εύρεσηεµφάνιση δεδοµένων. Υπάρχουν πολλές διαφορετικές εκδόσεις της γλώσσας SQL αλλά, για να είναι σύµφωνες µε τα πρότυπα ANSI, πρέπει να υποστηρίζουν τις ίδιες σηµαντικές λέξειςκλειδιά µε παρόµοια, εάν όχι ακριβώς ίδια, λογική (όπως για παράδειγµα SELECT, UPDATE, DELETE, INSERT, WHERE, αλλά και άλλες εντολές).

13 Σε αυτό τον οδηγό θα δώσουµε κάποια παραδείγµατα χρήσης της SQL για την πρόσβαση και χειρισµό των στοιχείων στη βάση Oracle, τη MySQL, τη Sybase, τον SQL Server, τη DB2, την Access καθώς και άλλα συστήµατα βάσεων δεδοµένων. Η SQL είναι µια δηλωτική γλώσσα υψηλού επιπέδου στην οποία ορίζουµε το τι θέλουµε να κάνουµε και όχι το πώς. Με την υποβολή ενός ερωτήµατος SQL εξετάζονται όλα τα δεδοµένα που βρίσκονται στην βάση δεδοµένων και µετά παίρνουµε το αποτέλεσµα του ερωτήµατος. Σηµείωση: Τα περισσότερα από τα Συστήµατα ιαχείρησης Βάσεων εδοµένων SQL έχουν επίσης τις δικές τους επεκτάσεις εκτός από τα πρότυπα SQL Πως δοµεί η SQL τα δεδοµένα µας και ποιοι είναι οι δυνατοί τύποι δεδοµένων; Η SQL δοµεί τα δεδοµένα µας σε πίνακες τους οποίους επεξεργάζεται. Αυτοί οι πίνακες ξεχωρίζουν, γιατί καθένας τους µπορεί να έχει ένα µοναδικό όνοµα. Αποτελούνται από γραµµές και στήλες. Οι στήλες στην κορυφή τους έχουν ένα όνοµα, το όνοµα της κάθε στήλης, το οποίο µας βοηθάει στην διευκρίνηση των δεδοµένων. Οι γραµµές αποτελούνται από δεδοµένα, των οποίων το είδος καθώς και το µέγεθος έχουµε προκαθορίσει όταν δηµιουργήσαµε-δηλώσαµε τον πίνακα µας. Η κάθε σειρά αποτελεί µία εγγραφή η οποία περιλαµβάνει τα δεδοµένα της γραµµής. Όταν κάνουµε εισαγωγή µίας εγγραφής είµαστε υποχρεωµένοι να εισάγουµε στοιχεία για την εγγραφή σε όλες τις στήλες, εποµένως δεν είναι δυνατόν να µείνει κενή κάποια στήλη. Η µόνη εξαίρεση είναι αν κατά την δηµιουργία του πίνακα µας είχαµε δηλώσει τη στήλη να παίρνει προκαθορισµένες τιµές (default) ή να έχει την δυνατότητα να παίρνει µηδενικές τιµές (τιµή NULL). Τα δεδοµένα µπορούν να έχουν τους εξής τύπους:

14 CHARACTER(N) ή CHAR(N) συµβολοσειρά σταθερού µήκους N χαρακτήρων CHARACTER VARYING (Ν) ή VARCHAR(N) ή CHAR VARYING(N) συµβολοσειρά µεταβλητού µήκους από 0 έως Ν χαρακτήρες BIT(N), VARBIT(N) ίδια λειτουργία µε CHAR(N) και VARCHAR(N) INTEGER ή ΙΝΤ, SMALLINT για µεγάλους και µικρούς ακέραιους (εξαρτάται από τον υπολογιστή που διαθέτουµε) NUMERIC(N,M) ή DECIMAL(N,M) ή DEC(N,M) αριθµός µε N συνολικά ψηφία από τα οποία τα M (ίσως και 0) είναι δεκαδικά (ακρίβεια και κλίµακα) FLOAT(N) όπου το Ν είναι η ακρίβεια της µαντίσας 1. REAL, DOUBLE PRECISION εξαρτώνται από τον υπολογιστή DATE, TIME, TIMESTAMP, INTERVAL χρησιµοποιούνται για τον ορισµό χρονικών στιγµών µε συγκεκριµένη ακρίβεια. Υποδιαιρούνται σε απλούστερα πεδία που είναι: YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, TIMEZONE_HOUR, TIMEZONE_MINUTE. DATE έχει τη µορφή: YYYY-MM-DD TIME έχει τη µορφή: HH-MM-SS TIME(I): µε I δεκαδικά για κλάσµατα δευτερολέπτου HH-MM-SS-F...F TIME WITH TIME ZONE: µε χρονική ζώνη HH-MM-SS-HH-MM TIME-STAMP έχει τη µορφή: YYYY-MM-DD-HH-MM-SS-F...F{-HH-MM INTERVAL: χρησιµοποιείται για την αναπαράσταση χρονικών διαστηµάτων µε ανάλογη µορφή και ακρίβεια. Όπως προαναφέραµε η SQL είναι µια δηλωτική γλώσσα υψηλού επιπέδου στην οποία ορίζουµε το τι θέλουµε να κάνουµε και όχι το πώς. Χωρίζεται σε δύο υπογλώσσες: 1 Μαντίσσα είναι το τµήµα του αριθµού κινητής υποδιαστολής που περιέχει τα σηµαντικά ψηφία του (το άλλο τµήµα αντιπροσωπεύει το πρόσηµο του). είτε στο

15 τη γλώσσα χειρισµού δεδοµένων (Data Manipulation Language-DML) και τη γλώσσα ορισµού δεδοµένων (Data Definition Language DDL). SQL, Γλώσσα χειρισµού δεδοµένων (Data Manipulation Language-DML). Η SQL είναι ουσιαστικά µία οµάδα εντολών για την εκτέλεση των ερωτηµάτων. Αλλά η SQL εµπεριέχει επίσης τη δυνατότητα σύνταξης εντολών ώστε να επιτύχουµε την εισαγωγή, ενηµέρωση και διαγραφή δεδοµένων. Αυτά τα ερωτήµατα και οι εντολές ενηµέρωσης µαζί αποτελούν το DML (Data Manipulation Language) µέρος της SQL: SELECT εξάγει δεδοµένα από έναν πίνακα µιας βάσης δεδοµένων UPDATE ενηµερώνει δεδοµένα σε έναν πίνακα µιας βάσης δεδοµένων DELETE - διαγράφει δεδοµένα από έναν πίνακα µιας βάσης δεδοµένων INSERT INTO εισάγει τα δεδοµένα µίας εγγραφής σε έναν πίνακα µιας βάσης δεδοµένων (σε µορφή γραµµής) SQL, Γλώσσα ορισµού δεδοµένων (Data Definition Language-DDL). Το DDL µέρος της SQL είναι αυτό που καθορίζει εάν ένας πίνακας θα µπορέσει να δηµιουργηθεί ή να διαγραφεί. Εδώ µπορούµε επίσης να καθορίσουµε τους δείκτες (κλειδιά), να καθορίσουµε τις συνδέσεις µεταξύ των πινάκων, και να επιβάλουµε περιορισµούς µεταξύ των πινάκων βάσεων δεδοµένων. Οι πιο σηµαντικές εντολέςδηλώσεις DDL στην SQL είναι οι εξής: CREATE TABLE δηµιουργεί έναν νέο πίνακα στην Β ALTER TABLE µπορεί να αλλάξει τα στοιχεία ενός πίνακα (όχι τα δεδοµένα αλλά τον αριθµό των στηλών, δηλ. να προσθέσει ή να αφαιρέσει κάποια στήλη) σε µια Β DROP TABLE διαγράφει έναν πίνακα από την Β CREATE INDEX δηµιουργεί ένα δείκτη (κλειδί) DROP INDEX διαγράφει ένα δείκτη (κλειδί)

16 2.2.3 Βασικές πράξεις µε την SQL Σε αυτό το σηµείο θα αναφέρουµε τον τρόπο σύνταξης µερικών εκ των βασικότερων και συχνότερα χρησιµοποιούµενων πράξεων στη χρήση της γλώσσας SQL. Για την δηµιουργία µιας βάσης: CREATE DATABASE <όνοµα_βάσης>; Για παράδειγµα η παρακάτω εντολή δηµιουργεί την βάση δεδοµένων µε όνοµα university: CREATE DATABASE university; Για την δηµιουργία ενός πίνακα: CREATE TABLE <όνοµα_πίνακα> (<όνοµα_στοιχείου> <τύπος_στοιχείου>); Για παράδειγµα η παρακάτω εντολή δηµιουργεί τον πίνακα µε όνοµα university_student που περιέχει τις στήλες university_student τύπου int και student_name που είναι τύπου string 32 χαρακτήρων και έχει σαν πρωτεύον κλειδί (primary key) το student_id: CREATE TABLE university_student (student_id int, student_name varchar (32), primary key (student_id)); Για την εισαγωγή δεδοµένων:

17 INSERT: η εντολή insert χρησιµοποιείται για την εισαγωγή δεδοµένων στους πίνακες. Η σύνταξή της είναι: INSERT INTO <όνοµα_πίνακα> VALUES (<δεδοµένα_προς_εισαγωγή>); Για παράδειγµα στην παρακάτω εντολή εισάγουµε έναν νέο φοιτητή µε όνοµα PAPADOPOULOU MARIΑ και αριθµό µητρώου INSERT INTO university_student VALUES (1111,'PAPADOPOULOU MARIA'); Για την αλλαγή δεδοµένων : UPDATE: η εντολή update χρησιµοποιείται για την αλλαγή στοιχείων που υπάρχουν ήδη µέσα σε έναν πίνακα µας. Η σύνταξή της είναι ως εξής: UPDATE <όνοµα_πίνακα> SET <η_ενέργεια_που_θα γίνει_στον_πίνακα> WHERE <προϋποθέσεις>; Για παράδειγµα η παρακάτω εντολή αλλάζει το όνοµα του φοιτητή µε student_id 1111 σε 'PAPADOPOULOU MARIANNA: UPDATE university_student SET student_name='papadopoulou MARIANNA' WHERE student_id=1111; Για την διαγραφή δεδοµένων: DELETE: η εντολή delete χρησιµοποιείται για την διαγραφή στοιχείων που υπάρχουν µέσα σε έναν πίνακα µας. Η σύνταξή της είναι ως εξής: DELETE FROM <όνοµα_πίνακα> WHERE <προϋποθέσεις>;

18 Για παράδειγµα η παρακάτω εντολή διαγράφει από τον πίνακα university_student τη γραµµή που έχει στο πεδίο student_id 1111: DELETE FROM university_student WHERE student_id=1111; Για την επιλογή δεδοµένων: SELECT: η εντολή select χρησιµοποιείται για την επιλογή µιας οµάδας/λίστας δεδοµένων από ένα πίνακα µε βάση κάποιο κριτήριο, όπως φαίνεται παρακάτω. Η σύνταξή της είναι ως εξής: SELECT <όνοµα_στήλης> FROM <όνοµα_πίνακα>where <προϋποθέσεις>; Για παράδειγµα η παρακάτω εντολή επιλέγει από τον πίνακα university_student τα περιεχόµενα της στήλης student_name, στα οποία αντιστοιχεί student_id ίσο µε 1111: SELECT student_name FROM university_student WHERE student_id=1111; 2.3 Ερωτήσεις, Ασκήσεις και ραστηριότητες Έστω ότι έχουµε τον παρακάτω πίνακα στον οποίο έχουµε τα στοιχεία µιας οµάδας. Ο πίνακας αυτός είναι ο παρακάτω: TEAM

19 Arithmos_fanelas Onoma_paikth Thesh_pou_paizei 1 KWSTAS CHALKIAS GK 5 TRAIANOS DELLAS DC 9 THEOFANIS GEKAS ST 15 DIMITRIS PAPADOPOULOS ST 1. Να δηµιουργήσετε τον πίνακα TEAM. Ως πρωτεύον κλειδί θα ορίσουµε τον αριθµό φανέλας του κάθε παίκτη. Yπόδειξη Λύση 2. Να εισάγετε τα δεδοµένα που φαίνονται στον πίνακα TEAM. Yπόδειξη Λύση 3. Λόγω τραυµατισµού ο έλλας θα πρέπει να αντικατασταθεί από τον Χρήστο Πατσατζόγλου. Οπότε αναθέστε την φανέλα µε το νούµερο 5 στον CHRISTO PATSATZOGLOU. Yπόδειξη Λύση 4. Ο προπονητής αποφασίζει να µην πάρει τελικά τον ηµήτρη Παπαδόπουλο στην αποστολή. ιαγράψετε τον DIMITRI PAPADOPOULO από την λίστα.

20 Yπόδειξη Λύση 5. Να εµφανίσετε τα ονόµατα όλων των παικτών της αποστολής. Yπόδειξη Λύση Για περισσότερα παραδείγµατα µπορείτε να ανατρέξετε στην παρακάτω σελίδα εκµάθησης SQL: Tutorial and demo

21 3 Java Database Connectivity 3.1 Εισαγωγή στη JDBC Από τα πρώτα χρόνια της δηµιουργίας των υπολογιστικών συστηµάτων, ο ρόλος της αποθήκευσης και της επεξεργασίας των δεδοµένων ήταν σηµαντικός. Αυτό συνετέλεσε στη δηµιουργία διαφόρων συστηµάτων που µπορούν να διαχειριστούν βάσεις δεδοµένων. Κάθε σύστηµα διαχείρισης βάσεων δεδοµένων όµως, έχει και τα δικά του χαρακτηριστικά και γι αυτό στην περίπτωση που ο χρήστης θέλει να επικοινωνήσει µε µία βάση διαφορετικού τύπου, είναι αναγκασµένος να ξαναγράψει την εφαρµογή του από την αρχή. Αυτό λοιπόν το πρόβληµα, όσον αφορά τα προγράµµατα σε γλώσσα Java, δίνει απάντηση η JDBC, ένα ΑPI (Αpplication Programming Interface) της πλατφόρµας προγραµµατισµού της Java. Η JDBC είναι µία από τις πιο χρήσιµες βιβλιοθήκες που παρέχονται από την Java. Στόχος της είναι να επιτρέπει στα προγράµµατα της γλώσσας Java να εκτελούν εντολές SQL και να λαµβάνουν τα αποτελέσµατα των εντολών αυτών από τη βάση δεδοµένων. Παρεµβάλλει και ενεργεί ως µεσάζων ανάµεσα σε εφαρµογές java και σε σχεσιακές (relational) βάσεις δεδοµένων (σχήµα 3.1). 3.2 Αρχιτεκτονική JDBC

22 Εικόνα 3.1:Eπικοινωνία JDBC µε βάση δεδοµένων. Πηγή: Προτού αναφέρουµε κάποια πράγµατα για την αρχιτεκτονική της JDBC ας γίνει σαφές το τι εννοούµε ακριβώς µε αυτόν τον όρο. Ο όρος αρχιτεκτονική συνήθως χρησιµοποιείται για να περιγράφει συστήµατα διαχείρισης βάσεων δεδοµένων, λειτουργικά συστήµατα και άλλους υπολογιστικούς µηχανισµούς λογισµικού και υλικού. Υπάρχουν διάφορες υλοποιήσεις αρχιτεκτονικών. Για τα συστήµατα όµως που διαχειρίζονται βάσεις δεδοµένων, συγκεκριµένα, χρησιµοποιούνται αρχιτεκτονικές client-server (πελάτη-εξυπηρετητή) Ένα σύστηµα client-server (πελάτη-εξυπηρετητή) είναι ένα σύστηµα στο οποίο συνδέονται µέσω δικτύου διάφοροι υπολογιστικοί πόροι ή αλλιώς διάφοροι κόµβοι, ώστε οι οι clients (front end) να µπορούν να ζητούν υπηρεσίες από έναν server (back end), ο οποίος προσφέρει πληροφορίες ή επιπρόσθετη υπολογιστική ισχύ. Οι servers γενικότερα λειτουργούν ως διακοµιστές ενός δικτύου συνδεδεµένων υπολογιστών, µε την έννοια ότι επεξεργάζονται τις αιτήσεις από τους πελάτες. Με τον όρο πελάτης νοείται οποιοσδήποτε υπολογιστής µπορεί να συνδεθεί σε έναν διακοµιστή και να χρησιµοποιεί τους πόρους που ελέγχει. Τα συστήµατα client-server αναφέρονται και µε τον όρο 2-tier συστήµατα καθώς αποτελούνται από δύο στρώµατα, το στρώµα του client και το στρώµα του server. Τα συστήµατα που χρησιµοποιούν παραπάνω από δύο στρώµατα αναφέρονται και ως πολυστρωµατικά (multi-tier ή αλλιώς n-tier συστήµατα). Συχνά χρησιµοποιούµενη αρχιτεκτονική είναι αυτή των τριών στρωµάτων (3-tiers). Oι όροι 2-tiers, 3-tiers, n-tiers

23 έχουν να κάνουν µε το πώς διαιρείται η client-server εφαρµογή σε λειτουργικές ενότητες, οι οποίες µετά µπορούν να ανατεθούν είτε στον client, είτε σε έναν ή περισσότερους servers. Στα συστήµατα multi-tier χρησιµοποιούνται ως ενδιάµεσο στρώµα Αpplication Servers ( ιακοµιστές Εφαρµογών) οι οποίοι αναλαµβάνουν την πολυδιάστατη επεξεργασία των δεδοµένων που προέρχονται από τις βάσεις δεδοµένων. Μια γενική εικόνα για την αρχιτεκτονική 2-tier και 3-tier δίνεται στο σχήµα 3.2 : Εικόνα 3.2: 2-tier και 3 tier αρχιτεκτονικές Το JDBC υποστηρίζει και αρχιτεκτονικές 2-tier και αρχιτεκτονικές 3-tier. Στην αρχιτεκτονική 2-tier όπως φαίνεται και από το σχήµα 3.3, η εφαρµογή java απευθύνεται άµεσα στη βάση δεδοµένων (χωρίς δηλ. να υπάρχει κάποιο ενδιάµεσο στρώµα αρχιτεκτονικής).

24 Εικόνα 3.3: Αρχιτεκτονική δύο στρωµάτων. Πηγή Τα ερωτήµατα του χρήστη λαµβάνονται από τη βάση δεδοµένων ή άλλη πηγή δεδοµένων και τα αποτελέσµατα στέλνονται πίσω στο χρήστη. Η πηγή δεδοµένων µπορεί να βρίσκεται σε κάποιο άλλο σύστηµα, µε το οποίο ο χρήστης µπορεί να επικοινωνεί µέσω του δικτύου. Έτσι χρησιµοποιείται client-server αρχιτεκτονική µε τον υπολογιστή του χρήστη να είναι ο πελάτης, και τον υπολογιστή, ο οποίος έχει τα δεδοµένα, το διακοµιστή. Το δίκτυο µπορεί να είναι ένα εταιρικό δίκτυο (intranet) το οποίο για παράδειγµα συνδέει εργαζόµενους σε µία εταιρεία ή το internet. Όσον αφορά την αρχιτεκτονική τριών στρωµάτων (3-tiers) η οποία φαίνεται στο σχήµα 3.4, όπως βλέπουµε, το JDBC λειτουργεί ως ενδιάµεσο λογισµικό (middleware) επιτρέποντας σε έναν πελάτη να θέσει ένα ερώτηµα σε µία βάση δεδοµένων.

25 Εικόνα 3.4 : Αρχιτεκτονική τριών στρωµάτων. Πηγή Τα ερωτήµατα στέλνονται λοιπόν στη JDBC, η οποία στη συνέχεια τα στέλνει στην πηγή δεδοµένων. Η πηγή δεδοµένων επεξεργάζεται τα ερωτήµατα και στέλνει τα αποτελέσµατα πίσω στη JDBC, η οποία στη συνέχεια τα στέλνει στο χρήστη.

26 3.3 Χρήση της JDBC σε αρχιτεκτονικές java Εφόσον η JDBC αποτελεί ένα API, ο χειρισµός των δεδοµένων γίνεται µέσω των µεθόδων των κλάσεων. Όπως γνωρίζουµε οι κλάσεις είναι το βασικό δοµικό στοιχείο αρχιτεκτονικής στη Java και εποµένως και η JDBC είναι µία βιβλιοθήκη κλάσεων. Η JDBC υλοποιεί τη αµφίδροµη επικοινωνία µετξύ εφαρµογής Java και βάση δεδοµένων και διασφαλίζει ότι αυτή γίνεται υπό τους όρους που υπαγορεύει κάθε µία τους. Πιο συγκεκριµένα, η επικοινωνία από τη βάση προς την εφαρµογή θα γίνεται σε όρους κατανοητούς από την αρχιτεκτονική της Java, όπως string, int, float, αντικείµενα βασικών βιβλιοθηκών όπως date, αναλόγα µε τις εντολές και δοµές που υποστηρίζει η DB. Αναλόγως γίνεται και η µετατροπή των δοµικών στοιχείων Java σε δοµές που αντιστοιχούν στη εκάστοτε βάση. Αυτή η δυνατότητα υλοποιείται µε τους οδηγούς (drivers). Για παράδειγµα εάν κάνουµε χρήση του bridge driver τότε οι Java δοµικές µορφές µετατρέπονται σε δοµές ODBC. 3.4 Ερωτήσεις-Ασκήσεις Τι ονοµάζουµε αρχιτεκτονική 2 στρωµάτων; Tι αρχιτεκτονική τριών στρωµάτων; Υπόδειξη Ποια είδη αρχιτεκτονικών υποστηρίζει η JDBC; Yπόδειξη 4. Συστατικά JDBC Γενικά, η JDBC περιέχει 4 συστατικά (components). Τα

27 Jdbc API JDBC Driver Manager JDBC Test Suite JDBC-ODBC Bridge Θα δούµε µε λεπτοµέρεια το JDBC API και τον JDBC DriverManager. Η JDBC Test Suite παρέχει έτοιµες δοκιµές για να ελεγχθεί η ορθή λειτουργία ενός driver (οδηγού) και δεν θα µας απασχολήσει ιδιαίτερα JDBC API To JDBC API είναι µέρος της πλατφόρµας προγραµµατισµού java η οποία περιέχει τα Java Standard Edition (Java SE ) και Java Enterprise Edition (Java EE). Οι εκδόσεις του JDBC είναι οι εξής: JDBC 1.0 API JDBC 1.2 API. JDBC 2.0 Optional Package API. JDBC 2.1 core API. JDBC 3.0 API. JDBC 4.0 API.

28 H τρέχουσα έκδοση (2008) είναι η JDBC 4.0 η οποία περιέχεται στο πακέτο Java SE 6. Το JDBC 4.0 περιέχει δύο πακέτα. Το JDBC 4.0 Core API, δηλαδή το πακέτο java.sql το οποίο διανέµεται ως µέρος του Java SE 6 και Το JDBC 4.0 Standard Extension API δηλαδή το πακέτο javax.sql το οποίο διανέµεται ως µέρος του Java SE 6. Το πακέτο javax.sql µπορεί να βρεθεί και στη σελίδα της sun JDBC Driver Manager Η κλάση DriverManager είναι από τα κυριότερα συστατικά του JDBC καθώς συνδέει τον κατάλληλο driver (οδηγό) JDBC µε την εφαρµογή µας, ώστε να επιτευχθεί η διασύνδεση µε τη βάση δεδοµένων. ηλαδή, ορίζει τα αντικείµενα τα οποία µπορούν να συνδέουν εφαρµογές Java µε driver JDBC. Μέσω µεθόδων της κλάσης DriverManager µπορούµε να πάρουµε πληροφορίες σχετικά µε τους drivers που είναι διαθέσιµοι και χρησιµοποιούνται στον υπολογιστή µας. Επιπλέον παρέχει στατικές µεθόδους για τη δηµιουργία αντικειµένων που εφαρµόζουν τη διασύνδεση Connection. Η φόρτωση του οδηγού γίνεται µε τη µέθοδο forname() της κλάσης Class. Για παράδειγµα αν ο οδηγός που χρησιµοποιείται, είναι η γέφυρα JDBC:ODBC η φόρτωση του οδηγού θα γίνει µε την παρακάτω εντολή: Class.forname( sun.jdbc.odbc.jdbcodbcdriver )

29 Ο φοιτητής καλό θα ήταν να έχει υπόψιν του ότι είναι σηµαντικό στη JDBC να γίνεται φόρτωση των κατάλληλων drivers. ιαφορετικά DBMS όπως MySql, Οracle, MS Server κτλ, απαιτoύν τη φόρτωση του κατάλληλου driver. Drivers που αντιστοιχούν σε συγκεκριµένα DBMS βρίσκονται αρκετά εύκολα στο Internet. Στο παράρτηµα αναφέρονται µερικά γνωστά Συστήµατα ιαχείρισης Βάσεων εδοµένων και οι αντίστοιχοι drivers που χρησιµοποιούν. Στη συνέχεια παρέχονται ορισµένες πληροφορίες για τους τύπους των drivers που είναι διαθέσιµοι. Βασική µέθοδος που χρησιµοποιείται από τον DriverManager είναι η getconnection. H µέθοδος αυτή δηµιουργεί ένα αντικείµενο Connection. Το αντικείµενο Connection αντιπροσωπεύει µία σύνδεση µε τη συγκεκριµένη βάση δεδοµένων. H µέθοδος getconnection µπορεί να συνταχθεί µεδύο τρόπους: H πιο απλή χρήση της µεθόδου γίνεται µε την εντολή: Connection databaseconnection=drivermanager.getconnection(sourceurl()) Tο URL είναι ένα αντικείµενο τύπου string το οποίο καθορίζει που βρίσκεται η βάση. Στον δεύτερο τρόπο σύνταξης η getconnection δέχεται τρία ορίσµατα: Connection con = DriverManager.getConnection(url, "MyUserName", "MyPassword"); το πρώτο όρισµα είναι το URL, το δεύτερο, το username του χρήστη και το τρίτο όρισµα είναι ο κωδικός του. Για παράδειγµα, αν ο οδηγός που χρησιµοποιείται είναι η γέφυρα jdbc:odbc το όνοµα του χρήστη Stewie και κωδικός griffin01, η εντολή θα µετασχηµατιστεί στην εξής :

30 Connection con = DriverManager.getConnection(url, "Stewie", "griffin01"); Υπενθυµίζεται ότι URL είναι η διεύθυνση που βρίσκεται η βάση Τι είναι JDBC driver Όπως αναφέραµε ένας JDBC driver έχει αναπτυχθεί για µία συγκεκριµένη βάση δεδοµένων, και χρησιµοποιείται για την επικοινωνία της εφαρµογής µε τη βάση δεδοµένων µέσω του JDBC. Συγκεκριµένα ένας driver µεταφράζει τις κλήσεις προς JDBC σε ειδικές εντολές της συγκεκριµένης βάσης δεδοµένων. Υπάρχουν τέσσερα είδη ή τύποι driver για την κάλυψη διαφορετικών τύπων βάσεων δεδοµένων. Η λεπτοµερής ανάπτυξη των χαρακτηριστικών αυτών των τύπων είναι έξω από τα όρια αυτού του υπερκειµένου. Τύπος 1: JDBC-ODBC bridge driver Τύπος 2 :native ΑPI driver Τύπος 3 :JDBC-Net driver Τύπος 4: Native-protocol/all-Java driver Τύπος 1: JDBC-ODBC bridge driver Αυτός ο τύπος είναι µια γέφυρα για την επικοινωνία του JDBC σύµφωνα µε την ODBC. ηλαδή µεταφράζει όλες τις JDBC κλήσεις σε κλήσεις ODBC (Open Database Connectivity) και τις στέλνει στον ODBC driver. Ο bridge driver επιτρέπει στο JDBC να επικοινωνεί µε οποιαδήποτε βάση δεδοµένων χρησιµοποιεί ODBC. Τέτοια γέφυρα χρησιµοποιεί για παράδειγµα η διαδεδοµένη βάση Μicrosoft Access. Στο σχήµα 4.1 φαίνεται ένα τυπικό παράδειγµα υλοποίησης της γέφυρας JDBC-ODBC

31 Εικόνα 4.1:Υλοποίηση τύπου 1 driver-γέφυρα JDBC- ODBC (πηγή Τύπος 2 :native ΑPI driver Είναι ένας driver γραµµένος σε µια γλώσσα προγραµµατισµού (native code) που είναι συγκεκριµένη για κάθε Σ Β. ηλαδή µεταφράζει τις κλήσεις του JDBC σε συγκεκριµένες κλήσεις (native κλήσεις) που είναι µοναδικές για κάθε βάση δεδοµένων όπως Microsoft SQL Server, Informix, Oracle ή Sybase. Αυτός ο τύπος driver επικοινωνεί απευθείας µε τον διακοµιστή (server) της βάσης δεδοµένων και διατίθεται από τον πάροχο της Βάσης εδοµένων(σχήµα 4.2).

32 Εικόνα 4.2:Yλοποίηση Τύπου 2,µικτός κώδικας (Java και Native ( πηγή Τύπος 3: JDBC-Net driver Σε αυτόν τον τύπο χρησιµοποιείται η προσέγγιση των τριών στρωµάτων (σχήµα 4.3). ηλαδή ο JDBC-Net driver χρησιµοποιεί ένα ενδιάµεσο συστατικό (middleware), το οποίο επικοινωνεί µε το συγκεκριµένο Σ Β, και ένα γενικό πρωτόκολλο δικτύου. Συγκεκριµένα, οι κλήσεις του JDBC µεταφέρονται µέσω του δικτύου στο ενδιάµεσο

33 συστατικό middleware. Το middleware στη συνέχεια µετατρέπει τις κλήσεις του JDBC σε ένα πρωτόκολλο δικτύου, ανεξάρτητο από τη βάση δεδοµένων, το οποίο στη συνέχεια µεταφράζεται σε συγκεκριµένες για κάθε Βάση εδοµένων κλήσεις. Αν το λογισµικό του middleware είναι γραµµένο σε Java τότε µπορεί να χρησιµοποιήσει οποιοδήποτε τύπο driver για να επικοινωνήσει µε το Σ Β. Εικόνα 4.3 : Υλοποίηση τύπου 3, χρήση ενδιάµεσου server για την πρόσβαση(πηγή

34 Type 4: Native-protocol/all-Java driver Ο τύπος 4(σχήµα 4.4) µετατρέπει τις κλήσεις του JDBC σε κλήσεις για το συγκεκριµένο πρωτόκολλο επικοινωνίας που χρησιµοποιεί κάθε σύστηµα διαχείρισης βάσεων δεδοµένων έτσι ώστε το µηχάνηµα του πελάτη να µπορεί να επικοινωνήσει άµεσα µε τον διακοµιστή δεδοµένων. Ο τύπος 4 είναι ένας driver γραµµένος εξ ολοκλήρου σε java Καθώς αυτός ο τύπος driver δεν χρειάζεται να µετατρέψει τις κλήσεις σε κλήσεις για ODBC η σε native κώδικα ή να περάσει την κλήση σε άλλο server η απόδοση είναι σαφώς καλύτερη από τους υπόλοιπους τύπους driver. Επίσης, δεν απαιτείται η εγκατάσταση κάποιου συγκεκριµένου λογισµικού στον πελάτη η στον διακοµιστή. Πλεονέκτηµα τους είναι ότι τέτοιοι drivers µπορούν να βρεθούν εύκολα στο Internet. Μειονέκτηµα τους ότι ο χρήστης είναι αναγκασµένος να βρει διαφορετικό driver για κάθε βάση δεδοµένων.

35 Εικόνα 4.4 : Υλοποίηση τύπου 4. (Πηγή

36 5 Επικοινωνία µε Βάση εδοµένων 5.1 Εισαγωγή Είδαµε κάποια πράγµατα για το πώς ενσωµατώνεται η JDBC στις διάφορες αρχιτεκτονικές, και στη συνέχεια θα δούµε πώς να χρησιµοποιούµε το JDBC στην πράξη. Αρχικά αυτό που χρειάζεστε είναι ένας editor ή IDE που θα γράφετε τον κώδικα σας, και ένα Σ Β. Για την υλοποίηση των συγκεκριµένων παραδειγµάτων έχει χρησιµοποιηθεί σαν πλατφόρµα του JDBC το ECLIPSE-JAVA-EUROPA-FALL- WIN32. Το ECLIPSE δεν χρειάζεται εγκατάσταση ή κάποια άλλη ενέργεια καθώς ανοίγει αµέσως. Ως Σ Β, εδώ χρησιµοποιείται η MySQL. Η MySQL χρειάζεται να εγκατασταθεί στο σκληρό δίσκο του υπολογιστή µας, χωρίς όµως να δεσµευόµαστε για το σε ποιο σηµείο του δίσκου θα την εγκαταστήσουµε. Στα επόµενα κεφάλαια θα µάθετε καταρχάς πώς να αρχικοποιείτε µία βάση δεδοµένων (κεφάλαιο 5.2). Η αρχικοποίηση της βάσης γίνεται µέσω της εφαρµογής αλλά και µέσω του JDBC. Για τη δεύτερη περίπτωση πρέπει να φορτώσετε τον κατάλληλο οδηγό και να καταφέρετε να επικοινωνήσετε µε την εφαρµογή σας. Όλη αυτή η διαδικασία παρουσιάζεται στο κεφάλαιο 5.3. Σε αυτό το κεφάλαιο θα δείτε πως για να συνδεθείτε µε τη βάση πρέπει να συνδεθείτε µε αυτή εξωτερικά (µε τη φόρτωση των κατάλληλων drivers που αναφέραµε προηγουµένως) και εσωτερικά στην εφαρµογή µέσω κώδικα. Στο κεφάλαιο 5.4 θα µάθετε πώς να προετοιµάσετε την αποστολή εντολών προς τη βάση που έχετε δηµιουργήσει. Τέλος, στο κεφάλαιο 5.5 θα µάθετε πώς αρχικοποιείται ένας πίνακας από την JDBC και στο κεφάλαιο 5.6 πως εκτελούνται εντολές προς της βάση.

37 5.2. Αρχικοποίηση µίας Βάσης εδοµένων Υπάρχουν δύο τρόποι να δηµιουργήσουµε µια βάση δεδοµένων η οποία θα χρησιµοποιηθεί στο JDBC. ηµιουργία βάσης απευθείας µέσω της κονσόλας της MySQL Μέσω του JDBC ηµιουργία βάσης µέσω κονσόλας Για να αρχικοποιήσουµε µια Βάση εδοµένων µέσα από την mysql ανοίγουµε την κονσόλα της ΜySQL, και γράφουµε την εντολή : CREATE DATABASE <όνοµα_βάσης>. Για να µπορέσουµε να χρησιµοποιήσουµε την Βάση αυτή γράφουµε στην κονσόλα της mysql: USE <όνοµα_βάσης> ηµιουργία βάσης µέσω JDBC Για τη δηµιουργία βάσης µέσω JDBC πρέπει πρώτα να γίνει η σύνδεση της JDBC µε τη MySQL µέσω του κατάλληλου driver. Αφού γίνει η σύνδεση, η εντολή για τη δηµιουργία βάσης CREATE DATABASE <όνοµα_βάσης> µπορεί να περαστεί στο πρόγραµµα, µε 2 τρόπους: είτε περνιέται σε ένα string ώστε να µπορούµε να το εκτελέσουµε µέσω της εντολής executeupdate

38 είτε περνιέται απευθείας στην εντολή executeupdate 5.3 Σύνδεση µε Β Για τη σύνδεση της JDBC µε τη βάση δεδοµένων πρέπει αυτή να συνδεθεί εξωτερικά, µε τη φόρτωση του κατάλληλου driver και στη συνέχεια να συνδεθεί εσωτερικά, µέσω του προγράµµατος, µε την κλήση κάποιων συναρτήσεων Εξωτερική σύνδεση Για να συνδεθούµε µε µία Βάση δεδοµένων (Β ), που είναι καταχωρηµένη µέσω ενός συγκεκριµένου Συστήµατος ιαχείρισης Βάσης εδοµένων (Σ Β ) θα πρέπει πρώτα απ όλα να εγκαταστήσουµε έναν connector (δηλαδή driver) κατάλληλο ώστε να κάνει την ένωση της Β µε τη JDBC. Στα συγκεκριµένα παραδείγµατα που παρουσιάζονται παρακάτω, ως Σ Β χρησιµοποιήθηκε η ΜySQL Εγκατάσταση driver Αφού κατεβάσουµε το ECLIPSE και εγκαταστήσουµε την MySQL, κατεβάζουµε τον κατάλληλο connector (driver) από το Internet. Για τα παραδείγµατα που υλοποιούνται εδώ έχει χρησιµοποιηθεί ο connector mysql-connector-java bin.jar. Τον driver αυτόν θα τον βρείτε από τη σελίδα τις MySql µε τους drivers Προσθήκη CLASSPATH

39 Για να ολοκληρωθεί η σύνδεση θα πρέπει να προσθέσουµε ένα CLASSPATH στο project που έχουµε ήδη δηµιουργήσει. Για να προσθέσουµε ένα CLASSPATH (δηλαδή µια.jar γέφυρα) στο ECLIPSE ακολουθούµε τα εξής βήµατα : Πατάµε το κουµπί του run(εικόνα 5.1) από την επιλογή Navigate: Εικόνα 5.1 : κουµπί run Και πατάµε το µαύρο βελάκι που είναι στα δεξιά του(όπως φαίνεται και στην εικόνα). Εµφανίζεται το µενού που φαίνεται και στην παρακάτω εικόνα(εικόνα 5.2): Εικόνα 5.2: Μενού Το µενού αυτό έχει τα ήδη υπάρχοντα project µας (δεν µας απασχολούν προς το παρόν) και άλλες τρεις επιλογές. Εµείς διαλέγουµε την δεύτερη, δηλαδή το Open Run dialog. Θα εµφανιστεί το παράθυρο που φαίνεται στην Εικόνα 5.3:

40 Εικόνα 5.3: Run dialog Από εδώ: 1. διαλέγουµε την επιλογή Classpath και 2. πατάµε µια φορά αριστερό κλικ πάνω στο Bootstrap Entries ώστε να γίνει µπλε. Μετά 3. πατάµε πάνω στην επιλογή Add External JARs. Μας βγάζει ένα παράθυρο για να βρούµε την γέφυρα που θέλουµε να κάνουµε Add. Κάνουµε open στο jar αρχείο µας και µετά πατάµε Apply. Κατόπιν πατάµε Run και έτσι έχουµε εισαγάγει το jar αρχείο που θα λειτουργήσει ως γέφυρα µε την βάση δεδοµένων Εσωτερική σύνδεση

41 Το πρόγραµµα µας, πρέπει να συνδέεται και εσωτερικά µε κώδικα που θα γράφουµε κάθε φορά. Ο κώδικας αυτός είναι συγκεκριµένες εντολές, οι οποίες σε οποιαδήποτε ενέργεια και να θέλουµε να κάνουµε πάνω στην Β, παραµένουν αµετάβλητες. Μέσω του κώδικα µπορούµε να συνδεθούµε µε τη βάση µε την κλήση της µεθόδου Connection όπως θα δούµε και παρακάτω και ύστερα να κάνουµε ερωτήµατα στη βάση. Η εκτέλεση οποιουδήποτε ερωτήµατος προυποθέτει την σύνδεση µε τη βάση µέσω κώδικα. Τα βήµατα για τη δηµιουργία της σύνδεσης είναι συγκεκριµένα σε κάθε κώδικα και αναλύονται το καθένα ξεχωριστά στις επόµενες παραγράφους. Γενικά, τα βήµατα που πρέπει να γίνουν για τη δηµιουργία της σύνδεσης (συγκεκριµένα µε τη ΜySQL), είναι τα εξής: Eισαγωγή κλάσεων Κλήση της µεθόδου forname από την Class ηµιουργία αντικειµένου Connection Παρακάτω αναλύεται το κάθε ένα από αυτά ξεχωριστά Eισαγωγή κλάσεων Οι κλάσεις αυτές βρίσκονται µέσα στο αρχείο java.sql. Η εισαγωγή των κλάσεων γίνεται µε την εντολή import. Mε την εντολή import java.sql* εισάγουµε στο πρόγραµµα µας όλες τις απαραίτητες κλάσεις Κλήση της µεθόδου forname από την Class

42 0πως είδαµε και στο κεφάλαιο 4.2, όπου αναφέραµε τον DriverManager, η φόρτωση του οδηγού γίνεται µε τη συνάρτηση forname() της κλάσης Class που προσφέρεται από την Java. Μέσα στην παρένθεση βάζουµε τα χαρακτηριστικά των προγραµµάτων που συνδέονται, καθώς και του connector. Με αυτή τη συνάρτηση το πρόγραµµα καθίσταται ικανό να βλέπει τον connector τον οποίο χρησιµοποιούµε. H συνάρτηση έχει την παρακάτω µορφή: Class.forName("com.mysql.jdbc.Driver") ηµιουργία αντικειµένου Connection H σύνδεση υλοποιείται µε τη δηµιουργία ενός αντικειµένου τύπου Connection (κλάση που βρίσκεται στο πακέτο sql της JAVA). Όπως έχει αναφερθεί για τη δηµιουργία σύνδεσης χρησιµοποιούµε την κλάση DriverManager και τη συνάρτησή της getconnection(), για να περάσουµε την τιµή της σύνδεσης στην τρέχουσα σύνδεσή µας. Μέσα στις παρενθέσεις της getconnection βάζουµε το URL της σύνδεσης µας, to root και τον κωδικό, εάν υπάρχει και χρειάζεται. Για διευκόλυνση περνάµε το URL σε ένα String που δηµιουργούµε. Στο String aυτό αναθέτουµε το URL, δηλαδή την συµβολοσειρά η οποία ουσιαστικά καθορίζει ποια προγράµµατα ενώνονται, και το port που χρησιµοποιείται από την βάση µας. Στα παραδείγµατα µας το String αυτό γίνεται ως εξής. String url ="jdbc:mysql://localhost:3307/jdbc"; Για την υλοποίηση των παραδειγµάτων µας η σύνδεση µας θα γίνει ως εξής: Connection con =DriverManager.getConnection(url,"root", "1234");

43 Εδώ συγκεκριµένα ως username χρησιµοποιείται το,"root" και ως password το "1234" ηλαδή η ολοκληρωµένη σύνδεση γίνεται γράφοντας τις παρακάτω εντολές: Class.forName("com.mysql.jdbc.Driver"); String url ="jdbc:mysql://localhost:3307/jdbc"; Connection con =DriverManager.getConnection(url,"root", "1234"); 5.4 Φόρτωση στοιχείων της βάσης Η φόρτωση των στοιχείων που θα έχει η βάση µας, γίνεται µε τη δηµιουργία του αντικειµένου Statement. Ta στοιχεία αυτά θα περιέχονται σε ένα αντικείµενο Result Set Το αντικείµενο της κλάσης Statement Ένα αντικείµενο Statement στέλνει προτάσεις SQL σε µία Βάση εδοµένων. Μέσα σε αυτό ουσιαστικά φορτώνουµε την Β µας και πάνω της θα κάνουµε τις ενέργειες που θέλουµε. Tο statement επίσης παρέχει και κάποιες δυνατότητες, όπως να αλλάζουµε τα δεδοµένα στη Β µας (δηλαδή να είναι updatable) ή να αλλάζουµε τη φορά µε την οποία θα διαβάζουµε τα δεδοµένα, τα οποία του δίνουµε εµείς.

44 Στην ουσία µπορούµε να φανταστούµε το statement σαν έναν απλό πίνακα µε x στήλες και y γραµµές, τον οποίο χρησιµοποιεί το σύστηµα µας για να φορτώνονται τα στοιχεία που περιέχει η βάση που έχουµε δηµιουργήσει ηµιουργία αντικειµένου Statement Παρακάτω αναφέρονται αναλυτικά τα βήµατα για τη δηµιουργία ενός αντικειµένου Statement 1. Xρησιµοποιούµε την κλάση Statement που προυπάρχει έτοιµη στην JAVA (έχει φορτωθεί από το interface java.sql.statement όταν κάνουµε import το java.sql*) 2. ίνουµε ένα όνοµα στο αντικείµενο τύπου statement που δηµιουργούµε, έστω το όνοµα Statement stmt. 3. Θέτουµε σε αυτό το αντικείµενο που δηµιουργήσαµε, τις ιδιότητές του, µε την βοήθεια της συνάρτησης createstatement() που υπάρχει µέσα στην κλάση connection και άρα και στην σύνδεση της Β µε το JDBC που δηµιουργήσαµε προηγουµένως. 4. Μέσα στις παρενθέσεις της createstatement βάζουµε, εάν θέλουµε, τις ιδιότητες που θα έχει το statement. Οι ιδιότητες αυτές παρουσιάζονται παρακάτω και για τον ορισµό τους, θα πρέπει να χρησιµοποιήσουµε την κλάση ResultSet. Σε ένα αντικείµενο της κλάσης ResultSet όπως θα δούµε σε επόµενο κεφάλαιο, επιστρέφονται τα αποτελέσµατα µιας ερώτησης από το JDBC Μέθοδοι που χρησιµοποιούνται από το Statement Υπάρχουν 3 µέθοδοι του αντικειµένου Statement

45 executequery() που χρησιµοποιείται όταν θέλουµε να εκτελέσουµε ερωτήµατα executeupdate() όταν θέλουµε να κάνουµε εισαγωγή τιµών, ανανέωση, διαγραφή κτλ execute() που χρησιµοποιείται για οποιονδήποτε τύπο πρότασης. Η µέθοδος execute(), είναι ιδιαίτερα χρήσιµη για τη δυναµική εκτέλεση οποιονδήποτε SQL strings Ιδιότητες για το Statement Μέσα στο Statement όπως είπαµε µπορούν να περαστούν κάποια χαρακτηριστικά, που έχουν να κάνουν µε Με την κίνηση του «δροµέα» Με τo αν το αποτέλεσµα θα είναι read-only ή updatable O δροµέας είναι ένας δείκτης που δείχνει κάθε φορά την τρέχουσα γραµµή του ResultSet Α. Για την κίνηση του δροµέα οι επιλογές είναι τρεις: 1. TYPE_FORWARD_ONLY Το αποτέλεσµα δεν είναι κυλιόµενο(scrollable). Ο δροµέας µας µπορεί να κινηθεί µόνο µπροστά, και κινείται από το σηµείο πριν την αρχή της πρώτης γραµµής του statement µέχρι το τέλος της τελευταίας. Οι γραµµές που περιλαµβάνονται στο statement και στο result_set εξαρτώνται από τον τρόπο που τα χειρίζεται η Β που χρησιµοποιούµε. ηλαδή περιέχει τις γραµµές που ικανοποιούν την ερώτηση είτε στο χρόνο που εκτελείται η ερώτηση, είτε καθώς ανακτώνται οι γραµµές. 2. TYPE_SCROLL_INSENSITIVE Το αποτέλεσµα είναι κυλιόµενο(scrollable). Ο δροµέας µας µπορεί να κινηθεί και προς τα εµπρός, µέσα στον πίνακα µας, και προς τα πίσω. Επίσης µπορούµε να τον τοποθετήσουµε σε συγκεκριµένο σηµείο πάνω στον πίνακα. εν µπορούµε όµως να χρησιµοποιήσουµε τα ανανεωµένα δεδοµένα µας σε περαιτέρω ενέργειες. Οποιαδήποτε ενέργεια γίνεται µε τα

46 δεδοµένα πριν ανανεωθούν. Για να χρησιµοποιήσουµε τα ανανεωµένα δεδοµένα µας πρέπει να εκτελέσουµε και πάλι την εντολή που τα ανακαλεί. 3. TYPE_SCROLL_SENSITIVE Το αποτέλεσµα είναι κυλιόµενο(scrollable). Ο δροµέας µας µπορεί να κινηθεί και προς τα εµπρός, µέσα στον πίνακα µας, και προς τα πίσω. Επίσης µπορούµε να τον τοποθετήσουµε σε συγκεκριµένο σηµείο πάνω στον πίνακα. Εδώ τα δεδοµένα µας χρησιµοποιούνται άµεσα, δηλαδή δεν χρειάζεται να ξαναεκτελέσουµε την εντολή για να χρησιµοποιήσουµε τα ανανεωµένα δεδοµένα. Β. Για το αν θα είναι το αποτέλεσµα µας read-only ή updatable: 1. CONCUR_READ_ONLY Το αποτέλεσµά µας θα είναι µόνο για διάβασµα και δεν θα επιτρέπεται καµία αλλαγή πάνω σε αυτό, δηλαδή θα χρησιµοποιείται ουσιαστικά µόνο για εύρεση δεδοµένων. 2. CONCUR_UPDATABLE Το αποτέλεσµα µας θα έχει την δυνατότητα να µεταβάλλεται, δηλαδή θα µπορούµε να προσθέτουµε ή να διαγράφουµε στοιχεία. Το πιο σηµαντικό σηµείο που θα πρέπει να προσέξουµε εδώ είναι ότι εάν ορίσουµε τον τύπο του ResultSet, το οποίο δηµιουργούµε, θα πρέπει οπωσδήποτε να ορίσουµε και τις δύο παραµέτρους του, δηλαδή: τον τρόπο µε τον οποίο θα κινείται ο δροµέας, και το αν θα είναι read-only ή updatable. Επίσης θα πρέπει να προσέξουµε ότι πρώτα βάζουµε τον τρόπο κίνησης του δροµέα και µετά το εάν είναι updatable. Αυτό γιατί και οι δύο µεταβλητές είναι τύπου INT και µπορεί να υπάρξει πρόβληµα εάν µπερδέψουµε τη σειρά τους. Αυτό, όντας λογικό λάθος δεν θα εµφανιστεί σαν πρόβληµα στην εκτέλεση του προγράµµατος. Επίσης, δεν θα πρέπει να ξεχνάµε ότι εάν δεν ορίσουµε ιδιότητεςπαραµέτρους το result set θα πάρει τις default τιµές. Oι default τιµές είναι ότι είναι read-only, και η κίνηση του δροµέα γίνεται µόνο forward.

47 Για τα παραδείγµατά µας λοιπόν, θα δηµιουργήσουµε ένα αντικείµενο st τύπου statement. Για το statement αυτό, θέλουµε να δηµιουργούµε ή να διαγράφουµε στοιχεία. Εάν δεν βάλουµε τίποτα µέσα στις παρενθέσεις, το ResultSet, και άρα και το statement παίρνει τις default τιµές. Για τα παραδείγµατά µας όµως, θα πρέπει να δηµιουργήσουµε το statement st το οποίο θα πρέπει είναι updatable, καθώς θέλουµε να δηµιουργούµε ή να διαγράφουµε στοιχεία από αυτό. Ο δροµέας θέλουµε να κινείται µόνο forward, µιας και δεν υπάρχει λόγος να κάνουµε άλλη κίνηση µέσα στο statement µας, τουλάχιστον προς το παρόν. Έτσι θα δώσουµε την εντολή: Statement st = con.createstatement(resultset.type_forward_only, ResultSet.CONCUR_UPDATABLE); 5.5 Αρχικοποίηση Πίνακα Αφού έχουν οριστεί τα χαρακτηριστικά που θα έχει το statement, θα πρέπει να δώσουµε τις κατάλληλες εντολές ώστε να εκτελεστεί το ερώτηµα που θέλουµε. Έστω ότι θέλουµε να αρχικοποιήσουµε έναν πίνακα. Πρέπει να σηµειώσουµε ότι, αν και η µεθοδολογία για την δηµιουργία ενός πίνακα µέσω JDBC είναι κοινή για κάθε Σύστηµα ιαχείρισης Βάσεων εδοµένων (Σ Β ), το περιεχόµενο των εντολών που πρέπει να εκτελεστούν ίσως διαφέρει. Εδώ οι εντολές που χρησιµοποιούνται είναι κατάλληλες κυρίως για τα Σ Β MySQL και MS SQL. Για να αρχικοποιήσουµε έναν πίνακα, και γενικά για να εκτελεστεί οποιοδήποτε ερώτηµα σε SQL, πρέπει προηγουµένως να δηµιουργήσουµε ένα αντικείµενο Statement. Έτσι, αρχικά δηµιουργούµε ένα αντικείµενο st τύπου Statement στο οποίο περνάµε την SQL εντολή που θέλουµε να εκτελέσουµε.

48 Στη συνέχεια περιγράφεται η αρχικοποίηση του πίνακα, δηλαδή η δηµιουργία του πίνακα και η εισαγωγή τιµών σε αυτόν. Επίσης περιγράφεται πώς γίνεται η διαγραφή του πίνακα και η διαγραφή τιµών από αυτόν ηµιουργία πίνακα Για τη δηµιουργία του πίνακα χρησιµοποιείται η εντολή create table <όνοµα_πίνακα>(ορισµός_στοιχείων_πίνακα); Για ευκολία και καλύτερη κατανόηση κάθε φορά που εκτελούµε οποιοδήποτε ερώτηµα, µπορούµε προηγουµένως να δηµιουργούµε ένα String µέσα στο οποίο θα φορτώνουµε την κάθε εντολή που θα εκτελούµε κάθε φορά. Έστω λοιπόν ότι θέλουµε να δηµιουργήσουµε έναν πίνακα µε όνοµα university_student. O πίνακας αυτός θα έχει τα εξής στοιχεία: τον Αριθµό Μήτρωου του κάθε φοιτητή, το όνοµα του, τα µαθήµατα που έχει περάσει και τον µέσο όρο του. Ως πρωτεύον κλειδί ορίζεται ο Αριθµός Μητρώου. Έτσι λοιπόν, δηµιουργούµε το String createsup και του αναθέτουµε την εντολή δηµιουργίας πίνακα. createsup="create table university_student (student_id int, student_name varchar (32), passed_lessons int,grade float, id_kathigith int, primary key (student_id))"; Επειδή η εντολή θα έχει ως αποτέλεσµα τη µεταβολή των δεδοµένων της Β µας, και επειδή το statement το οποίο χρησιµοποιούµε είναι Updatable, θα πρέπει χρησιµοποιήσουµε τη µέθοδο executeupdate(). Μέσα στις παρενθέσεις θα συµπεριλάβουµε το String που έχουµε ήδη δηµιουργήσει παραπάνω και η συνάρτηση αυτή θα καλείται µέσω του statement st που δηµιουργήσαµε προηγουµένως. Σύµφωνα µε τα παραπάνω, και για να προσαρµόσουµε την εντολή στο παράδειγµά µας θα γίνει: st.executeupdate(createsup);

49 Όπως είχε αναφερθεί και προηγουµένως,θα µπορούσαµε να µην είχαµε δηµιουργήσει το String και να περνούσαµε την εντολή της δηµιουργίας κατευθείαν στην εκτελέσιµη εντολή µας executeupdate() γράφοντας: st.executeupdate("create table university_student(student_id int,student_name varchar(32),passed_lessons int,grade float, id_kathigith int,primary key(student_id))"); Προσοχή πρέπει να δοθεί στα εισαγωγικά, τα οποία αν δεν τοποθετηθούν σωστά θα εµφανισθεί λάθος κατά τη µεταγλώττιση Εισαγωγή, διαγραφή τιµών Η εισαγωγή δεδοµένων γίνεται µε τον ίδιο ακριβώς τρόπο που γίνεται η δηµιουργία του πίνακα, χρησιµοποιώντας ακριβώς τις ίδιες εντολές, µε µόνη διαφορά το περιεχόµενο του String που δηµιουργούµε. Συγκεκριµένα για την εισαγωγή δεδοµένων χρησιµοποιείται η εντολή: INSERT INTO <όνοµα βάσης> VALUES (Value1,Value2,.ValueN) Έτσι αν για παράδειγµα θέλουµε στον παραπάνω πίνακα να προσθέσουµε έναν φοιτητή θα διαµορφώσουµε το String ως εξής: String createsup="insert INTO university_student VALUES (1111,'PAPADOPOULOU MARIA',36,7.8,1)"; Παράδειγµα Στον πίνακα που δηµιουργήσαµε θέλουµε να εισαγάγουµε τις εξής τιµές για δεδοµένα:

50 StudentId 1212 StudentName NIKITA MARIA PassedLessons 36 AverageGrade 7.1 Id_kathigith 1 Κώδικας import java.sql.*; class InsertIntoTable{ public static void main(string [] args){ try{ Class.forName("com.mysql.jdbc.Driver"); String url ="jdbc:mysql://localhost:3307/jdbc"; Connection =DriverManager.getConnection(url,"root", "1234"); System.out.println("Connection: " + con); con Statement st = con.createstatement(resultset.type_forward_only,resultset.concur_updatab LE); String createsup="insert INTO university_student VALUES(1212,' NIKITA MARIA ',36,7.1,2)"; st.executeupdate(createsup); System.out.println("Τα δεδοµένα σας έχουν εισαχθεί επιτυχώς "); catch(classnotfoundexception cnfe){ cnfe.printstacktrace(); catch(sqlexception se){ se.printstacktrace();

51 Σηµείωση: τα κοµµάτια του κώδικα που αλλάζουν σε κάθε παράδειγµα εµφανίζονται µε γκρι επισκίαση. 5.6 Εκτέλεση εντολών Για να εκτελέσουµε την εντολή θα πρέπει να χρησιµοποιήσουµε µία συνάρτηση της κλάσης ResultSet. Με τον ίδιο ακριβώς τρόπο µπορούµε να κάνουµε δηµιουργία µιας Β µέσω του JDBC. Στο επόµενο παράδειγµα εκτελούνται συγκεντρωµένα όσα αναλύσαµε για τη δηµιουργία του πίνακα. Οι µέθοδοι try και catch όπως είναι γνωστό από τη java χρησιµοποιούνται για τη διαχείριση εξαιρέσεων. ΠΑΡΑ ΕΙΓΜΑ import java.sql.*; class connect_mysqlwithjava{ public static void main(string [] args){ try{ Class.forName("com.mysql.jdbc.Driver"); String url ="jdbc:mysql://localhost:3307/jdbc"; Connection con =DriverManager.getConnection(url,"root", "1234"); System.out.println("Connection: " + con); Statement st = con.createstatement(resultset.type_forward_only,resultset.concur_updatab LE);

52 String createsup="create table university_student(student_id int,student_name varchar(32),passed_lessons int, grade float,primary key(student_id))"; st.executeupdate(createsup); System.out.println("TABLE CREATED"); catch(classnotfoundexception cnfe){ cnfe.printstacktrace(); catch(sqlexception se){ se.printstacktrace();

53 5.7 Ερωτήσεις-Ασκήσεις 1. ηµιουργήστε µία συνάρτηση LoadDriver που να επιτυγχάνει τη φόρτωση του οδηγού. Η συνάρτηση αυτή να εµφανίζει το µήνυµα «MYSQL DRIVER LOADED, CONGRATULATIONS!>> Η δηµουργία ήταν επιτυχής; H δηµιουργία ήταν ανεπιτυχής; Πατήστε εδώ 2. ηµιουργήστε µία βάση δεδοµένων videoclub. Mε τη δηµιουργία της βάσης να εµφανίζεται το µήνυµα Database Created! Έχετε δηµιουργήσει τη βάση videoclub;πατήστε εδώ Έχει συµβεί κάποιο λάθος;πατήστε εδώ 3.Με ποια εντολή γίνεται η διαγραφή µιας βάσης; (η εντολή να µην εκτελεστεί ή εάν εκτελεστεί να ξανακάνετε το ερώτηµα 2); Υπόδειξη 4.Στη βάση δεδοµένων που δηµιουργήσατε προσθέστε έναν πίνακα µε το όνοµα <Tainia>. Ο πίνακας <Tainia> θα αποτελείται από τα εξής 3 πεδία: ID INT Title VARCHAR (32) Year INT

54 Σε αυτόν τον πίνακα πρωτεύον κλειδί θα είναι το ID Έχετε καταφέρει να δηµιουργήσετε τον πίνακα Τainia; Πατήστε εδώ Έχει συµβεί κάποιο λάθος; 5. Στον πίνακα Tainia που έχετε δηµιουργήσει, να εισάγετε τα εξής δεδοµένα: ID TITLE YEAR 1450 The seventh seal Dead Man s Shoes Old boy Annie hall 1978 Η εισαγωγή τιµών έγινε επιτυχώς;πατήστε εδώ Έχει συµβεί κάποιο λάθος;πατήστε εδώ 6.α Mε τον ίδιο τρόπο δηµιουργήστε έναν πίνακα Director. Ο πίνακας Director να αποτελείται από τα εξής πεδία: ID INT Name Varchar (32) Ως πρωτεύον κλειδί ορίζεται το ΙD Λύση

55 6. β Στον πίνακα Directοr να γίνει εισαγωγή των εξής τιµών: ID NAME 1 Ingmar Bergman 2 Shane Meadows 3 Chan-wook Park 4 Woody Allen Λύση 7.α Mε την ίδια λογική δηµιουργήστε τον πίνακα DIRECTED. Ο πίνακας DIRECTED θα περιέχει ως στήλες τα εξής: ΙDTainias IDSkinotheti ΜοvieRate Λύση 7.β Στον πίνακα αυτό να γίνεται ΙΝSERT των παρακάτω τιµών IDTAINIAS IDSKINOTHETI ΜΟVIERATE

56 ηµιουργήσατε και εισάγαγατε τιµές στον Directed; Εάν τελειώσατε µε τις ασκήσεις αυτού του κεφαλαίου πατήστε εδώ. Λύση

57 6 Ανάκτηση και εισαγωγή δεδοµένων 6.1 Ανάκτηση και εµφάνιση εδοµένων Στο κεφάλαιο αυτό θα δούµε τον τρόπο µε τον οποίο µπορούµε να κάνουµε ανάκτηση δεδοµένων αλλά και την εµφάνιση τους στην οθόνη µας. Η τεχνική της ανάκτησης είναι σχετικά απλή και η λογική που χρησιµοποιείται είναι σχεδόν ίδια µε την λογική που χρησιµοποιούµε για την δηµιουργία ενός πίνακα και την εισαγωγή δεδοµένων. Η µόνη διαφορά είναι η SQL εντολή την οποία αποστέλουµε στην Β µας για να εκτελεστεί. Η τεχνική της εµφάνισης διαφέρει από αυτήν της ανάκτησης αλλά επίσης δεν είναι ιδιαίτερα δύσκολη. Οι δύο τεχνικές αναλύονται στη συνέχεια Ανάκτηση εδοµένων Η ανάκτηση χρησιµοποιεί ακριβώς την ίδια προσέγγιση µε τη δηµιουργία πίνακα. Έτσι για την ανάκτηση δεδοµένων πρώτα απ όλα θα πρέπει να δηµιουργήσουµε µια σύνδεση (Connection con) του JDBC µε την Β µας. Μετά θα πρέπει να δηµιουργήσουµε ένα statement στο οποίο θα αναθέτουµε την SQL εντολή. Η εντολή αυτή θα είναι η εντολή επιλογής SELECT η οποία θα σαρώνει την Β και θα τοποθετεί τις γραµµές του πίνακα, που ανταποκρίνονται στις προϋποθέσεις που θέσαµε, µέσα σε ένα αντικείµενο ResultSet. Ένα παράδειγµα φαίνεται παρακάτω. Στο παράδειγµα αυτό το µόνο που κάνουµε είναι να δηµιουργούµε ένα ResultSet µε όλα τα δεδοµένα του πίνακα student_university και στο τέλος να εµφανίζουµε το µήνυµα: YOUR DATA HAS BEEN RETRIEVED CORRECTLY

58 import java.sql.*; class Retrieve_data_withJDBC{ public static void main(string [] args){ try{ Class.forName("com.mysql.jdbc.Driver"); String url ="jdbc:mysql://localhost:3307/jdbc"; Connection con =DriverManager.getConnection(url,"root", "1234"); System.out.println("Connection: " + con); Statement st = con.createstatement(); ResultSet rs = st.executequery("select * from university_student"); System.out.println(""); System.out.println("YOUR DATA HAS BEEN RETRIEVED CORRECTLY"); catch(classnotfoundexception cnfe){ cnfe.printstacktrace(); catch(sqlexception se){ se.printstacktrace(); Στην ανάκτηση των δεδοµένων, και εφόσον δεν σκοπεύουµε να κάνουµε κάποια αλλαγή στα δεδοµένα της Β, δεν χρειάζεται το statement να είναι CONCUR_UPDATABLE αλλά µόνο CONCUR_READ_ONLY. Ο τρόπος κύλισης του δροµέα, δηλαδή εάν θα είναι TYPE_FORWARD_ONLY ή TYPE_SCROLL_SENSITIVE, δεν µας απασχολεί ιδιαίτερα αφού θα έχουµε κίνηση µόνο προς τα µπροστά.

59 6.1.2 Εµφάνιση εδοµένων Η εµφάνιση δεδοµένων στην οθόνη µας γίνεται µε την βοήθεια της γνωστής µεθόδου System.out.print της Java System.out.print(<onoma_Resultset>.getXXX(<column_index>)). Εδώ πρέπει να σηµειώσουµε ότι στην getxxx() µπορούµε να δώσουµε σαν παράµετρο ή το όνοµα της στήλης, ή τον δείκτη (index) της στήλης. Έτσι καταφέρνουµε να εµφανίσουµε ένα δεδοµένο από τον πίνακα. Εάν θέλουµε να τυπώσουµε πολλά δεδοµένα θα επαναλάβουµε την εντολή µε µόνη διαφορά ότι πρέπει να διευκρινίζουµε το είδος του στοιχείου που εµφανίζεται και το όνοµα της στήλης. Εδώ θα πρέπει να τονίσουµε ότι εκτελούνται οι εντολές εµφάνισης µόνο για την γραµµή στην οποία βρίσκεται ο δροµέας µας µέσα στο ResultSet. Εάν θέλουµε να εµφανίσουµε τα στοιχεία ενός ResultSet µε περισσότερες από µία γραµµές θα πρέπει να χρησιµοποιήσουµε έναν βρόχο καθώς και την συνάρτηση next() του ResultSet µας, µε την οποία αλλάζουµε γραµµή µέσα στο ResultSEt. Ένα παράδειγµα εµφάνισης των δεδοµένων µας φαίνεται παρακάτω όπου εµφανίζουµε τα δεδοµένα που έχουµε εισαγάγει στο ResultSet του προηγούµενου παραδείγµατος. ΠΑΡΑ ΕΙΓΜΑ import java.sql.*; class Print_from_DB_withJDBC{ public static void main(string [] args){ try{ Class.forName("com.mysql.jdbc.Driver"); String url ="jdbc:mysql://localhost:3307/jdbc"; Connection =DriverManager.getConnection(url,"root", "1234"); System.out.println("Connection: " + con); con

60 Statement st = con.createstatement(); ResultSet rs = st.executequery("select * from university_student"); while (rs.next()) { System.out.print(rs.getInt(1)); System.out.print(" " + rs.getstring(2)); System.out.print(" " + rs.getint(3)); System.out.print(" " + rs.getfloat(4)); System.out.println(" "+ rs.getint(5)); catch(classnotfoundexception cnfe){ cnfe.printstacktrace(); catch(sqlexception se){ se.printstacktrace(); Σηµείωση: όπως παρατηρούµε, χρησιµοποιούµε τη µέθοδο next() όχι µόνο για να αλλάξουµε γραµµή στο ResultSet, αλλά και για να ελέγξουµε εάν υπάρχει επόµενη γραµµή στο ResultSet προς τύπωση. Εάν δεν υπάρχει, ο βρόχος κλείνει και το πρόγραµµα µας τελειώνει. Εάν υπάρχει επόµενη σειρά, το πρόγραµµα µπαίνει µέσα στον βρόχο και εκτελεί τις εντολές εµφάνισης. 6.2 Ενηµέρωση Πινάκων Εισαγωγή Σε αυτήν την παράγραφο θα δούµε το πώς µπορούµε να ενηµερώσουµε (update) ένα resultset. Αρχικά, θα πρέπει να πούµε ότι υπάρχουν δύο τρόποι να κάνουµε ένα update στη Β µας. Ο ένας είναι χρησιµοποιώντας τις µεθόδους που υπάρχουν στη JAVA και

61 όχι αυτές που χρησιµοποιούνται από την SQL. Ο άλλος είναι χρησιµοποιώντας τις µεθόδους της SQL Ενηµέρωση Μέσω Των Μεθόδων της SQL Εδώ θα αναλύσουµε την µέθοδο ενηµέρωσης που χρησιµοποιεί εντολές SQL. Κατ αρχάς ως ενηµέρωση ορίζουµε την τροποποίηση της τιµής σε µια στήλη του πίνακα σε συγκεκριµένη γραµµή. Η µέθοδος για την υλοποίηση µίας ενηµέρωσης είναι παρόµοια µε αυτήν της εισαγωγής δεδοµένων. Πρώτα δηµιουργούµε µία σύνδεση(connection con) της JAVA µε την Β µας. Μετά δηµιουργούµε ένα statement στο οποίο αναθέτουµε την SQL εντολή που είναι προς εκτέλεση. Για την υλοποίηση της εντολής χρησιµοποιούµε την εντολή executeupdate(). Το statement θα πρέπει να είναι CONCUR_UPDATABLE, αφού κάνουµε κάποιες αλλαγές πάνω στα δεδοµένα. Ο τρόπος κύλισης του δροµέα είναι προτιµότερο να είναι TYPE_SCROLL_SENSITIVE για να έχουµε µεγαλύτερη δυνατότητα κίνησης µέσα στο ResultSet. Ένα παράδειγµα ενηµέρωσης φαίνεται παρακάτω. Στο παράδειγµα αυτό αλλάζουµε το όνοµα της φοιτήτριας µε ID 1212, που είναι η Νικήτα Μαρία, σε Νικήτα Μαριάννα. Παράδειγµα import java.sql.*; class Update_DB_withJDBC{ public static void main(string [] args){ try{ Class.forName("com.mysql.jdbc.Driver");

62 String url ="jdbc:mysql://localhost:3307/jdbc"; Connection con = DriverManager.getConnection(url,"root", "1234"); System.out.println("Connection: " + con); Statement st = con.createstatement(resultset.type_scroll_sensitive,resultset.concur_upd ATABLE); st.executeupdate("update university_student SET student_name='nikita MARIANNA' WHERE student_id=1212"); System.out.println(""); System.out.println("YOUR DATA HAS BEEN UPDATED"); System.out.println(""); catch(classnotfoundexception cnfe){ cnfe.printstacktrace(); catch(sqlexception se){ se.printstacktrace(); Ενηµέρωση Μέσω Των Μεθόδων της JAVA Υπάρχει και δεύτερος τρόπος για να κάνουµε µία ενηµέρωση µέσα σε µια Β. Ο τρόπος αυτός είναι αρκετά πιο πολύπλοκος καθώς χρησιµοποιεί εντολές της JDBC για την επίτευξη της ενηµέρωσης των δεδοµένων και δεν συνιστάται. Για περαιτέρω ανάλυση και εµβάθυνση µπορείτε να δείτε το site της SUN: Xρήση Έτοιµων Εντολών Όπως έχει ήδη αναφερθεί το αντικείµενο Statement χρησιµοποιείται για την εκτέλεση των εντολών µέσω της JDBC. Συγκεκριµένα ο ρόλος του αντικειµένου statement είναι να αποστέλλει την εντολή SQL στη βάση δεδοµένων. Η συγκεκριµένη εντολή

63 µεταγλωττίζεται και στη συνέχεια εκτελείται. ηλαδή, πρώτα αναλύεται η σύνταξή της, και στη συνέχεια ο µηχανισµός που χρησιµοποιείται για την εκτέλεσή της βρίσκει τί επεξεργασία απαιτείται, και τέλος πιθανόν βελτιστοποιείται µε σκοπό την ελαχιστοποίηση του κόστους εκτέλεσης. Τελικά επιστρέφονται τα αποτελέσµατα της. Αν και η διαδικασία φαίνεται πολύ απλή, στην πραγµατικότητα θα µπορούσαµε να πούµε ότι είναι αντιλειτουργική και αυτό γιατί, στην περίπτωση που θελήσουµε να εκτελέσουµε ένα αντικείµενο Statement πολλές φορές, τότε το ερώτηµα σε SQL που θέλουµε να εκτελέσουµε θα µεταγλωττίζεται και αυτό πολλές φορές. ηλαδή θα πρέπει να προσαρµόζουµε την εντολή κάθε φορά πάνω στα δεδοµένα µας, αλλάζοντας κάθε φορά τις εντολές (κινδυνεύοντας όµως πάντα, ένα µικρό λάθος να µας ταλαιπωρήσει για παρά πολλή ώρα). Για τον λόγο αυτό λοιπόν η JAVA και η JDBC µας δίνουν την δυνατότητα να δηµιουργούµε εντολές τις οποίες θα έχουµε έτοιµες και θα χρησιµοποιούµε πάνω σε οποιαδήποτε δεδοµένα, µε µικρές ή ακόµα και καθόλου αλλαγές. Έτσι, η JDBC προσφέρει δύο ακόµη κλάσεις οι οποίες κληρονοµούν από την κλάση Statement και τα χαρακτηριστικά τους τις κάνουν να είναι πιο αποδοτικές Η κλάση PreparedStatement Η κλάση CallableStatement Στη συνέχεια θα αναλύσουµε την κλάση PreparedStatement. Mε την κλάση CallableStatement θα ασχοληθούµε στο επόµενο κεφάλαιο To αντικείµενο PreparedStatement

64 To αντικείµενο PreparedStatement δίνει τη δυνατότητα να τοποθετήσουµε αρχικά στα ορίσµατα των µεθόδων του ερωτηµατικά ή αλλιώς placeholders και ύστερα να τα αντικαταστήσoυµε µε τα πραγµατικά ορίσµατα.( Το? που τοποθετείται υποδηλώνει και αυτό ένα όρισµα). ηλαδή το χαρακτηριστικό εδώ είναι ότι όταν δηµιουργούµε το αντικείµενο PreparedStatement η πρόταση SQL µεταγλωττίζεται µόνο µία φορά. εν χρειάζεται συνεπώς να εκτελείται η ίδια πρόταση κάθε φορά ηµιουργία αντικειµένου της PreparedStatement Όπως είδαµε και µε το αντικείµενο Statement, ένα αντικείµενο PreparedStatement δηµιουργείται καλώντας το αντικείµενο της Connection. (Υπενθυµίζεται ότι πρώτα γίνεται η δήλωση του driver και στη συνέχεια δηµιουργείται η σύνδεση µε τη βάση) Μέθοδοι της PreparedStatement Για δηµιουργία αντικειµένου Αντί για τη µέθοδο createstatement () του αντικειµένου Connection, γίνεται κλήση της µεθόδου preparestatement για τη δηµιουργία αντικειµένου PreparedStatement. Μια σηµαντική διαφορά µεταξύ των preparedstatement και των απλών statement, είναι ότι στα preparestatement δεν δηλώνουµε χαρακτηριστικά του ResulSet, δηλαδή εάν θα είναι updatable, forward_only κτλ. Απλά δηµιουργούµε ένα preparedstatement, το ονοµάζουµε και χρησιµοποιούµε την µέθοδο preparedstatement που βρίσκεται µέσα στη σύνδεση µας (Connection con). Για την κλήση της µεθόδου χρησιµοποιούµε µία µόνο παράµετρο τύπου string.

65 Για εκτέλεση ερωτηµάτων Όπως και µε τα αντικείµενα της Statement, οι µέθοδοι που χρησιµοποιούνται για την υλοποίηση των αντικειµένων της PreparedStatement είναι η executequery (για εκτέλεση αναζητήσεων) και η executeupdate (για εκτέλεση οποιασδήποτε µεταβολής πάνω στη Β µας). Η διαφορά όµως εδώ είναι ότι αφού καθορίσουµε όλα τα ορίσµατά µας, τότε γράφουµε την εντολή executeupdate() ή executequery() και κατόπιν εκτελείται η εντολή που προετοιµάσαµε. Ένα παράδειγµα δηµιουργίας ενός αντικειµένου PreparedStatement φαίνεται παρακάτω. ΠΑΡΑ ΕΙΓΜΑ Στο παράδειγµα αυτό δηµιουργούµε µια έτοιµη εντολή η οποία επιλέγει, από τον πίνακα university_student, το όνοµα του φοιτητή µε ένα id το οποίο όµως δεν έχουµε ορίσει εκ των προτέρων. Class.forName("com.mysql.jdbc.Driver"); String url ="jdbc:mysql://localhost:3307/jdbc"; Connection con=drivermanager. getconnection(url,"root", "1234"); System.out.println("Connection: " + con); PreparedStatement updateνames = con.preparestatement("select student_name FROM university_student WHERE student_id=?");

66 6.3.4 Τρόποι εκτέλεσης Ο τρόπος εκτέλεσης ενός αντικειµένου PreparedStatement είναι εξίσου απλός µε αυτόν ενός απλού statement. Ήδη είδαµε τη λογική µε την οποία δηµιουργείται ένα έτοιµο αντικείµενο, δηλαδή το ότι δεν καθορίζουµε την τιµή των ορισµάτων, βάζοντας ερωτηµατικά στη θέση των τιµών στα ορίσµατα. Τώρα θα να δούµε τον τρόπο µε τον οποίο γίνεται η ανάθεση τιµών, µε άλλα λόγια θα αναλύσουµε πώς τα ερωτηµατικά αντικαθίστανται µε τις πραγµατικές τιµές και ποιες µέθοδοι µας βοηθούν για αυτό Ανάθεση τιµών Η ανάθεση τιµών γίνεται µε τις µεθόδους setxxx () της κλάσης PreparedStatement. Οι µέθοδοι setxxx(), δέχονται δύο ορίσµατα όπως φαίνεται παρακάτω. Υποθέτωντας ότι έχουµε δηµιουργήσει το PreparedStatement Pstmt: Pstmt.setXXX(index,value) όπου index ο δείκτης της κάθε µεταβλητής. Για παράδειγµα, o δείκτης της πρώτης µεταβλητής είναι 1, ο δείκτης της δεύτερης µεταβλητής 2 και ούτω καθεξής value η τιµή που θέλουµε να αντικαταστήσουµε µε το ερωτηµατικό µέσα στην έτοιµη εντολή µας Εδώ θα πρέπει να σταθούµε λιγο για να δούµε τη λογική της setxxx():

67 Για κάθε τύπο δεδοµένων υπάρχει και µία µέθοδος setxxx(). Aυτές οι µέθοδοι συνοψίζονται στο παράρτηµα. Πιο συχνά χρησιµοποιούµενες µέθοδοι είναι οι setint, setfloat, setdouble, setstring. Αναλόγως µε τον τύπο της µεταβλητής που θέλουµε να αντικαταστήσουµε πρέπει να χρησιµοποιούµε και την ανάλογη setxxx µέθοδο. Σε αντίθεση µε τις παραπάνω µεθόδους setxxx() υπάρχει και η µέθοδος setobject που µπορεί να χρησιµοποιηθεί µε οποιονδήποτε τύπο, αλλά προτιµώνται γενικά οι εντολές setxxx(). Όπως ήδη είπαµε η setxxx() χρησιµοποιείται για την ανάθεση τιµών. Για την ανάκτηση τιµών από την βάση µας, χρησιµοποιούµε την εντολή getxxx() η οποία λειτουργεί ακριβώς όπως η setxxx(). Παράδειγµα για διαφορά υλοποίησης Prepared Statement και Statement Στο παρακάτω κοµµάτι κώδικα µπορούµε να δούµε τη διαφορά που έχει στην υλοποίησή του, ένα statement και ένα preparedstatement, η υλοποίηση των οποίων θα έχει το ίδιο ακριβώς αποτέλεσµα, δηλαδή την εισαγωγή τριών φοιτητών, που υποθέτουµε ότι ήρθαν µε µετεγγραφή, στον πίνακα university_student. Θα εισάγουµε τα εξής στοιχεία: Νέοι Φοιτητές ID Student s name Passed Lessons Grade Prof s Id 1337 TERZIDIS XRISTOS 25 6, PAPADHMHTRIOU PAVLOS 1411 STAVROPOULOU IOANNA 21 7,4 3

68 Υλοποίηση µε statement: Statement st = con.createstatement(resultset.type_forward_only,resultset.concur_updatab LE); String createstu="insert INTO University_Student VALUES(1337,'TERZIDIS XRHSTOS',25,6.8,1)"; st.executeupdate(createstu); String createstu1="insert INTO University_Student VALUES(1349,'PAPADHMHTRIOU PAVLOS',18,7,1)"; st.executeupdate(createstu1); String createstu2="insert INTO University_Student VALUES(1411,'STAVROPOULOU IOANNA ',21,7.4,3)"; st.executeupdate(createstu2); System.out.println(""); System.out.println("YOUR DATA HAS BEEN INSERTED"); Υλοποίηση µε PreparedStatement: PreparedStatement insertstud = con.preparestatement("insert into university_student values(?,?,?,?,?)"); int [] new_student_ids={1337,1349,1411 ; String [] new_student_names={"terzidis XRISTOS", "PAPADHMHTRIOU PAVLOS", "STAVROPOULOU IOANNA"; int [] new_passed_lessons={25,18,21 ; float [] new_grade={6.8f,7.0f,7.4f; int [] new_id_kathigith={1,1,3;

69 int len= new_student_ids.length; for(int i=0;i<len;i++) { insertstud.setint(1,new_student_ids[i]); insertstud.setstring(2, new_student_names[i]); insertstud.setint(3,new_passed_lessons[i]); insertstud.setfloat(4,new_grade[i]); insertstud.setint(5,new_id_kathigith[i]); insertstud.executeupdate(); System.out.println(""); System.out.println("YOUR DATA HAS BEEN INSERTED"); Εξετάζοντας τα δύο αυτά παραδείγµατα πιθανόν να αναρωτηθείτε γιατί να διαλέξουµε αντικείµενα PreparedStatement µε παραµέτρους, αντί ενός απλού statement το όποιο απαιτεί και λιγότερα βήµατα για να εκτελεστεί. Η απάντηση είναι ότι στην περίπτωση που θελήσουµε να προσπελάσουµε τη στήλη student_name λίγες φορές τότε θα προτιµήσουµε την πρώτη µέθοδο που δεν απαιτεί ούτε παραµέτρους στα ορίσµατα. Όµως, στην περίπτωση που θέλουµε να ανανεώνουµε τον πίνακα πολλές φορές τότε είναι προφανές ότι θα πρέπει να προτιµήσουµε την δεύτερη λύση, µε τα PreparedStatement. Αυτό ισχύει ιδιαίτερα για τις περιπτώσεις που χρησιµοποιούµε for ή while loop. ΠΑΡΑ ΕΙΓΜΑ

70 Για να επανέλθουµε πάλι στο παράδειγµα µε τους φοιτητές έστω ότι εγγράφονται στη σχολή τρεις ακόµη φοιτητές και θέλουµε να γίνει εισαγωγή τους στη βάση: student_id student_name passed_lessons grade id_kathigith 1511 POTITI VASILIKI 24 7, STEFANOU GEORGIOS 21 7, PROKOPIOU STEFANOS 25 6,8 3 Λύση import java.sql.*; class Use_PreparedStatement_inJDBC{ public static void main(string [] args){ try{ Class.forName("com.mysql.jdbc.Driver"); String url ="jdbc:mysql://localhost:3307/jdbc"; Connection con =DriverManager.getConnection(url,"root", "1234"); System.out.println("Connection: " + con); PreparedStatement insertstud = con.preparestatement("insert into university_student values(?,?,?,?,?)"); int [] new_student_ids={1511,1512,1513 ;

71 String [] new_student_names={"potiti VASILIKI ", "STEFANOU GEORGIOS ", "PROKOPIOU STAEFANOS"; int [] new_passed_lessons={24,21,25 ; float [] new_grade={7.4f,7.2f,6.8f; int [] new_id_kathigith={2,1,3; int len= new_student_ids.length; for(int i=0;i<len;i++) { insertstud.setint(1,new_student_ids[i]); insertstud.setstring(2, new_student_names[i]); insertstud.setint(3,new_passed_lessons[i]); insertstud.setfloat(4,new_grade[i]); insertstud.setint(5,new_id_kathigith[i]); insertstud.executeupdate(); System.out.println(""); System.out.println("YOUR DATA HAS BEEN INSERTED"); catch(classnotfoundexception cnfe){ cnfe.printstacktrace(); catch(sqlexception se){ se.printstacktrace(); 6.4 Χρήση Joins Εισαγωγή

72 Συχνά πρέπει να χρησιµοποιήσουµε δύο ή και περισσότερους πίνακες για να πάρουµε τα στοιχεία που θέλουµε. Για παράδειγµα έστω ότι κάποιος θέλει να δει σε ποιόν φοιτητή κάνει µάθηµα κάποιος καθηγητής. Για να πάρουµε απάντηση θα πρέπει να ψάξουµε στον πίνακα university_student, όπου έχουµε το id του κάθε φοιτητή συνδεδεµένο µε αυτό του καθηγητή. Εάν όµως θέλουµε να τυπώσουµε το όνοµα του καθηγητή θα είναι λίγο πιο πολύπλοκο. Για να επιτύχουµε και την εµφάνιση του ονόµατος του καθηγητή θα πρέπει να χρησιµοποιήσουµε τα joins. Σηµείωση: Εδώ θα πρέπει να τονίσουµε ότι η λογική της βάσης µας είναι ότι ένας φοιτητής µπορεί να διδάσκεται από µόνο έναν καθηγητή. Ένα join είναι µια λειτουργία που προσφέρεται από την Β, και µπορεί να συνδυάζει δύο ή περισσότερους πίνακες µε την βοήθεια των τιµών που µοιράζονται από κοινού. Στο παράδειγµά µας έχουµε τον πίνακα profs ο οποίος είναι αυτός που µας βοηθάει στην εξεύρεση του ονόµατος των καθηγητών. Πριν προχωρήσουµε παρακάτω θα πρέπει να δηµιουργήσουµε τον πίνακα profs και να του θέσουµε τιµές. Στον πίνακα profs θα έχουµε το όνοµα του καθηγητή και το id του, ενώ σαν πρωτεύον κλειδί θα ορίσουµε το id του καθηγητή(id_prof). Οι τιµές του πίνακα φαίνονται παρακάτω: PROFS Id_profs Prof_name 1 XRISTIDHS PETROS 2 SAVVIDHS HLIAS 3 PAPAPETROU GIANNHS

73 Ο παρακάτω κώδικας δηµιουργεί τον πίνακα profs: st.executeupdate("create table profs(id_prof int, prof_name varchar(32),primary key(id_prof))"); System.out.println(""); Ο παρακάτω κώδικας εισάγει τα δεδοµένα µέσα στον πίνακα profs και τυπώνει µήνυµα επιβεβαίωσης. st.executeupdate("insert into profs values(1,'xristidhs PETROS')"); st.executeupdate("insert into profs values(2,'savvidhs HLIAS')"); st.executeupdate("insert into profs values(3,'papapetrou GIANNHS')"); System.out.println(""); System.out.println("THE DATA HAS BEEN INSERTED"); Τώρα που έχουµε και τους δύο πίνακες µπορούµε να απαντήσουµε στο ερώτηµα µας για το ποιος καθηγητής κάνει µάθηµα σε έναν φοιτητή. Το όνοµα του καθηγητή είναι στον πίνακα profs και το id του φοιτητή στον πίνακα university_student. εδοµένου ότι και οι δύο πίνακες έχουν τη στήλη µε το id του καθηγητή, αυτή η στήλη µπορεί να χρησιµοποιηθεί για την ένωση των δύο πινάκων. Ακολούθως θα πρέπει να βρούµε έναν τρόπο να διακρίνουµε σε ποιον πίνακα αναφερόµαστε όταν επικαλούµαστε µία οποιαδήποτε στήλη. Αυτό το επιτυγχάνουµε βάζοντας το όνοµα του πίνακα στον οποίο αναφερόµαστε πριν από το όνοµα της στήλης µας. Έτσι στο παράδειγµά µας θα γράψουµε το id ως profs.id_profs και university_student.id_kathigith για να αναφερθούµε στο id του καθηγητή του profs και του university_student αντίστοιχα.

74 Έτσι ο κώδικας µας θα είναι ως εξής: ResultSet rs = st.executequery("select prof_name FROM profs,university_student WHERE university_student.id_kathigith=profs.id_prof and university_student.student_id=1511"); το ResultSet τώρα έχει το όνοµα του καθηγητή που κάνει µάθηµα στον φοιτητή µε id 1511 και φαίνεται στο πρόγραµµά µας όπως φαίνεται στην Εικόνα 6.1: Εικόνα 6.1 import java.sql.*; class Use_Joins_inJDBC{ public static void main(string [] args){ try{ Class.forName("com.mysql.jdbc.Driver"); String url ="jdbc:mysql://localhost:3307/jdbc"; Connection con =DriverManager.getConnection(url,"root", "1234"); System.out.println("Connection: " + con); Statement st = con.createstatement(); ResultSet rs = st.executequery("select prof_name FROM profs,university_student WHERE university_student.id_kathigith=profs.id_prof and university_student.student_id=1511"); System.out.println("THESE ARE THE REQUESTED DATA:");

75 System.out.println(""); while (rs.next()) { System.out.print(rs.getString(1)); catch(classnotfoundexception cnfe){ cnfe.printstacktrace(); catch(sqlexception se){ se.printstacktrace(); 6.5 Χρήση Συναλλαγών (transactions) Σε τι χρησιµεύουν οι συναλλαγές; Υπάρχουν κάποιες φορές που δεν θέλουµε να εκτελεστεί ένα statement εάν πρώτα δεν έχει ολοκληρωθεί η εκτέλεση ενός άλλου. Αυτό συµβαίνει κυρίως στις on-line συναλλαγές όπου µπορεί να έχουµε συγκρούσεις αιτήσεων από χρήστες, εάν αυτοί θέλουν να χρησιµοποιήσουν κάποια δεδοµένα ταυτόχρονα µε σκοπό την αλλαγή τους. Σκεφτείτε για παράδειγµα µία τράπεζα, όπου κάποιος πηγαίνει για να κάνει µία ανάληψη. Εάν κάποιος άλλος επιχειρήσει να κάνει ανάληψη ταυτόχρονα από τον ίδιο λογαριασµό, υπάρχει το ενδεχόµενο να αναληφθούν χρήµατα.ενώ ο λογαριασµός είναι άδειος. Έτσι το πληροφοριακό σύστηµα της τράπεζας µπλοκάρει τις ενέργειες πάνω στον λογαριασµό εάν αυτός χρησιµοποιείται ήδη από κάποιον άλλον. Ένα άλλο παράδειγµα που κάνει κατανοητή την ανάγκη της επίλυσης τέτοιου είδους συγκρούσεων είναι σε ένα κατάστηµα όπου υπάρχει αλλαγή στις τιµές των προϊόντων. εν είναι δυνατόν να αλλάζουµε τις τιµές µέσα στη βάση µία-µία. Τέτοιου είδους συγκρούσεις επιλύονται µε τις λεγόµενες συναλλαγές (transactions).

76 Οι συναλλαγές είναι ένα σύνολο µιας ή περισσότερων εντολών που εκτελούνται µαζί ως ενιαία οντότητα. Έτσι είτε όλες οι εντολές εκτελούνται, ή καµία από τις εντολές δεν εκτελείται Η λογική µε την οποία λειτουργούν οι συναλλαγές Η σύνδεση που δηµιουργούµε µεταξύ ενός προγράµµατος και της βάσης δεδοµένων είναι αυτόµατη (auto-commit) σύνδεση, δηλαδή όποια ενέργεια γίνεται µεταβάλλει άµεσα τη βάση δεδοµένων και τα δεδοµένα της. Αυτό σηµαίνει ότι κάθε µεµονωµένη δήλωση SQL αντιµετωπίζεται ως συναλλαγή και δεσµεύεται και ενεργεί πάνω στη βάση αυτόµατα µόλις εκτελεστεί. Βέβαια εδώ, για να έχουµε µία πιο σωστή θεώρηση του θέµατος της εκτέλεσης µιας εντολής, θα πρέπει να πούµε ότι η προκαθορισµένη (default) ενέργεια της SQL για ένα statement είναι να δεσµευτεί και να ενεργήσει πάνω στη Β όταν ολοκληρώνεται και όχι όταν εκτελείται. Ένα statement θεωρείται ότι έχει ολοκληρωθεί όταν έχει ανακτηθεί όλο το σύνολο των αποτελεσµάτων που ζητάµε και έχουν γίνει όλες οι ενηµερώσεις που ζητούνται. Σχεδόν όµως σε όλες τις περιπτώσεις, µια εντολή ολοκληρώνεται, και εποµένως αποδεσµεύεται, αµέσως µόλις εκτελείται. Ο τρόπος για να οµαδοποιήσουµε δύο ή περισσότερες δηλώσεις σε µια συναλλαγή είναι να θέσουµε εκτός λειτουργίας την προκαθορισµένη µέθοδο auto-commit. Ο τρόπος που το πετυχαίνουµε αυτό, φαίνεται στην ακόλουθη γραµµή κώδικα, όπου con είναι µια ενεργός σύνδεση: con.setautocommit(false);

77 Αφού έχουµε απενεργοποιήσει την auto-commit διαδικασία, καµία δήλωση SQL δεν δεσµεύεται έως ότου να κληθεί η µέθοδος δέσµευσης των εντολών που έχουν δοθεί, δηλαδή η commit. Όλες οι δηλώσεις που έχουν δοθεί µετά την εντολή απενεργοποίησης του AutoCommit µέχρι την εντολή επανενεργοποίησής του, αποτελούν τη συνναλαγή µας και εκτελούνται µαζί ως ένα σώµα. Ο ακόλουθος κώδικας, στον οποίο η con είναι µια ενεργός σύνδεση, αποτυπώνει µια συναλλαγή: con.setautocommit(false); PreparedStatement updatesales = con.preparestatement( "UPDATE university_student SET passed_lessons=? WHERE student_name=?"); updatesales.setint(1, 35); updatesales.setstring(2, "TERZIDIS XRISTOS"); updatesales.executeupdate(); PreparedStatement updatetotal = con.preparestatement("insert into university_student values(?,?,?,?,?)"); updatetotal.setint(1, 1444); updatetotal.setstring(2, "PAPADOPOULOU XRISTINA"); updatetotal.setint(3, 0); updatetotal.setfloat(4, 0); updatetotal.setint(5, 3); updatetotal.executeupdate(); con.commit(); con.setautocommit(true); Στο παράδειγµά µας αυτό γίνονται οι εξής λειτουργίες: Απενεργοποιούµε την auto-commit λειτουργία από την σύνδεση con, κάτι που σηµαίνει ότι τα δύο preparedstatement που κάνουµε παρακάτω δεν εκτελούνται

78 αµέσως µόλις δηµιουργούνται, αλλά εκτελούνται µαζί, µόλις ενεργοποιήσουµε το commit, ηµιουργούµε ένα preparedstatement το οποίο έχει ως στόχο την ενηµέρωση του αριθµού των µαθηµάτων που έχει περάσει ο φοιτητής και ένα preparedstatement µε στόχο την εισαγωγή νέων φοιτητών. Αφού βάλουµε τα στοιχεία που εισάγουµε, ενεργοποιούµε και πάλι το autocommit, ενέργεια που έχει ως αποτέλεσµα την εκτέλεση των εντολών µας. Η τελευταία γραµµή κώδικα του παραδείγµατος ενεργοποιεί την auto-commit λειτουργία που σηµαίνει πως το κάθε statement δεσµεύεται και πάλι αυτόµατα µόλις ολοκληρώνεται. Έτσι έχουµε ξανά την default κατάσταση αυτόµατης εκτέλεσης των εντολών. ΠΡΟΣΟΧΗ: εν πρέπει να χρησιµοποιείτε την εντολή απενεργοποίησης της autocommit χωρίς σηµαντικό λόγο, δηλαδή χωρίς να θέλετε να δηµιουργήσετε συνναλλαγές γιατί υπάρχει ο κίνδυνος να κρατάτε άσκοπα δεδοµένα που χρειάζεται κάποιος άλλος χρήστης Χρησιµοποίηση των συναλλαγών για τη διατήρηση της ακεραιότητας των δεδοµένων της βάσης Εκτός από τη χρήση των συναλλαγών για να εκτελούµε πολλά statement µαζί, οι συναλλαγές µπορούν να βοηθήσουν στη διατήρηση της ακεραιότητας των στοιχείων σε έναν πίνακα. Παραδείγµατος χάριν, υποθέστε ότι ένας υπάλληλος θα έπρεπε να εισαγάγει τις νέες τιµές σε ένα µαγαζί µε CD αλλά καθυστέρησε να τις εισαγάγει για µερικές ηµέρες. Στο µεταξύ, οι τιµές αυξήθηκαν, και σήµερα ο ιδιοκτήτης είναι στο στάδιο της εισόδου των υψηλότερων τιµών. Όταν τελικά ο υπάλληλος επιχειρεί να βάλει τις τιµές που έπρεπε, την ίδια χρονική στιγµή ο ιδιοκτήτης βάζει τις νεότερες και ισχύουσες πλέον τιµές. Μόλις ο υπάλληλος καταλάβει το λάθος του, ότι δηλαδή έχει εισαγάγει τις τιµές

79 που πλέον δεν ισχύουν, έχει την δυνατότητα να κάνει το λεγόµενο rollback και να αναιρέσει τις αλλαγές που έχει κάνει. Εδώ πρέπει να σηµειωθεί ότι το rollback είναι µία συνάρτηση που µας δίνεται από την σύνδεση της JDBC, την Connection. Την ίδια ώρα και πριν προλάβει ο υπάλληλος να κάνει το rollback ο ιδιοκτήτης τυπώνει τις τιµές. Οι τιµές αυτές θα είναι οι τιµές του υπαλλήλου, δηλαδή οι µη ισχύουσες. Προβλήµατα αυτού του είδους µπορούν να αποφευχθούν µε την χρήση συναλλαγών. Για την αποφυγή τέτοιου είδους συγκρούσεων κατά τη διάρκεια µιας συναλλαγής, ένα Σ Β χρησιµοποιεί τις κλειδαριές (locks), µηχανισµούς για τον αποκλεισµό πρόσβασης από άλλους στα δεδοµένα που χειρίζεται η συναλλαγή. Εδώ θα πρέπει να σηµειωθεί ότι όταν δεν έχουµε απενεργοποιήσει την auto-commit διαδικασία, το κάθε statement αποτελεί συναλλαγή από µόνο του, και άρα το κλείδωµα δηµιουργείται αλλά µόνο για λίγο, για όσο κρατήσει η εκτέλεση ενός statement. Μόλις τεθεί µια κλειδαριά, παραµένει σε ισχύ έως ότου η συναλλαγή ολοκληρωθεί ή έως ότου κάνουµε rollback. Παραδείγµατος χάριν, ένα Σ Β θα µπορούσε να κλειδώσει µια γραµµή ενός πίνακα έως ότου έχουν ολοκληρωθεί οι ενηµερώσεις που γίνονται σε αυτήν. Το αποτέλεσµα αυτής της κλειδαριάς θα ήταν να αποτραπεί η λήψη λάθος πληροφοριών από ένα χρήστη, δηλαδή να διαβάσει µία τιµή (ένα δεδοµένο) η οποία δεν ισχύει πλέον, ή µπορεί να έχει αναιρεθεί. Το πώς τίθεται µία κλειδαριά εξαρτάται από το λεγόµενο επίπεδο αποµόνωσης συναλλαγής, το οποίο µπορεί να κυµανθεί από την µη υποστήριξη της έννοιας της συναλλαγής µέχρι και την υποστήριξη συναλλαγών που ορίζουν ακριβείς κανόνες πρόσβασης. Ένα παράδειγµα ενός επιπέδου αποµόνωσης συναλλαγής είναι το TRANSACTION_READ_COMMITTED, το οποίο δεν θα επιτρέψει την προσπέλαση ενός δεδοµένου εάν αυτό έχει δεσµευτεί. Με άλλα λόγια, εάν το επίπεδο αποµόνωσης συναλλαγής τεθεί ως ΤRANSACTION_READ_COMMITTED, το Σ Β δεν επιτρέπει το διάβασµα λανθασµένων δεδοµένων. Η εκάστοτε σύνδεση µας, η Connection, µας δίνει

80 την δυνατότητα να χρησιµοποιήσουµε πέντε τιµές που αντιπροσωπεύουν τα πέντε επίπεδα αποµόνωσης συναλλαγής που µπορούµε να χρησιµοποιήσουµε στη JDBC. Συνήθως δεν θέτουµε εµείς το επίπεδο αποµόνωσης συναλλαγής, αλλά χρησιµοποιούµε το default επίπεδο που µας δίνει το Σ Β που χρησιµοποιούµε. Η JDBC µας δίνει την δυνατότητα να δούµε το επίπεδο αυτό χρησιµοποιώντας τη µέθοδο gettransactionisolation που δίνεται από την σύνδεση Connection, και να το αλλάξουµε εάν θέλουµε, χρησιµοποιώντας τη µέθοδο settransactionisolation που δίνεται από την σύνδεση Connection. ΣΗΜΕΙΩΣΗ: Ωστόσο, αν και η JDBC µας δίνει την δυνατότητα να αλλάξουµε το επίπεδο αποµόνωσης συναλλαγής, µια τέτοια ενέργεια δεν έχει καµιά επίδραση εκτός εάν υποστηρίζεται από το Σ Β και τον Driver που χρησιµοποιείται Η δηµιουργία ενός Rollback σηµείου και ενός Savepoint Στο JDBC 3.0 API έχει προστεθεί η µέθοδος Connection.setSavepoint, η οποία θέτει ένα savepoint µέσα στην τρέχουσα συναλλαγή. Η µέθοδος Connection.rollback είναι επίσης µία µέθοδος που χρησιµοποιείται για την επιστροφή µας στο σηµείο savepoint. Στη συνέχεια θα διευκρινίσουµε τι ακριβώς είναι το rollback και το savepoint. Savepoint: είναι ένα χρονικό σηµείο το οποίο κρατάµε στη µνήµη του υπολογιστή µας, ώστε σε περίπτωση λάθους να µπορούµε να επιστρέψουµε σε αυτό και να επαναφέρουµε την Β µας σε επιθυµητή κατάσταση και πάλι. Rollback: είναι η διαδικασία την οποία κάνουµε για να γυρίσουµε σε ένα savepoint που έχουµε ορίσει. Μας επιστρέφει δηλαδή σε µια προηγούµενη κατάσταση την οποία έχουµε περάσει.

81 Στο παράδειγµα που παρατίθεται παρακάτω εισάγουµε µια εγγραφή (γραµµή) σε έναν πίνακα, θέτουµε ένα savepoint µε όνοµα svpt1, και ύστερα εισάγουµε µια δεύτερη εγγραφή. Όταν αργότερα κάνουµε την ενέργεια rollback στη συναλλαγή και µεταφερόµαστε στο savepoint svpt1, η δεύτερη γραµµή που είχαµε εισαγάγει αναιρείται, αλλά η πρώτη εισαγωγή παραµένει άθικτη. Με άλλα λόγια, όταν η συναλλαγή δεσµεύεται, µόνο η γραµµή που περιέχει το (?FIRST?) θα προστεθεί στο TAB1: Statement stmt = conn.createstatement(); int rows = stmt.executeupdate("insert INTO TAB1 (COL1) VALUES " + "(?FIRST?)"); // set savepoint Savepoint svpt1 = conn.setsavepoint("savepoint_1"); rows = stmt.executeupdate("insert INTO TAB1 (COL1) " + "VALUES (?SECOND?)"); conn.rollback(svpt1); conn.commit(); Απελευθέρωση ενός Savepoint Η εντολή Connection.releaseSavepoint() αποδεσµεύει-αφαιρεί το Savepoint από τη συναλλαγή που χρησιµοποιούµε. Εάν απελευθερωθεί ένα savepoint, µία ενδεχόµενη προσπάθεια να γυρίσουµε σε αυτό οδηγεί σε λάθος κατάστση, µε την έγερση µίας SQLException. Όσα savepoints έχουν δηµιουργηθεί κατά τη διάρκεια µίας συναλλαγής, απελευθερώνονται αυτόµατα και γίνονται άκυρα όταν αποδεσµεύεται η συναλλαγή ή όταν κάνουµε rollback σε ένα σηµείο savepoint που δηµιουργήθηκε πριν από αυτά.

82 6.5.6 Πότε καλούµε ένα rollback Όπως είπαµε και προηγουµένως, η κλήση µιας διαδικασίας rollback ακυρώνει τη συναλλαγή και επαναφέρει τα δεδοµένα στις τιµές που είχαν πριν τη συναλλαγή. Εάν προσπαθείτε να εκτελέσετε µία ή περισσότερες συναλλαγές και διαπιστώσετε ένα λάθος τύπου SQLException, είναι καλό να καλέσετε την rollback ώστε να ακυρωθεί η συναλλαγή και να ξαναγίνει από την αρχή. Αυτός είναι ο µόνος τρόπος για να είστε σίγουροι ότι δεν έχουν γίνει κάποιες αλλαγές στα δεδοµένα που ενδεχοµένως να µην προσέξατε και µελλοντικά µπορεί να δηµιουργήσουν κάποιο πρόβληµα. Η εµφάνιση µιας SQLException µπορεί να υποδηλώνει ότι έχει γίνει κάποιο λάθος, αλλά δεν πληροφορεί για ποιες ενέργειες έχουν γίνει και ποιες όχι µέχρι να εµφανιστεί το λάθος. Οπότε από τη στιγµή που δεν µπορείτε να ξέρετε τι µεταβολές έχουν γίνει, η κλήση µιας rollback είναι ο µόνος τρόπος για να είστε σίγουροι ότι δεν έχει γίνει κάποια ανεπιθύµητη µεταβολή. ΣΗΜΕΙΩΣΗ: Επειδή τα παραδείγµατα αυτού του υπερκειµένου είναι απλά, δεν εξυπηρετεί σε τίποτα η χρήση συναλλαγών, αλλά σε ένα πρόγραµµα το οποίο έχει βρόχους και λειτουργεί για µεγάλο χρονικό διάστηµα, η χρήση συναλλαγών αποκτά ζωτική σηµασία.

83 6.6 Αποθηκευµένες ιαδικασίες Προτού συζητήσουµε τα callablestatements ας αναφέρουµε πρώτα κάποια πράγµατα για τις αποθηκευµένες διαδικασίες Τι είναι αποθηκευµένη διαδικασία; Οι αποθηκευµένες διαδικασίες ή αλλιώς stored procedures είναι και αυτές κοµµάτια κώδικα όπως είναι οι συναρτήσεις ή οι διάφορες µέθοδοι που υπάρχουν σε όλες τις γλώσσες προγραµµατισµού. ηλαδή, Όπως και οι συναρτήσεις µπορούν να περιλαµβάνουν ή να µην περιλαµβάνουν ορίσµατα. Εποµένως ο χρήστης µπορεί να τις χρησιµοποιεί και να τις εκτελεί σε διαφορετικά αντικείµενα αλλάζοντας τις τιµές των ορισµάτων Εκτελούνται και αυτές µε µία απλή κλήση H σύνταξη µιας αποθηκευµένης διαδικασίας, είναι διαφορετική σε κάθε Σ Β. Για παράδειγµα κάποιες χρησιµοποιούν τις λέξεις begin end ή άλλες δεσµευµένες (reserved) λέξεις για να ορίσουν την αρχή και το τέλος της διαδικασίας. Εδώ θα πρέπει να τονίσουµε ότι δεν υποστηρίζονται όλες οι αποθηκευµένες διαδικασίες από όλα τα Σ Β. Έτσι, στην περίπτωση που θέλει ο χρήστης να κάνει χρήση µιας αποθηκευµένης διαδικασίας, θα πρέπει να γνωρίζει αν το συγκεκριµένο Σ Β που χρησιµοποιεί την υποστηρίζει Σύνταξη αποθηκευµένης διαδικασίας

84 Οι αποθηκευµένες διαδικασίες µπορούν να εκτελεστούν µε διαφορετικές παραµέτρους και αποτελέσµατα, και µπορούν να έχουν οποιοδήποτε συνδυασµό παραµέτρων εισόδου (input), παραµέτρων εξόδου (output), ήπαράµετρων εισόδου και εξόδου (input/output). Έτσι, και µε βάση τα όσα ειπώθηκαν παραπάνω, η κλήση µίας αποθηκευµένης διαδικασίας µπορεί να συνταχθεί µε τρεις διαφορετικούς τρόπους αναλόγως µε το αν δέχεται ή όχι ορίσµατα ή άν επιστρέφει ή όχι κάποια τιµή. H κλήση µιας αποθηκευµένης διαδικασίας που δεν δέχεται ορίσµατα γίνεται ως εξής: {call procedure_name H κλήση µιας αποθηκευµένης διαδικασίας που έχει ορίσµατα και δεν επιστρέφει κάποιο αποτέλεσµα γίνεται ως εξής: {call procedure_name[(?,?,...)] Τέλος, η κλήση µιας αποθηκευµένης διαδικασίας που δέχεται ορίσµατα και επιστρέφει ένα αποτέλεσµα (συνήθως σε ένα ResultSet) είναι η παρακάτω: {? = call procedure_name[(?,?,...)] Για ποιο λόγο όµως χρησιµοποιούµε αποθηκευµένες διαδικασίες; Ο λόγος της ύπαρξης των αποθηκευµένων διαδικασιών είναι ακριβώς ο ίδιος µε το λόγο ύπαρξης των συναρτήσεων σε οποιαδήποτε γλώσσα προγραµµατισµού. Έτσι, χάρη στις αποθηκευµένες διαδικασίες, µπορούµε να έχουµε έτοιµες τυποποιηµένες εντολές και διαδικασίες, η χρήση των οποίων µπορεί να µας γλυτώσει από σηµαντική σπατάλη χρόνου, την οποία θα είχαµε εάν είµασταν υποχρεωµένοι να επαναλαµβάνουµε τον ίδιο κώδικα πολλές φορές. Οι αποθηκευµένες διαδικασίες όµως µας προσφέρουν και άλλα πλεονεκτήµατα:

85 Καλύτερη απόδοση του συστήµατος µας, Αφαίρεση του κώδικα SQL από άλλα αρχιτεκτονικά στρώµατα των εφαρµογών µας (π.χ. διασύνδεση χρήστη, αλγόριθµους) Αποτροπή της περιήγησης και σάρωσης του πίνακα κάθε φορά, καθώς και περιστασιακές τροποποιήσεις του Αφού αναφέραµε λοιπόν τι είναι οι αποθηκευµένες διαδικασίες και ποια η δυνατή σύνταξη τους, ας σταθούµε τώρα στην κλάση CallableStatement Η κλάση CallableStatement Εκτός από την κλάση Prepared Statement, όπως έχουµε αναφέρει υπάρχει και η κλάση CallableStatement. Η κλάση CallableStatement είναι µια υποκλάση της PreparedStatement, έτσι ένα αντικείµενο της CallableStatement µπορεί να διαθέτει τις παραµέτρους input ακριβώς όπως µπορεί ένα αντικείµενο PreparedStatement. Επιπλέον, ένα αντικείµενο της CallableStatement µπορεί να πάρει τις παραµέτρους output, ή τις παραµέτρους που είναι και για τo input και για τo output (INOUT). Οι παράµετροι INOUT και η µέθοδος execute() χρησιµοποιούνται σπάνια. Ένα αντικείµενο CallableStatement έχει, όπως και κάθε άλλη αποθηκευµένη διαδικασία, τις δυνατές µορφές που αναφέρθηκαν και προηγουµένως ηµιουργία CallableStatement Για να δηµιουργήσουµε ένα CallableStatement δηµιουργούµε ένα string µέσα στο οποίο θέτουµε την αποθηκευµένη διαδικασία µας, δηλαδή τις εντολές που θέλουµε να εκτελούµε κάθε φορά. Ένα τέτοιο παράδειγµα δηµιουργίας string φαίνεται στο παρακάτω παράδειγµα: String createprocedure = "create procedure SHOW_PROFS " + "as " +

86 "select profs. prof_name, university_student.student_name " + "from profs, university_student " + "where profs. id_prof = university_student.id_kathigith " + "order by prof_name "; Πριν όµως από τη δηµιουργία του string θα πρέπει, όπως µάθαµε, να δηµιουργήσουµε µία σύνδεση της Β µας µε τη JAVA. Όπως και στα αντικείµενα Statement, και στα PreparedStament έτσι και στα CallableStatement για να δηµιουργήσουµε ένα αντικείµενο χρειάζεται αρχικά να δηµιουργήσουµε ένα αντικείµενο Connection. Το ακόλουθο κοµµάτι κώδικα χρησιµοποιεί το αντικείµενο σύνδεσης con για να δηµιουργήσει ένα αντικείµενο δήλωσης, το οποίο χρησιµοποιείται για να στείλει τη δήλωση SQL, που δηµιουργεί την αποθηκευµένη διαδικασία, στη βάση δεδοµένων: Statement stmt = con.createstatement(); stmt.executeupdate(createprocedure); Έτσι, η διαδικασία SHOW_PROFS συντάσσεται και αποθηκεύεται στη βάση δεδοµένων µας όπως ένα αντικείµενο βάσεων δεδοµένων που µπορεί να κληθεί, µε τρόπο παρόµοιο µε αυτόν που θα καλούσατε µια µέθοδο ή συνάρτηση Πως καλούµε µια stored procedure από τη JDBC; Η JDBC σας δίνει την δυνατότητα να καλέσετε µια αποθηκευµένη διαδικασία µιας Β που γράφτηκε από µια εφαρµογή σε γλώσσα προγραµµατισµού Java. Κατ αρχάς θα πρέπει να δηµιουργήσουµε ένα αντικείµενο CallableStatement. Όπως είπαµε και πιο πάνω για να δηµιουργήσουµε ένα τέτοιο αντικείµενο χρειάζεται αρχικά να δηµιουργήσουµε ένα αντικείµενο Connection. Ένα αντικείµενο

87 callablestatement περιέχει µια κλήση µιας αποθηκευµένης διαδικασίας. εν περιέχει την ίδια την αποθηκευµένη διαδικασία. Στον κώδικά µας παρακάτω, η πρώτη γραµµή δηµιουργεί µια κλήση της αποθηκευµένης διαδικασίας SHOW_PROFS χρησιµοποιώντας τη σύνδεση con. Το κοµµάτι που εσωκλείεται στα εισαγωγικά, είναι η εντολή για την κλήση της αποθηκευµένης διαδικασίας. Όταν ο driver συναντήσει την "{call SHOW_PROFS", θα µεταφράσει αυτήν την εντολή στην αντίστοιχη εντολή SQL που χρησιµοποιείται από τη βάση δεδοµένων, για να καλέσει µε τη σειρά της, την αποθηκευµένη διαδικασία που ονοµάζεται SHOW_PROFS. CallableStatement cs = con.preparecall("{call SHOW_PROFS"); ResultSet res = cs.executequery(); Σηµείωση: η µέθοδος cs που χρησιµοποιείται είναι η executequery, επειδή το cs καλεί µια αποθηκευµένη διαδικασία που περιέχει µια ερώτηση και παράγει έτσι ένα ResultSet. Εάν η διαδικασία περιείχε µία ενηµέρωση (update) ή γενικά µια διαφοροποίηση των δεδοµένων της Β, η µέθοδος που θα έπρεπε να χρησιµοποιηθεί θα ήταν η executeupdate. Ωστόσο, µερικές φορές, µια αποθηκευµένη διαδικασία περιέχει περισσότερα από µία εντολές SQL, οπότε θα παραγάγει περισσότερα από ένα ResultSet, περισσότερα από ένα update, ή κάποιο συνδυασµό ResultSet και updates. Σε αυτήν την περίπτωση, όπου υπάρχουν πολλαπλά αποτελέσµατα, η πρέπει να χρησιµοποιηθεί η µέθοδος execute() για να εκτελέσει το CallableStatement.

88 6.7 Ερωτήσεις-Ασκήσεις- ραστηριότητες 1. Να γίνει η εµφάνιση των ταινιών που υπάρχουν στη βάση στον πίνακα Tainia. Λύση 2. Να βρεθούν οι ταινίες που γυρίστηκαν µετά το Έχετε βρει τις ταινίες; Πατήστε εδώ Συνέβη κάποιο λάθος; Πατήστε εδώ 3. Στον πίνακα Directed να γίνει η ανανέωση της τιµής του Rate για τον σκηνοθέτη µε ΙD=1. To καινούριο Rate που ψηφίστηκε να έχει τιµή 8.6. Έγινε η ανανέωση; Πατήστε εδώ Εγινε κάποιο λάθος; Πατήστε εδώ 4. Να βρεθεί ποιος είναι ο βαθµός της ταινίας The seventh seal Λύση 5. Ποιος είναι ο σκηνοθέτης της ταινίας µε τίτλο Old boy; Υπόδειξη Λύση

89 6. Στον πίνακα Directed να γίνει ανανέωση της τιµής του Rate για την ταινία µε τίτλο Αnnie Hall. Το νέο Rate που ψηφίστηκε να έχει τιµή 7.8 Έγινε η ανανέωση της ταινίας; Πατήστε εδώ Λύση 7 ηµιουργήστε ένα αντικείµενο PreparedStatement το οποίο να αλλάζει το έτος που γυρίστηκε η ταινία Dead Man s Shoes το οποίο να γίνει από 2007, ηµιουργήσατε την έτοιµη εντολή; Εάν ναι πατήστε εδώ Έχει συµβεί κάποιο λάθος; Εάν ναι δείτε την υπόδειξη Ερωτήσεις 1. Για ποιο λόγο να κάνουµε χρήση µιας έτοιµης εντολής; Απάντηση 2. Τι γνωρίζετε για το αντικείµενο Prepared Statement;Απάντηση 3. Με ποια µέθοδο εκτελείται ένα Prepared Statement;Απάντηση 4. Τι είναι µία συναλλαγή; Ποιος είναι ο σκοπός της; Απάντηση 5. Για ποιο λόγο να κάνουµε χρήση ενός Rollback;Απάντηση 6. Tι είναι ένα Savepoint; Απάντηση 7. Τι κάνει η µέθοδος autocommit; Απάντηση 8. Για ποιο λόγο να χρησιµοποιήσουµε µία αποθηκευµένη διαδικασία; Τι είναι; Απάντηση 9. Mε ποια µέθοδο δηµιουργείται µια έτοιµη εντολή; Απάντηση

90 10. Mε ποια µέθοδο δηµιουργείται µία αποθηκευµένη διαδικασία; Απάντηση 11. Ποια statements καλούν µία αποθηκευµένη διαδικασία; Απάντηση 13. Με ποία µέθοδο ανατίθενται τιµές στις µεταβλητές του preparedstatement; Απάντηση 14. Mε ποια µέθοδο εκτελείται ένα callable statement; Απάντηση

91 7 JDBC για τη Microsoft access 7.1 Εισαγωγή Προτού δούµε πώς µπορούµε να δουλέψουµε µε το JDBC και την Β Microsoft Access, πρέπει να εκτελέσουµε κάποια βήµατα. Αυτά είναι τα εξής: Καταρχάς πρέπει να δηµιουργήσουµε µία βάση δεδοµένων, µέσω της οποίας θα συνδεθούµε µε το πρόγραµµα µας και στην οποία εισάγουµε τους πίνακες για την εκτέλεση των ερωτηµάτων. Στη συνέχεια θα δηµιουργήσουµε το data source name (dsn), µέσω του οποίου θα επιτευχθεί η σύνδεση του προγράµµατος Java και της βάσης δεδοµένων που έχουµε δηµιουργήσει στο προηγούµενο βήµα. 7.2 ηµιουργία βάσης δεδοµένων µέσω MS Access Τα βήµατα στο λειτουργικό σύστηµα Windows είναι τα εξής: Ανοίγουµε τη Microsoft Access (start Programs Microsoft Access) Ανοίγει το παράθυρο µε τη Microsoft Access Στη δεξιά στήλη, κάτω από τη «δηµιουργία», επιλέγουµε δηµιουργία κενής βάσης δεδοµένων και γράφουµε το όνοµα που θέλουµε να έχει η βάση µας. Στο συγκεκριµένο παράδειγµα θα κατασκεύασουµε τη βάση music_store Στη στήλη µε τα αντικείµενα επιλέγουµε «πίνακες» και στη συνέχεια «δηµιουργία πίνακα σε προβολή σχεδίασης» τον οποίο αποθηκεύουµε µε το όνοµα που θέλουµε.

92 7.3 ηµιουργία dsn Το πιο σηµαντικό σηµείο που θα πρέπει να προσέξουµε για να επιτευχθεί η σύνδεση µε τη JDBC είναι η δηµιουργία DSN. Το DSN (data source name) είναι το όνοµα που χρησιµοποιείται από την ODBC για να επιτευχθεί η αναφορά στον οδηγό και για να πάρουµε και άλλες πληροφορίες που χρειάζονται για να έχουµε πρόσβαση σε δεδοµένα. Για τον καθορισµό αυτού του ονόµατος χρησιµοποιούµε τον πίνακα ελέγχου των Windows. Συγκεκριµένα εκτελούµε τα εξής βήµατα: Start settings control panel administrative tools data sources Εµφανίζεται η Εικόνα 7.1, όπου στην καρτέλα system dsn επιλέγουµε add

93 Εικόνα 7.1 εµφανίζεται η λίστα µε τους drivers(όπως φαίνεται στην Εικόνα 7.2), όπου επιλέγουµε Microsoft Access Driver( *mdb) και πατάµε Finish

94 Εικόνα Σύνδεση java µε βάση δεδοµένων Αφού έχουν γίνει τα απαραίτητα βήµατα για τον καθορισµό του DSN, θέλουµε να επικοινωνήσουµε µέσω του προγράµµατός Java, µε τη βάση δεδoµένων που έχουµε δηµιουργήσει (δηλαδή µε τη βάση δεδοµένων music_store). Όπως είδαµε στο υπερκείµενο αυτό µέχρι στιγµής, οι µέθοδοι της Java που χρησιµοποιούνται είναι αρκετά απλές και δεν απαιτείται ιδιαίτερο υπόβαθρο σε Java. Οι µέθοδοι και οι βιβλιοθήκες που χρησιµοποιούνται είναι ιδιαίτερα τυποποιηµένες. Παράδειγµα

ΗΜΙΟΥΡΓΙΑ ΕΡΓΟΥ ΜΑΘΗΣΗΣ ΓΙΑ ΤΗ ΓΛΩΣΣΑ JAVA ΜΕ ΧΡΗΣΗ ΤΗΣ ΠΛΑΤΦΟΡΜΑΣ ΣΥΝΕΡΓΑΤΙΚΗΣ ΜΑΘΗΣΗΣ NETGENERS

ΗΜΙΟΥΡΓΙΑ ΕΡΓΟΥ ΜΑΘΗΣΗΣ ΓΙΑ ΤΗ ΓΛΩΣΣΑ JAVA ΜΕ ΧΡΗΣΗ ΤΗΣ ΠΛΑΤΦΟΡΜΑΣ ΣΥΝΕΡΓΑΤΙΚΗΣ ΜΑΘΗΣΗΣ NETGENERS ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΗΜΙΟΥΡΓΙΑ ΕΡΓΟΥ ΜΑΘΗΣΗΣ ΓΙΑ ΤΗ ΓΛΩΣΣΑ JAVA ΜΕ ΧΡΗΣΗ ΤΗΣ ΠΛΑΤΦΟΡΜΑΣ ΣΥΝΕΡΓΑΤΙΚΗΣ ΜΑΘΗΣΗΣ NETGENERS ΠΤΥΧΙΑΚΗ EΡΓΑΣΙΑ Ιωάννα-Βασιλική

Διαβάστε περισσότερα

Ορισµοί Σχεσιακού Μοντέλου και Τροποποιήσεις Σχέσεων σε SQL

Ορισµοί Σχεσιακού Μοντέλου και Τροποποιήσεις Σχέσεων σε SQL Ορισµοί Σχεσιακού Μοντέλου και Τροποποιήσεις Σχέσεων σε SQL Βάσεις εδοµένων 2011-2012 Ευαγγελία Πιτουρά 1 Εισαγωγή Μοντελοποίηση Στα προηγούµενα µαθήµατα: Εννοιολογικός Σχεδιασµός Βάσεων Δεδοµένων (µε

Διαβάστε περισσότερα

Η Βίβλος σχετικά με το JDBC. Περιέχει τρία βασικά tutorials στα οποία θα βασιστεί το μάθημα και περιγράφει όλες τις τάξεις και τις μεθόδους που

Η Βίβλος σχετικά με το JDBC. Περιέχει τρία βασικά tutorials στα οποία θα βασιστεί το μάθημα και περιγράφει όλες τις τάξεις και τις μεθόδους που 1 Η Βίβλος σχετικά με το JDBC. Περιέχει τρία βασικά tutorials στα οποία θα βασιστεί το μάθημα και περιγράφει όλες τις τάξεις και τις μεθόδους που μπορούμε να χρησιμοποιήσουμε σε μία JDBC εφαρμογή. Υπάρχει

Διαβάστε περισσότερα

Ορισμοί Σχεσιακού Μοντέλου και Τροποποιήσεις Σχέσεων σε SQL

Ορισμοί Σχεσιακού Μοντέλου και Τροποποιήσεις Σχέσεων σε SQL Εισαγωγή Μοντελοποίηση Στα προηγούμενα μαθήματα: Ορισμοί Σχεσιακού Μοντέλου και Τροποποιήσεις Σχέσεων σε SQL Εννοιολογικός Σχεδιασμός Βάσεων εδομένων (με χρήση του Μοντέλου Οντοτήτων/Συσχετίσεων) Λογικός

Διαβάστε περισσότερα

Ορισμοί Σχεσιακού Μοντέλου και Τροποποιήσεις Σχέσεων σε SQL

Ορισμοί Σχεσιακού Μοντέλου και Τροποποιήσεις Σχέσεων σε SQL Ορισμοί Σχεσιακού Μοντέλου και Τροποποιήσεις Σχέσεων σε SQL Βάσεις Δεδομένων 2009-2010 Ευαγγελία Πιτουρά 1 Εισαγωγή Μοντελοποίηση Στα προηγούμενα μαθήματα: Εννοιολογικός Σχεδιασμός Βάσεων εδομένων (με

Διαβάστε περισσότερα

Ορισμοί Σχεσιακού Μοντέλου και (απλές)τροποποιήσεις Σχέσεων στην SQL. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Ορισμοί Σχεσιακού Μοντέλου και (απλές)τροποποιήσεις Σχέσεων στην SQL. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1 Ορισμοί Σχεσιακού Μοντέλου και (απλές)τροποποιήσεις Σχέσεων στην SQL Ευαγγελία Πιτουρά 1 Τι έχουμε δει Μοντελοποίηση Εννοιολογικός Σχεδιασμός Βάσεων Δεδομένων (με χρήση του Μοντέλου Οντοτήτων/Συσχετίσεων)

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ ΕΡΓΑΣΤΗΡΙΟ ΒΑΣΕΩΝ Ε ΟΜΕΝΩΝ ΜΕΡΟΣ ΤΕΤΑΡΤΟ Insert, Update, Delete, Ένωση πινάκων Γιώργος Μαρκοµανώλης Περιεχόµενα Group By... 1 Having...1 Οrder By... 2 Εντολή Insert...

Διαβάστε περισσότερα

Προγραμματισμός ΙΙ (Java) 6. Διαχείριση δεδομένων

Προγραμματισμός ΙΙ (Java) 6. Διαχείριση δεδομένων Προγραμματισμός ΙΙ (Java) 6. Διαχείριση δεδομένων Σχεσιακές Βάσεις Δεδομένων Τα δεδομένα μας οργανώνονται σε ένα ή περισσότερους πίνακες: σε στήλες και σειρές Κάθε πίνακας έχει ένα όνομα και αποτελείται

Διαβάστε περισσότερα

H SQL είναι η γλώσσα για όλα τα εμπορικά σχεσιακά συστήματα διαχείρισης βάσεων δεδομένων

H SQL είναι η γλώσσα για όλα τα εμπορικά σχεσιακά συστήματα διαχείρισης βάσεων δεδομένων Η γλώσσα SQL H SQL είναι η γλώσσα για όλα τα εμπορικά σχεσιακά συστήματα διαχείρισης βάσεων δεδομένων H SQL έχει διάφορα τμήματα: Γλώσσα Ορισμού Δεδομένων (ΓΟΔ) Γλώσσα Χειρισμού Δεδομένων (ΓΧΔ) Ενσωματωμένη

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ ΕΡΓΑΣΤΗΡΙΟ ΒΑΣΕΩΝ Ε ΟΜΕΝΩΝ ΜΕΡΟΣ ΠΕΜΠΤΟ Triggers, Stored procedures Γιώργος Μαρκοµανώλης Περιεχόµενα Triggers-Ενηµέρωση δεδοµένων άλλων πινάκων... 1 Ασφάλεια...

Διαβάστε περισσότερα

(Μέρος 3:Γλώσσα Ορισµού, Γλώσσα Τροποποίησης, Ενσωµατωµένη SQL) Βάσεις εδοµένων 2002-2003 Ευαγγελία Πιτουρά 2

(Μέρος 3:Γλώσσα Ορισµού, Γλώσσα Τροποποίησης, Ενσωµατωµένη SQL) Βάσεις εδοµένων 2002-2003 Ευαγγελία Πιτουρά 2 Η Γλώσσα SQL (Μέρος 3:Γλώσσα Ορισµού, Γλώσσα Τροποποίησης, Ενσωµατωµένη SQL) Βάσεις εδοµένων 2002-2003 Ευαγγελία Πιτουρά 1 Η γλώσσα SQL H SQL έχει διάφορα τµήµατα: Γλώσσα Ορισµού εδοµένων (ΓΟ ) Γλώσσα

Διαβάστε περισσότερα

Βάσεις Δεδομένων (Databases)

Βάσεις Δεδομένων (Databases) Βάσεις Δεδομένων (Databases) ΕΠΛ 342 Χειμερινό Εξάμηνο 2011 Διδάσκοντες Καθηγητές Γιώργος Σαμάρας (ΧΩΔ01 109) Δομημένη Γλώσσα Ερωτήσεων SQL - DDL SQL Περίληψη SQL Τύποι δεδομένων DDL Δηλώσεις - Εντολές

Διαβάστε περισσότερα

Postgress ΣΤΟΧΟΣ ΣΧΕΤΙΚΟ ΕΚΠΑΙ ΕΥΤΙΚΟ ΥΛΙΚΟ. ΠΕΡΙΒΑΛΛΟΝ ΓΙΑ ΕΞΑΣΚΗΣΗ pgadmin ΥΠΟΒΑΘΡΟ. Συναρτήσεις στην PostgreSQL. 1. Γενικά

Postgress ΣΤΟΧΟΣ ΣΧΕΤΙΚΟ ΕΚΠΑΙ ΕΥΤΙΚΟ ΥΛΙΚΟ. ΠΕΡΙΒΑΛΛΟΝ ΓΙΑ ΕΞΑΣΚΗΣΗ pgadmin ΥΠΟΒΑΘΡΟ. Συναρτήσεις στην PostgreSQL. 1. Γενικά ΣΤΟΧΟΣ Postgress Το 9ο εργαστήριο εισάγει τον/ην φοιτητή/τρια στη χρήση και προγραµµατισµό συναρτήσεων στην PostgreSQL. ΣΧΕΤΙΚΟ ΕΚΠΑΙ ΕΥΤΙΚΟ ΥΛΙΚΟ Η σχετική ύλη του βιβλίου του µαθήµατος (διαφάνειες και

Διαβάστε περισσότερα

MySQL + Γλώσσα Προγραμματισμού. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

MySQL + Γλώσσα Προγραμματισμού. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1 MySQL + Γλώσσα Προγραμματισμού Ευαγγελία Πιτουρά 1 Database drivers Για να χρησιμοποιήσουμε μια βάση δεδομένων από μια γλώσσα προγραμματισμού χρειαζόμαστε έναν driver. JDBC είναι το API για τη Java και

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. 1 ο ΣΧΟΛΕΙΟ ΚΩΔΙΚΑ «Βασικά Θέματα Προγραμματισμού στην Ανάπτυξη Δυναμικών Διαδικτυακών Εφαρμογών» (Part 3) Ουρανία Σμυρνάκη

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. 1 ο ΣΧΟΛΕΙΟ ΚΩΔΙΚΑ «Βασικά Θέματα Προγραμματισμού στην Ανάπτυξη Δυναμικών Διαδικτυακών Εφαρμογών» (Part 3) Ουρανία Σμυρνάκη ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ 1 ο ΣΧΟΛΕΙΟ ΚΩΔΙΚΑ «Βασικά Θέματα Προγραμματισμού στην Ανάπτυξη Δυναμικών Διαδικτυακών Εφαρμογών» (Part 3) Ουρανία Σμυρνάκη 1 3 η ενότητα: Εισαγωγή στις Βάσεις Δεδομένων και στην MySQL

Διαβάστε περισσότερα

Διαδικτυακές Εφαρμογές Ενότητα 7: Προσπέλαση ΒΔ με το JDBC

Διαδικτυακές Εφαρμογές Ενότητα 7: Προσπέλαση ΒΔ με το JDBC Διαδικτυακές Εφαρμογές Ενότητα 7: Προσπέλαση ΒΔ με το JDBC Μιχάλας Άγγελος Τμήμα Μηχανικών Πληροφορικής ΤΕ Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό

Διαβάστε περισσότερα

Αρχιτεκτονική του πληροφοριακού συστήµατος Cardisoft Γραµµατεία 2003 ιαχείριση Προσωπικού

Αρχιτεκτονική του πληροφοριακού συστήµατος Cardisoft Γραµµατεία 2003 ιαχείριση Προσωπικού Αρχιτεκτονική του πληροφοριακού συστήµατος Cardisoft Γραµµατεία 2003 ιαχείριση Προσωπικού Γενικά Η αρχιτεκτονική ανάπτυξης τους πληροφοριακού συστήµατος Γραµµατεία 2000 υποσύστηµα διαχείρισης προσωπικού

Διαβάστε περισσότερα

Σχεδιασμός Βάσεων Δεδομένων

Σχεδιασμός Βάσεων Δεδομένων Πανεπιστήμιο Πειραιώς Τμήμα Ψηφιακών Συστημάτων Σχεδιασμός Βάσεων Δεδομένων Εργαστήριο 4 Δρ. Βασιλική Κούφη Περιεχόμενα Υλοποίηση Βάσεως Δεδομένων Εκτέλεση ερωτημάτων SQL στην Βάση Δεδομένων BHMA 1. Σχεδιασμός

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ ΕΡΓΑΣΤΗΡΙΟ ΒΑΣΕΩΝ Ε ΟΜΕΝΩΝ ΜΕΡΟΣ ΠΕΜΠΤΟ Stored procedures, Exceptions, ιακιώµατα Γιώργος Μαρκοµανώλης Περιεχόµενα Stored Procedures... 1 Exceptions... 1 Εντολή

Διαβάστε περισσότερα

MySQL + Γλώσσα Προγραμματισμού. Βάσεις Δεδομένων 2013-2014 Ευαγγελία Πιτουρά 1

MySQL + Γλώσσα Προγραμματισμού. Βάσεις Δεδομένων 2013-2014 Ευαγγελία Πιτουρά 1 MySQL + Γλώσσα Προγραμματισμού Ευαγγελία Πιτουρά 1 Database drivers Για να χρησιμοποιήσουμε μια βάση δεδομένων από μια γλώσσα προγραμματισμού χρειαζόμαστε έναν driver. JDBC είναι το API για τη Java και

Διαβάστε περισσότερα

Η SQL αποτελείται από δύο υποσύνολα, τη DDL και τη DML.

Η SQL αποτελείται από δύο υποσύνολα, τη DDL και τη DML. Κεφάλαιο 5 Η γλώσσα SQL 5.1 Εισαγωγή Η γλώσσα SQL (Structured Query Language) είναι η πιο διαδεδομένη διαλογική γλώσσα ερωταπαντήσεων που χρησιμοποιείται για την επικοινωνία του χρήστη με σχεσιακές ΒΔ.

Διαβάστε περισσότερα

Α. Ερωτήσεις Ανάπτυξης

Α. Ερωτήσεις Ανάπτυξης οµηµένος Προγραµµατισµός-Κεφάλαιο 7 Σελίδα 1 α ό 10 ΕΝΟΤΗΤΑ ΙΙΙ (ΠΡΟΓΡΑΜΜΑΤΑ) ΚΕΦΑΛΑΙΟ 7: Είδη, Τεχνικές και Περιβάλλοντα Προγραµµατισµού Α. Ερωτήσεις Ανάπτυξης 1. Τι ονοµάζουµε γλώσσα προγραµµατισµού;

Διαβάστε περισσότερα

Βάσεις Δεδομένων 2η εργαστηριακή άσκηση

Βάσεις Δεδομένων 2η εργαστηριακή άσκηση Βάσεις Δεδομένων 2η εργαστηριακή άσκηση Εισαγωγή στο περιβάλλον της oracle Δημιουργία πινάκων Δρ. Εύη Φαλιάγκα 1. Login Χρησιμοποιώντας έναν web explorer, μπαίνετε στο http://10.0.0.6:8080/apex και συμπληρώνετε

Διαβάστε περισσότερα

ΗΥ-360 Αρχεία και Βάσεις Δεδομένων Διδάσκων: Δ. Πλεξουσάκης. Φροντιστήριο SQL Examples Ξένου Ρουμπίνη

ΗΥ-360 Αρχεία και Βάσεις Δεδομένων Διδάσκων: Δ. Πλεξουσάκης. Φροντιστήριο SQL Examples Ξένου Ρουμπίνη ΗΥ-360 Αρχεία και Βάσεις Δεδομένων Διδάσκων: Δ. Πλεξουσάκης Φροντιστήριο SQL Examples Ξένου Ρουμπίνη 1 SQL-DDL Data Definition/Description Language (DDL): προσδιορίζουν τη δομή ή το σχήμα των δεδομένων.

Διαβάστε περισσότερα

Βάσεις Δεδομένων. Ενότητα 6: Γλώσσα Structured Query Language -SQL. Πασχαλίδης Δημοσθένης Τμήμα Ιερατικών σπουδών

Βάσεις Δεδομένων. Ενότητα 6: Γλώσσα Structured Query Language -SQL. Πασχαλίδης Δημοσθένης Τμήμα Ιερατικών σπουδών Βάσεις Δεδομένων Ενότητα 6: Γλώσσα Structured Query Language -SQL Πασχαλίδης Δημοσθένης Τμήμα Ιερατικών σπουδών Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για

Διαβάστε περισσότερα

10 η Διάλεξη Python Βάσεις δεδομένων στη python

10 η Διάλεξη Python Βάσεις δεδομένων στη python 10 η Διάλεξη Python Βάσεις δεδομένων στη python ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Η standard διεπαφη της python για βάσεις δεδομένων βασίζεται στο DB-API Python Database API υποστηρίζει ένα ευρύ φάσμα βάσεων δεδομένων

Διαβάστε περισσότερα

Διαδικτυακές Εφαρμογές Ενότητα 1: JPA

Διαδικτυακές Εφαρμογές Ενότητα 1: JPA Διαδικτυακές Εφαρμογές Ενότητα 1: JPA Μιχάλας Άγγελος Βούρκας Δημήτριος Τμήμα Μηχανικών Πληροφορικής ΤΕ Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό

Διαβάστε περισσότερα

Βάσεις Δεδομένων. Εισαγωγή για το Εργαστήριο. Δρ. Τιάκας Ελευθέριος. Τμήμα Πληροφορικής ΑΠΘ 2015-2016

Βάσεις Δεδομένων. Εισαγωγή για το Εργαστήριο. Δρ. Τιάκας Ελευθέριος. Τμήμα Πληροφορικής ΑΠΘ 2015-2016 Βάσεις Δεδομένων Εισαγωγή για το Εργαστήριο Δρ. Τιάκας Ελευθέριος Τμήμα Πληροφορικής ΑΠΘ 2015-2016 2 Βασικοί στόχοι Μερικοί βασικοί στόχοι του εργαστηρίου είναι: Η ικανότητα ανάλυσης των απαιτήσεων, κατασκευής

Διαβάστε περισσότερα

MEGASOFT ΤΜΗΜΑ ΥΠΟΣΤΗΡΙΞΗΣ. Οδηγός Ρυθµίσεων Συγχρονισµού PrismaWin Pos Sync

MEGASOFT ΤΜΗΜΑ ΥΠΟΣΤΗΡΙΞΗΣ. Οδηγός Ρυθµίσεων Συγχρονισµού PrismaWin Pos Sync MEGASOFT ΤΜΗΜΑ ΥΠΟΣΤΗΡΙΞΗΣ Οδηγός Ρυθµίσεων Συγχρονισµού PrismaWin Pos Sync Ρυθµίσεις Συγχρονισµού Pos Sync Η διαδικασία του συγχρονισµού γίνεται από τον Η/Υ που έχει το BackOffice. Βασική προϋπόθεση για

Διαβάστε περισσότερα

Σχήµα 6.1: Εισαγωγή της εντολής Read From Spreadsheet File στο Block Diagram.

Σχήµα 6.1: Εισαγωγή της εντολής Read From Spreadsheet File στο Block Diagram. Εισαγωγή αρχείων δεδοµένων 1. Η εισαγωγή αρχείων δεδοµένων στο LaVIEW γίνεται στο Block Diagram µε την εντολή Read From Spreadsheet File. 2. Εισάγουµε την εντολή Read From Spreadsheet File στο Block Diagram

Διαβάστε περισσότερα

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal 1 ο Μέρος σηµειώσεων (Ενότητες 8.1 & 8.2 σχολικού βιβλίου)

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal 1 ο Μέρος σηµειώσεων (Ενότητες 8.1 & 8.2 σχολικού βιβλίου) ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal 1 ο Μέρος σηµειώσεων (Ενότητες 8.1 & 8.2 σχολικού βιβλίου) 1. Εισαγωγή Χαρακτηριστικά της γλώσσας Τύποι δεδοµένων Γλώσσα προγραµµατισµού

Διαβάστε περισσότερα

Γνωριµία µε τη Microsoft Access

Γνωριµία µε τη Microsoft Access Γνωριµία µε τη Microsoft Access ηµιουργία νέας βάσης δεδοµένων Έναρξη - Προγράµµατα - Microsoft Access - ηµιουργία νέας βάσης δεδοµένων µε χρήση Κενής βάσης δεδοµένων - ΟΚ Επιλέγουµε Φάκελο και στο Όνοµα

Διαβάστε περισσότερα

A ΕΠΑ.Λ ΕΦΑΡΜΟΓΕΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 5 η ΕΝΟΤΗΤΑ: ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ. Εκπαιδευτικοί: ΓΑΛΑΝΟΣ ΓΕΩΡΓΙΟΣ ΜΠΟΥΣΟΥΝΗΣ ΚΩΝΣΤΑΝΤΙΝΟΣ

A ΕΠΑ.Λ ΕΦΑΡΜΟΓΕΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 5 η ΕΝΟΤΗΤΑ: ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ. Εκπαιδευτικοί: ΓΑΛΑΝΟΣ ΓΕΩΡΓΙΟΣ ΜΠΟΥΣΟΥΝΗΣ ΚΩΝΣΤΑΝΤΙΝΟΣ A ΕΠΑ.Λ ΕΦΑΡΜΟΓΕΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 5 η ΕΝΟΤΗΤΑ: ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Εκπαιδευτικοί: ΓΑΛΑΝΟΣ ΓΕΩΡΓΙΟΣ ΜΠΟΥΣΟΥΝΗΣ ΚΩΝΣΤΑΝΤΙΝΟΣ 1 Βάση Δεδομένων: Με το όρο Βάση Δεδομένων εννοούμε ένα σύνολο δεδομένων που είναι οργανωμένο

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ ΕΡΓΑΣΤΗΡΙΟ ΒΑΣΕΩΝ Ε ΟΜΕΝΩΝ ΜΕΡΟΣ ΤΡΙΤΟ Foreign key, Index, DML Ερωτήµατα Γιώργος Μαρκοµανώλης Περιεχόµενα Foreign Key... 1 Index... 4 DML Ερωτήµατα... 6 INSERT...

Διαβάστε περισσότερα

Γενικά. Σχήµα Ι: Επικοινωνία Client-Server, ExecuteCommand TuniConnection

Γενικά. Σχήµα Ι: Επικοινωνία Client-Server, ExecuteCommand TuniConnection ΕΚΤΕΛΕΣΗ ΕΡΓΑΣΙΩΝ ΣΤΟΝ SERVER (EXECUTE COMMAND) Γενικά Για την ανάπτυξη εφαρµογών που απαιτούν την εκτέλεση εργασιών στον Server που ορίζονται δυναµικά από µια επικοινωνία Client-Server ακολουθείται µια

Διαβάστε περισσότερα

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ. Ενότητα 1: Εισαγωγή στις Βάσεις Δεδομένων. Αθανάσιος Σπυριδάκος Διοίκηση Επιχειρήσεων

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ. Ενότητα 1: Εισαγωγή στις Βάσεις Δεδομένων. Αθανάσιος Σπυριδάκος Διοίκηση Επιχειρήσεων ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ενότητα 1: Εισαγωγή στις Βάσεις Δεδομένων Αθανάσιος Σπυριδάκος Διοίκηση Επιχειρήσεων Άδειες Χρήσης Το παρόν εκπαιδευτικό

Διαβάστε περισσότερα

ηµιουργία Β.. ανειστική Βιβλιοθήκη Μάθηµα 5 Ορισµός σχέσεων - Σύνδεση πινάκων

ηµιουργία Β.. ανειστική Βιβλιοθήκη Μάθηµα 5 Ορισµός σχέσεων - Σύνδεση πινάκων Μάθηµα 5 ηµιουργία Β.. ανειστική Βιβλιοθήκη - Ορισµός σχέσεων - Σύνδεση πινάκων ηµιουργία Β.. ανειστική Βιβλιοθήκη Η ανειστική Βιβλιοθήκη θα αποτελέσει ένα απλό, αλλά ολοκληρωµένο παράδειγµα δηµιουργίας

Διαβάστε περισσότερα

ΦΡΟΝΤΙΣΤΗΡΙΟ ΣΤΗ ΓΛΩΣΣΑ SQL

ΦΡΟΝΤΙΣΤΗΡΙΟ ΣΤΗ ΓΛΩΣΣΑ SQL ΗΥ360 - ΑΡΧΕΙΑ ΚΑΙ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ ΦΡΟΝΤΙΣΤΗΡΙΟ ΣΤΗ ΓΛΩΣΣΑ SQL ΛΙΛΙΤΣΗΣ ΠΡΟΔΡΟΜΟΣ ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ SQL - STRUCTURED QUERY LANGUAGE 2 Μια γλώσσα επερωτήσεων για τη διαχείριση Σχεσιακών Βάσεων

Διαβάστε περισσότερα

Ιατρική Πληροφορική. Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ.Ε.

Ιατρική Πληροφορική. Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ.Ε. Ιατρική Πληροφορική Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ.Ε. Χρήσιμοι Σύνδεσμοι Σημειώσεις μαθήματος: http://medisp.bme.teiath.gr/eclass/courses/tio103/ https://eclass.teiath.gr/courses/tio100/

Διαβάστε περισσότερα

9η Εργαστηριακή Άσκηση: Stored Procedures - Triggers. Αποθηκευμένες Διαδικασίες (Stored Procedures):

9η Εργαστηριακή Άσκηση: Stored Procedures - Triggers. Αποθηκευμένες Διαδικασίες (Stored Procedures): 9η Εργαστηριακή Άσκηση: Stored Procedures - Triggers Σκοπός της παρούσας εργαστηριακής άσκησης, είναι η εξοικείωση του σπουδαστή με τη δημιουργία αποθηκευμένων διαδικασιών (Stored Procedures) και σκανδάλης

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ Web Services

ΚΕΦΑΛΑΙΟ Web Services ΚΕΦΑΛΑΙΟ Web Services Προϋποθέσεις εγκατάστασης Web Services για το Κεφάλαιο 4.50 1. Κεφάλαιο έκδοση 4.51e build 458 ή νεότερο 2. Internet Information Server (IIS) version 6 ή νεότερος 3. Σε κάποιον υπολογιστή

Διαβάστε περισσότερα

Εισαγωγή στις Βάσεις εδοµένων και την Access

Εισαγωγή στις Βάσεις εδοµένων και την Access Μάθηµα 1 Εισαγωγή στις Βάσεις εδοµένων και την Access Τι είναι οι βάσεις δεδοµένων Μία βάση δεδοµένων (Β..) είναι µία οργανωµένη συλλογή πληροφοριών, οι οποίες είναι αποθηκευµένες σε κάποιο αποθηκευτικό

Διαβάστε περισσότερα

Το σχεσιακό μοντέλο βάσεων δεδομένων

Το σχεσιακό μοντέλο βάσεων δεδομένων ΕΣΔ232 Οργάνωση Δεδομένων στη Κοινωνία της Πληροφορίας Το σχεσιακό μοντέλο βάσεων δεδομένων Περιεχόμενα Περιεχόμενα - Βιβλιογραφία Ενότητας Εισαγωγή στο σχεσιακό μοντέλο Σχεσιακές γλώσσες ερωτημάτων Περιορισμοί

Διαβάστε περισσότερα

Εγκατάσταση. Εγκατάσταση του Wamp

Εγκατάσταση. Εγκατάσταση του Wamp Εγκατάσταση Εγκατάσταση του Wamp Η εγκατάσταση χωρίζεται σε δύο µέρη. Πρώτα θα εγκαταστήσουµε το Wamp, ώστε να µετατρέψουµε τον υπολογιστή µας σε Web Server και µετά θα εγκαταστήσουµε το Joomla. Η εγκατάσταση

Διαβάστε περισσότερα

Σχήµα 3.1: Εισαγωγή shift register σε βρόγχο for-loop.

Σχήµα 3.1: Εισαγωγή shift register σε βρόγχο for-loop. Η δοµή «Shift register» 1. Η δοµή «Shift register» εισάγεται στο βρόγχο for-loop αλλά και σε άλλους βρόγχους που θα δούµε στη συνέχεια, όπως ο βρόγχος «While loop». Ο τρόπος εισαγωγής και λειτουργίας της

Διαβάστε περισσότερα

ΗΜΙΟΥΡΓΙΑ ΙΣΤΟΣΕΛΙ ΑΣ ΣΤΟ MICROSOFT WORD

ΗΜΙΟΥΡΓΙΑ ΙΣΤΟΣΕΛΙ ΑΣ ΣΤΟ MICROSOFT WORD ΗΜΙΟΥΡΓΙΑ ΙΣΤΟΣΕΛΙ ΑΣ ΣΤΟ MICROSOFT WORD Σε ορισµένες περιπτώσεις είναι ιδιαίτερα χρήσιµη η δηµιουργία ιστοσελίδων ενηµερωτικού περιεχοµένου οι οποίες στη συνέχεια µπορούν να δηµοσιευθούν σε κάποιο τόπο

Διαβάστε περισσότερα

Η στοίβα (stack) H στοίβα είναι ένας αποθηκευτικός χώρος οργανωµένος κατά τέτοιο τρόπο ώστε να υποστηρίζει δύο βασικές λειτουργίες:

Η στοίβα (stack) H στοίβα είναι ένας αποθηκευτικός χώρος οργανωµένος κατά τέτοιο τρόπο ώστε να υποστηρίζει δύο βασικές λειτουργίες: Άσκηση 5Α_5 26/3/2003 11.5. Άσκηση 5A - [αναγνώριση αντικειµένων-διάγραµµα κλάσεων] [Σε αντικατάσταση της άσκησης 5 του κεφαλαίου 11] 11.5.1. Περιγραφή Η άσκηση αυτή είναι η πρώτη από µία σειρά ασκήσεων

Διαβάστε περισσότερα

Εργαστήριο Βάσεων Δεδομένων

Εργαστήριο Βάσεων Δεδομένων Εργαστήριο Βάσεων Δεδομένων Άσκηση 2 Σκοπός της άσκησης είναι: 1. Με δεδομένο το σχεσιακό διάγραμμα, η υλοποίηση μιας βάσης σε MySQL. 2. Η εισαγωγή δεδομένων στη βάση. Για το κείμενο των προδιαγραφών της

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ ΕΡΓΑΣΤΗΡΙΟ ΒΑΣΕΩΝ Ε ΟΜΕΝΩΝ ΜΕΡΟΣ ΕΥΤΕΡΟ ηµιουργία Βάσης, Πίνακα, Domain Γιώργος Μαρκοµανώλης Περιεχόµενα ηµιουργία Βάσης... 1 ηµιουργία µιας shadow βάσης... 2 ιαγραφή

Διαβάστε περισσότερα

Βάσεις Δεδομένων και Ευφυή Πληροφοριακά Συστήματα Επιχειρηματικότητας. 2 ο Μάθημα: Βασικά Θέματα Βάσεων Δεδομένων. Δρ. Κωνσταντίνος Χ.

Βάσεις Δεδομένων και Ευφυή Πληροφοριακά Συστήματα Επιχειρηματικότητας. 2 ο Μάθημα: Βασικά Θέματα Βάσεων Δεδομένων. Δρ. Κωνσταντίνος Χ. Βάσεις Δεδομένων και Ευφυή Πληροφοριακά Συστήματα Επιχειρηματικότητας 2 ο Μάθημα: Βασικά Θέματα Βάσεων Δεδομένων Δρ. Κωνσταντίνος Χ. Γιωτόπουλος Βασικά θέματα Βάσεων Δεδομένων Ένα Σύστημα Βάσης Δεδομένων

Διαβάστε περισσότερα

ΤΕΙ ΚΑΒΑΛΑΣ. Πτυχιακή εργασία ΕΙΣΑΓΩΓΗ. Μιλτιάδης Κακλαμάνης

ΤΕΙ ΚΑΒΑΛΑΣ. Πτυχιακή εργασία ΕΙΣΑΓΩΓΗ. Μιλτιάδης Κακλαμάνης Σελίδα 1από ΤΕΙ ΚΑΒΑΛΑΣ Πτυχιακή εργασία Δικτυακή Εφαρμογή διαχείρισης ηλεκτρονικών εγγράφων υπηρεσίας. ΕΙΣΑΓΩΓΗ Μιλτιάδης Κακλαμάνης Σελίδα 2από Κατάλογος περιεχομένων ΕΙΣΑΓΩΓΗ...1 Σχετιζόμενα πρόσωπα...3

Διαβάστε περισσότερα

ΦΡΟΝΤΙΣΤΗΡΙΟ ΣΤΗ ΓΛΩΣΣΑ SQL

ΦΡΟΝΤΙΣΤΗΡΙΟ ΣΤΗ ΓΛΩΣΣΑ SQL ΓΙΑΝΝΗΣ ΑΓΑΘΑΓΓΕΛΟΣ ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΗΥ360 - ΑΡΧΕΙΑ ΚΑΙ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ ΦΡΟΝΤΙΣΤΗΡΙΟ ΣΤΗ ΓΛΩΣΣΑ SQL SQL SQL - STRUCTURED QUERY LANGUAGE 2 Μια γλώσσα επερωτήσεων για τη διαχείριση Σχεσιακών

Διαβάστε περισσότερα

Αρχιτεκτονική Συστημάτων Βάσεων Δεδομένων. Κατηγορίες χρηστών ΣΔΒΔ Αρχιτεκτονική ANSI/SPARC Γλώσσες ερωτημάτων Μοντέλα δεδομένων Λειτουργίες ΣΔΒΔ

Αρχιτεκτονική Συστημάτων Βάσεων Δεδομένων. Κατηγορίες χρηστών ΣΔΒΔ Αρχιτεκτονική ANSI/SPARC Γλώσσες ερωτημάτων Μοντέλα δεδομένων Λειτουργίες ΣΔΒΔ Αρχιτεκτονική Συστημάτων Βάσεων Δεδομένων Κατηγορίες χρηστών ΣΔΒΔ Αρχιτεκτονική ANSI/SPARC Γλώσσες ερωτημάτων Μοντέλα δεδομένων Λειτουργίες ΣΔΒΔ Χρήστες ΣΔΒΔ Απλοί Χρήστες: συγκεκριμένες λειτουργίες σε

Διαβάστε περισσότερα

Εργαστήριο Βάσεων Δεδομένων

Εργαστήριο Βάσεων Δεδομένων Εργαστήριο Βάσεων Δεδομένων Άσκηση 2 Σκοπός της άσκησης είναι: 1. Με δεδομένο το σχεσιακό διάγραμμα, η υλοποίηση μιας βάσης σε MySQL. 2. Η εισαγωγή δεδομένων στη βάση. 3. Η υλοποίηση απλών ερωτημάτων mysql

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ ΕΡΓΑΣΤΗΡΙΟ ΒΑΣΕΩΝ Ε ΟΜΕΝΩΝ ΜΕΡΟΣ ΠΕΜΠΤΟ Views, Triggers Γιώργος Μαρκοµανώλης Περιεχόµενα Όψη... 1 ηµιουργία όψης... 2 Επιλογή CHECK... 3 Όψεις µόνο για εµφάνιση

Διαβάστε περισσότερα

Διαχείριση Πολιτισμικών Δεδομένων

Διαχείριση Πολιτισμικών Δεδομένων Διαχείριση Πολιτισμικών Δεδομένων Μάθημα 1 Εισαγωγή στις Βάσεις Δεδομένων Τζανέτος Πομόνης ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Συντήρησης Πολιτισμικής Κληρονομιάς Τι είναι οι Βάσεις

Διαβάστε περισσότερα

Βάσεις Δεδομένων και Ευφυή Πληροφοριακά Συστήματα Επιχειρηματικότητας. 3ο Μάθημα: Εισαγωγή στην SQL. Δρ. Κωνσταντίνος Χ.

Βάσεις Δεδομένων και Ευφυή Πληροφοριακά Συστήματα Επιχειρηματικότητας. 3ο Μάθημα: Εισαγωγή στην SQL. Δρ. Κωνσταντίνος Χ. Βάσεις Δεδομένων και Ευφυή Πληροφοριακά Συστήματα Επιχειρηματικότητας 3ο Μάθημα: Εισαγωγή στην SQL Δρ. Κωνσταντίνος Χ. Γιωτόπουλος SQL Background SQL Structured Query Language Standard query γλώσσα για

Διαβάστε περισσότερα

Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού

Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού ( Απαντήσεις & Λύσεις Βιβλίου) 1. Σκοποί κεφαλαίου Κύκλος ανάπτυξης προγράµµατος Κατηγορίες γλωσσών προγραµµατισµού

Διαβάστε περισσότερα

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ (Οι ερωτήσεις µε κίτρινη υπογράµµιση είναι εκτός ύλης για φέτος) ΕΙΣΑΓΩΓΗ Q1. Οι Πρωταρχικοί τύποι (primitive types) στη Java 1. Είναι όλοι οι ακέραιοι και όλοι οι πραγµατικοί

Διαβάστε περισσότερα

Εργαστήριο #10 (Ε10) 1

Εργαστήριο #10 (Ε10) 1 Εργαστήριο #10 Από τα προηγούμενα εργαστήρια......θα χρειαστείτε ορισμένες από τις οδηγίες μορφοποίησης CSS (ανατρέξτε στις εκφωνήσεις του 8 ου και 9 ου εργαστηρίου).! Οδηγίες Στη δυναμική δημιουργία ιστοσελίδων

Διαβάστε περισσότερα

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal Δοµή προγράµµατος 1. Δοµή προγράµµατος program όνοµα_προγράµµατος(αρχείο_1, αρχείο_2,...αρχείο_ν); ΕΠΙΚΕΦΑΛΙΔΑ ΒΙΒΛΙΟΘΗΚΕΣ uses όνοµα_βιβλιοθήκης,όνοµα_βιβλιοθήκης;

Διαβάστε περισσότερα

Αποθηκευμένες Διαδικασίες Stored Routines (Procedures & Functions)

Αποθηκευμένες Διαδικασίες Stored Routines (Procedures & Functions) Αποθηκευμένες Διαδικασίες Stored Routines (Procedures & Functions) Αυγερινός Αραμπατζής avi@ee.duth.gr www.aviarampatzis.com Βάσεις Δεδομένων Stored Procedures 1 Stored Routines (1/2) Τμήματα κώδικα τα

Διαβάστε περισσότερα

Εργαστήριο Ανάπτυξης Εφαρμογών Βάσεων Δεδομένων. Εξάμηνο 7 ο

Εργαστήριο Ανάπτυξης Εφαρμογών Βάσεων Δεδομένων. Εξάμηνο 7 ο Εργαστήριο Ανάπτυξης Εφαρμογών Βάσεων Δεδομένων Εξάμηνο 7 ο JDBC JDBC is a set of classes and interfaces written in Java that allows Java programs to send SQL statements to a database like Oracle JDBC

Διαβάστε περισσότερα

Κεφάλαιο 10 ο Υποπρογράµµατα

Κεφάλαιο 10 ο Υποπρογράµµατα Κεφάλαιο 10 ο Υποπρογράµµατα Ανάπτυξη Εφαρµογών σε Προγραµµατιστικό Περιβάλλον Η αντιµετώπιση των σύνθετων προβληµάτων και η ανάπτυξη των αντίστοιχων προγραµµάτων µπορεί να γίνει µε την ιεραρχική σχεδίαση,

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ - ΤΜΗΥΠ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ - ΤΜΗΥΠ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ - ΤΜΗΥΠ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι Β. Μεγαλοοικονόμου, Δ. Χριστοδουλάκης Εισαγωγή στις Βάσεις Δεδομένων Ακ.Έτος 2008-09 (μεβάσητιςσημειώσειςτωνsilberchatz, Korth και Sudarshan) Εισαγωγή Γιατί

Διαβάστε περισσότερα

Οδηγίες Χρήσης της MySQL

Οδηγίες Χρήσης της MySQL ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΣΗΜΕΙΩΣΕΙΣ ΣΕ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Οδηγίες Χρήσης της MySQL Διδάσκων: Γιάννης Θεοδωρίδης Συντάκτης Κειμένου: Βαγγέλης Κατσικάρος Απρίλιος 2007 1 Περιεχόμενα Εισαγωγή...2

Διαβάστε περισσότερα

ΗΓλώσσαSQL. Εισαγωγή Βασικές Έννοιες Τύποι Δεδομένων Ορισμός Δεδομένων Χειρισμός Δεδομένων

ΗΓλώσσαSQL. Εισαγωγή Βασικές Έννοιες Τύποι Δεδομένων Ορισμός Δεδομένων Χειρισμός Δεδομένων ΗΓλώσσαSQL Εισαγωγή Βασικές Έννοιες Τύποι Δεδομένων Ορισμός Δεδομένων Χειρισμός Δεδομένων Εισαγωγή Η δομημένη γλώσσα ερωτημάτων SQL (Structured Query Language) χρησιμοποιείται για τους χρήστες του ΣΔΒΔ

Διαβάστε περισσότερα

Συγκριτικά Πλεονεκτήµατα Γραµµατείας 2003 έναντι Γραµµατείας 2.5

Συγκριτικά Πλεονεκτήµατα Γραµµατείας 2003 έναντι Γραµµατείας 2.5 Συγκριτικά Πλεονεκτήµατα Γραµµατείας 2003 έναντι Γραµµατείας 2.5 ιαφορετική αρχιτεκτονική: Κοινή βάση δεδοµένων, υνατότητες διασύνδεσης διαφορετικών συστηµάτων Η ανάγκη για την βελτίωση της ποιότητας των

Διαβάστε περισσότερα

ΥΠΗΡΕΣΙΑ WEBMAIL ΚΥΠΕΣ

ΥΠΗΡΕΣΙΑ WEBMAIL ΚΥΠΕΣ ΥΠΗΡΕΣΙΑ WEBMAIL ΚΥΠΕΣ Η υπηρεσία διαχείρισης αλληλογραφίας µέσω web (webmail) δίνει την δυνατότητα στους χρήστες να διαχειριστούν την αλληλογραφία τους απ οποιοδήποτε σηµείο βρίσκονται εφόσον υπάρχει

Διαβάστε περισσότερα

Σύντοµες οδηγίες χρήσης atube Catcher

Σύντοµες οδηγίες χρήσης atube Catcher Σύντοµες οδηγίες χρήσης atube Catcher ελλατόλας Στέλιος 2 ο Ε.Κ.Φ.Ε. Ηρακλείου Κρήτης Περιεχόµενα Εγκατάσταση του προγράµµατος...4 Λειτουργία του προγράµµατος...6 Βασική λειτουργία (κατέβασµα ένα - ένα

Διαβάστε περισσότερα

Οδηγίες Χρήσης της MySQL

Οδηγίες Χρήσης της MySQL ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΣΗΜΕΙΩΣΕΙΣ ΣΕ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Οδηγίες Χρήσης της MySQL Διδάσκων: Γιάννης Θεοδωρίδης Συντάκτης Κειμένου: Βαγγέλης Κατσικάρος Νοέμβριος 2007 1 Περιεχόμενα Εισαγωγή...2

Διαβάστε περισσότερα

Εισαγωγή Mια από τις βασικές λειτουργίες ενός σχεσιακού συστήµατος διαχείρισης βάσεων δεδοµένων είναι η διαχείριση του πληροφοριακού περιεχοµένου που

Εισαγωγή Mια από τις βασικές λειτουργίες ενός σχεσιακού συστήµατος διαχείρισης βάσεων δεδοµένων είναι η διαχείριση του πληροφοριακού περιεχοµένου που ΤΕΙ ΑΘΗΝΩΝ ΣΧΟΛΗ Σ Ο ΤΜΗΜΑ ΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ ΧΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ 2009-2010 Η/Υ ΙΙΙ ΒΑΣΕΙΣ Ε ΟΜΕΝΩΝ (Θεωρία) ΜΑΘΗΜΑ 4ο Η γλώσσα βάσεων δεδοµένων SQL, η γλώσσα QBE. Αθανασίου Ειρήνη, MSc 1 Εισαγωγή Mια

Διαβάστε περισσότερα

ΤΜΗΜΑ ΕΠΙΧΕΙΡΗΜΑΤΙΚΟΥ ΣΧΕΔΙΑΣΜΟΥ & ΠΛΗΡΟΦΟΡΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ ΤΕΙ ΠΑΤΡΑΣ ΤΕΙ ΠΑΤΡΑΣ ΣΗΜΕΙΩΣΕΙΣ ΜΑΘΗΜΑΤΟΣ ΕΠΙΧΕΙΡΗΣΙΑΚΏΝ ΠΑΙΓΝΙΩΝ- ΠΡΟΓΡΑΜΜΑ GAMBIT

ΤΜΗΜΑ ΕΠΙΧΕΙΡΗΜΑΤΙΚΟΥ ΣΧΕΔΙΑΣΜΟΥ & ΠΛΗΡΟΦΟΡΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ ΤΕΙ ΠΑΤΡΑΣ ΤΕΙ ΠΑΤΡΑΣ ΣΗΜΕΙΩΣΕΙΣ ΜΑΘΗΜΑΤΟΣ ΕΠΙΧΕΙΡΗΣΙΑΚΏΝ ΠΑΙΓΝΙΩΝ- ΠΡΟΓΡΑΜΜΑ GAMBIT ΤΜΗΜΑ ΕΠΙΧΕΙΡΗΜΑΤΙΚΟΥ ΣΧΕΔΙΑΣΜΟΥ & ΠΛΗΡΟΦΟΡΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ Α Κ Α Η Μ Α Ι Κ Ο Ε Τ Ο Σ 2 0 1 1-2 0 1 2 ΣΗΜΕΙΩΣΕΙΣ ΜΑΘΗΜΑΤΟΣ ΕΠΙΧΕΙΡΗΣΙΑΚΏΝ ΠΑΙΓΝΙΩΝ- ΠΡΟΓΡΑΜΜΑ GAMBIT Ο συγκεκριµένος οδηγός για το πρόγραµµα

Διαβάστε περισσότερα

Ορισµοί Σχεσιακού Μοντέλου και Τροποποιήσεις Σχέσεων σε SQL

Ορισµοί Σχεσιακού Μοντέλου και Τροποποιήσεις Σχέσεων σε SQL Ορισµοί Σχεσιακού Μοντέλου και Τροποποιήσεις Σχέσεων σε SQL Βάσεις εδοµένων 2012-2013 Ευαγγελία Πιτουρά 1 Εισαγωγή Μοντελοποίηση Στα προηγούμενα μαθήματα: Εννοιολογικός Σχεδιασμός Βάσεων Δεδομένων (με

Διαβάστε περισσότερα

Κλάσεις και Αντικείµενα

Κλάσεις και Αντικείµενα Κλάσεις και Αντικείµενα Γρηγόρης Τσουµάκας Τµήµα Πληροφορικής, Αριστοτέλειο Πανεπιστήµιο Θεσσαλονίκης Κλάσεις και Αντικείµενα 2 Τα αντικείµενα σε µια αντικειµενοστρεφή γλώσσα προγραµµατισµού, µοντελοποιούν

Διαβάστε περισσότερα

Επαναληπτικό ιαγώνισµα Πληροφορικής Γ Γυµνασίου Γιώργος Λιακέας Σχολικός Σύµβουλος Πληροφορικής Ερωτήσεις

Επαναληπτικό ιαγώνισµα Πληροφορικής Γ Γυµνασίου Γιώργος Λιακέας Σχολικός Σύµβουλος Πληροφορικής Ερωτήσεις Επαναληπτικό ιαγώνισµα Πληροφορικής Γ Γυµνασίου (νέο βιβλίο Πληροφορικής Γυµνασίου Αράπογλου, Μαβόγλου, Οικονοµάκου, Φύτρου) Γιώργος Λιακέας Σχολικός Σύµβουλος Πληροφορικής Ερωτήσεις 1. Τι είναι ο Αλγόριθµος;

Διαβάστε περισσότερα

Κεφάλαιο 5. Δημιουργία φορμών για τη βάση δεδομένων DVDclub

Κεφάλαιο 5. Δημιουργία φορμών για τη βάση δεδομένων DVDclub Κεφάλαιο 5. Δημιουργία φορμών για τη βάση δεδομένων DVDclub Σύνοψη Σ αυτό το κεφάλαιο θα περιγράψουμε τη δημιουργία φορμών, προκειμένου να εισάγουμε δεδομένα και να εμφανίζουμε στοιχεία από τους πίνακες

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ - ΤΜΗΥΠ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ - ΤΜΗΥΠ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ - ΤΜΗΥΠ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι Β. Μεγαλοοικονόμου, Δ. Χριστοδουλάκης Σχεσιακό Μοντέλο SQL- Μέρος Β Ακ.Έτος 2008-09 (μεβάσητιςσημειώσειςτωνsilberchatz, Korth και Sudarshan και του C. Faloutsos

Διαβάστε περισσότερα

Συστήματα Διαχείρισης Βάσεων Δεδομένων

Συστήματα Διαχείρισης Βάσεων Δεδομένων ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ Συστήματα Διαχείρισης Βάσεων Δεδομένων Νικόλαος Ζ. Ζάχαρης Τι είναι μια Βάση Δεδομένων Είναι

Διαβάστε περισσότερα

Το Ηλεκτρονικό Ταχυδροµείο (e-mail) είναι ένα σύστηµα που δίνει την δυνατότητα στον χρήστη να ανταλλάξει µηνύµατα αλλά και αρχεία µε κάποιον άλλο

Το Ηλεκτρονικό Ταχυδροµείο (e-mail) είναι ένα σύστηµα που δίνει την δυνατότητα στον χρήστη να ανταλλάξει µηνύµατα αλλά και αρχεία µε κάποιον άλλο Το Ηλεκτρονικό Ταχυδροµείο (e-mail) είναι ένα σύστηµα που δίνει την δυνατότητα στον χρήστη να ανταλλάξει µηνύµατα αλλά και αρχεία µε κάποιον άλλο χρήστη µέσω υπολογιστή άνετα γρήγορα και φτηνά. Για να

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 6 - ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

ΚΕΦΑΛΑΙΟ 6 - ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΚΕΦΑΛΑΙΟ 6 - ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Προγραµµατισµός Η/Υ Ο προγραµµατισµός είναι η διατύπωση του αλγορίθµου σε µορφή κατανοητή από τον Η/Υ ώστε να τον εκτελέσει («τρέξει» όπως λέµε στην ορολογία της

Διαβάστε περισσότερα

Σύστημα Αναθέσεων. Σχεδιασμός Υποσυστημάτων

Σύστημα Αναθέσεων. Σχεδιασμός Υποσυστημάτων Unified IT services Αγ. Παρασκευής 67 15234 Χαλάνδρι http://www.uit.gr Σύστημα Αναθέσεων Σχεδιασμός Υποσυστημάτων ΕΛΛΑΚ Ημερομηνία: 7/12/2010 UIT Χαλάνδρι Αγ. Παρασκευής 67 15234 210 6835289 Unified Information

Διαβάστε περισσότερα

Lecture 12: SQL DDL I

Lecture 12: SQL DDL I Department of Computer Science University of Cyprus EPL342 Databases Lecture 12: SQL DDL I SQL Data Definition Language (Chapter 6.1, Elmasri-Navathe 7ED) + ΤransactSQL Reference Guide http://msdn.microsoft.com/en-us/library/bb510741.aspx

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ.

ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ Εισαγωγή στη MySQL Νικόλαος Ζ. Ζάχαρης Τι είναι η MySql Είναι ένα Σχεσιακό Σύστημα Διαχείρισης

Διαβάστε περισσότερα

C: Από τη Θεωρία στην Εφαρµογή 2 ο Κεφάλαιο

C: Από τη Θεωρία στην Εφαρµογή 2 ο Κεφάλαιο C: Από τη Θεωρία στην Εφαρµογή Κεφάλαιο 2 ο Τύποι Δεδοµένων Δήλωση Μεταβλητών Έξοδος Δεδοµένων Γ. Σ. Τσελίκης Ν. Δ. Τσελίκας Μνήµη και Μεταβλητές Σχέση Μνήµης Υπολογιστή και Μεταβλητών Η µνήµη (RAM) ενός

Διαβάστε περισσότερα

Αναλυτικές λειτουργίες ΣΓΠ

Αναλυτικές λειτουργίες ΣΓΠ Αναλυτικές λειτουργίες ΣΓΠ Γενικά ερωτήµατα στα οποία απαντά ένα ΣΓΠ Εντοπισµού (locaton) Ιδιότητας (condton) Τάσεων (trend) ιαδροµών (routng) Μορφών ή προτύπων (pattern) Και µοντέλων (modellng) παραδείγµατα

Διαβάστε περισσότερα

Query-by-Example (QBE)

Query-by-Example (QBE) Φροντιστήριο 8 o Χειµερινό Εξάµηνο 2009-10 Τµήµα Μηχανικών Η/Υ και Πληροφορικής Πολυτεχνική Σχολή, Πανεπιστήµιο Πατρών Πέµπτη, 3 εκεµβρίου 2009 Τι είναι η QBE; Γλώσσα επερωτήσεων σε σχεσιακές ϐάσεις δεδοµένων

Διαβάστε περισσότερα

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι Ενότητα 3:

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι Ενότητα 3: Ενότητα 3: Σχεσιακό Μοντέλο. Από το ιδεατό στο λογικό (σχεσιακό) μοντέλο. Από το λογικό στο φυσικό (SQL) μοντέλο Ευαγγελίδης Γεώργιος Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης

Διαβάστε περισσότερα

PHP/MySQL και Project

PHP/MySQL και Project PHP/MySQL και Project Μια απλή διαδικτυακή εφαρμογή Γεώργιος Ευαγγελίδης Τμήμα Εφαρμοσμένης Πληροφορικής Σχολή Επιστημών Πληροφορίας Πανεπιστήμιο Μακεδονίας Περιεχόμενα PHP (Middle tier) Διαδικτυακές εφαρμογές

Διαβάστε περισσότερα

Θέματα Προγραμματισμού Διαδικτύου ~ MySQL & PHP ~

Θέματα Προγραμματισμού Διαδικτύου ~ MySQL & PHP ~ Θέματα Προγραμματισμού Διαδικτύου ~ MySQL & PHP ~ Στελιος Σφακιανάκης Εαρινό 2019 Αυτή η εργασία χορηγείται με άδεια Creative Commons Αναφορά Δημιουργού - Μη Εμπορική Χρήση - Παρόμοια Διανομή 1 Ροή Δεδομένων

Διαβάστε περισσότερα

ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ CLIENT-SERVER ΣΥΣΤΗΜΑ ΙΑΧΕΙΡΙΣΗΣ ΒΙΒΛΙΟΘΗΚΗΣ

ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ CLIENT-SERVER ΣΥΣΤΗΜΑ ΙΑΧΕΙΡΙΣΗΣ ΒΙΒΛΙΟΘΗΚΗΣ ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ CLIENT-SERVER ΣΥΣΤΗΜΑ ΙΑΧΕΙΡΙΣΗΣ ΒΙΒΛΙΟΘΗΚΗΣ ΓΙΑΝΝΗΣ ΦΙΛΙΠΠΙ ΗΣ ΑΕΜ 361 Επιβλέπων: ιονύσιος Πολίτης

Διαβάστε περισσότερα

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΙΜΕΛΕΙΑ: ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΘΕΩΡΙΑ 6 ΟΥ ΚΕΦΑΛΑΙΟΥ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ 6.1 Τι ονοµάζουµε πρόγραµµα υπολογιστή; Ένα πρόγραµµα

Διαβάστε περισσότερα

Στην συνέχεια και στο επόµενο παράθυρο η εφαρµογή µας ζητάει να εισάγουµε το Username και το Password το οποίο σας έχει δοθεί από τον ΕΛΚΕ.

Στην συνέχεια και στο επόµενο παράθυρο η εφαρµογή µας ζητάει να εισάγουµε το Username και το Password το οποίο σας έχει δοθεί από τον ΕΛΚΕ. 1. Πρόσβαση Οδηγίες προγράµµατος διαχείρισης ανάλυσης χρόνου εργασίας (Time Sheet) Για να ξεκινήσετε την εφαρµογή, από την κεντρική σελίδα του ΕΛΚΕ (www.elke.aua.gr) και το µενού «ιαχείριση», Time Sheet

Διαβάστε περισσότερα

Έννοιες Διαχείρισης Βάσεων Δεδομένων και Αρχιτεκτονική

Έννοιες Διαχείρισης Βάσεων Δεδομένων και Αρχιτεκτονική Έννοιες Διαχείρισης Βάσεων Δεδομένων και Αρχιτεκτονική Αρχιτεκτονική ANSI-SPARC, Επίπεδα Αρχιτεκτονικής (Εξωτερικό, Εννοιολογικό, Εσωτερικό), Παραδοσιακή Προσέγγιση (Μειονεκτήματα, Παράδειγμα), Προσέγγιση

Διαβάστε περισσότερα

Επαναληπτικές δοµές. µτ α.τ. Όχι. ! απαγορεύεται µέσα σε µία ΓΙΑ να µεταβάλλουµε τον µετρητή! διότι δεν θα ξέρουµε µετά πόσες επαναλήψεις θα γίνουν

Επαναληπτικές δοµές. µτ α.τ. Όχι. ! απαγορεύεται µέσα σε µία ΓΙΑ να µεταβάλλουµε τον µετρητή! διότι δεν θα ξέρουµε µετά πόσες επαναλήψεις θα γίνουν Επαναληπτικές δοµές Η λογική των επαναληπτικών διαδικασιών εφαρµόζεται όπου µία ακολουθία εντολών εφαρµόζεται σε ένα σύνολο περιπτώσεων που έχουν κάτι κοινό. Όταν ψάχνουµε θέση για να παρκάρουµε κοντά

Διαβάστε περισσότερα

ΕΘΝΙΚΟ ΚΑΙ ΚΑΠΟΔΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΠΡΟΓΡΑΜΜΑ ΜΕΤΑΠΤΥΧΙΑΚΩΝ ΣΠΟΥΔΩΝ

ΕΘΝΙΚΟ ΚΑΙ ΚΑΠΟΔΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΠΡΟΓΡΑΜΜΑ ΜΕΤΑΠΤΥΧΙΑΚΩΝ ΣΠΟΥΔΩΝ ΕΘΝΙΚΟ ΚΑΙ ΚΑΠΟΔΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΠΡΟΓΡΑΜΜΑ ΜΕΤΑΠΤΥΧΙΑΚΩΝ ΣΠΟΥΔΩΝ Οδηγός Εργαστηρίου για το Μεταπτυχιακό Μάθημα Τεχνολογία Διοίκησης

Διαβάστε περισσότερα

Επιµέλεια Θοδωρής Πιερράτος

Επιµέλεια Θοδωρής Πιερράτος Εισαγωγή στον προγραµµατισµό Η έννοια του προγράµµατος Ο προγραµµατισµός ασχολείται µε τη δηµιουργία του προγράµµατος, δηλαδή του συνόλου εντολών που πρέπει να δοθούν στον υπολογιστή ώστε να υλοποιηθεί

Διαβάστε περισσότερα

Πληροφοριακά Συστήµατα

Πληροφοριακά Συστήµατα Nell Dale John Lewis Chapter 12 Πληροφοριακά Συστήµατα Στόχοι Ενότητας Η κατανόηση της έννοιας «Πληροφοριακό Σύστηµα» Επεξήγηση της οργάνωσης λογιστικών φύλλων (spreadsheets) Επεξήγηση της ανάλυσης δεδοµένων

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 7 ΕΙ Η, ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

ΚΕΦΑΛΑΙΟ 7 ΕΙ Η, ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΚΕΦΑΛΑΙΟ 7 ΕΙ Η, ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ 7.1. Ανάπτυξη Προγράµµατος Τι είναι το Πρόγραµµα; Το Πρόγραµµα: Είναι ένα σύνολο εντολών για την εκτέλεση ορισµένων λειτουργιών από τον υπολογιστή.

Διαβάστε περισσότερα

Outlook Express-User Instructions.doc 1

Outlook Express-User Instructions.doc 1 Οδηγίες προς τους υπαλλήλους του ήµου Θεσσαλονίκης για την διαχείριση της ηλεκτρονικής τους αλληλογραφίας µε το Outlook Express (Ver 1.0 22-3-2011) (Για οποιοδήποτε πρόβληµα ή απορία επικοινωνήστε µε τον

Διαβάστε περισσότερα