Ανάπτυξη Διαδικτυακών Τόπων. Τεχνολογία JDBC

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

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

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

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

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

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

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

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

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

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

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

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

Προγραμματισμός Παγκόσμιου Ιστού

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

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

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

NetBeans και σχετικά προγράμματα. Κακαρόντζας Γεώργιος Κέντρο Αριστείας Ανοιχτού Λογισμικού ΑΠΘ 1ο Θερινό Σχολείο Κώδικα

Μιχάλης Μασούρας Επιβλέπων Καθηγητής: Ιγνάτιος Δεληγιάννης

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

Ανάπτυξη διαδικτυακών εφαρμογών με την Python Το εργαλείο Flask

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

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

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )

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

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

alpha Language age (3/5) alpha Language Φροντιστήριο Syntax Directed Translation and

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

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

Συστήματα Διαχείρισης Βάσεων Δεδομένων (ΗΥ460) Χειμερινό εξάμηνο 2017

Ακεραιότητα και Ασφάλεια Μέρος 1 Σχεδιασμός Βάσεων Δεδομένων

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

Εργαστήριο Βάσεων Δεδομένων. Δικαιώματα Χρηστών Προβολές

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

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

Πανεπιστήµιο Ιωαννίνων Τµήµα Μαθηµατικών Μάθηµα: Βάσεις εδοµένων (741) Εργαστηριακό Τεστ Οµάδα: Α 18/11/2004

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Βάσεις Δεδομένων (4 ο εξάμηνο) Εργαστήριο MySQL #2

Σχεδιασμός Πληροφοριακών Συστημάτων. Σημειώσεις

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

Αποτελεί ισχυρό εργαλείο, µε υψηλή απόδοση & αποτελεσµατικότητα.

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

Οι εντολές CREATE TABLE, ALTER TABLE, CREATE KEY, ALTER KEY.

2 η Εργαστηριακή Άσκηση

Οι εντολές CREATE TABLE, ALTER TABLE, CREATE KEY, ALTER KEY.

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

Ενεργές ΒΔ. Παύλος Εφραιμίδης pefraimi <at> ee.duth.gr. Βάσεις Δεδομένων Ενεργές ΒΔ 1

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

ΚΕΡΑΜΟΠΟΥΛΟΣ ΕΥΚΛΕΙΔΗΣ

PHPMyAdmin: Σύντομος οδηγός για αρχάριους

SQL Τύποι Δεδομένων Δημιουργία Πίνακα Παράδειγμα.. Εργαστήριο Βάσεων Δεδομένων. Εισαγωγή στη MySQL (1)

, Evaluation of a library against injection attacks

Εισαγωγή στην πληροφορική

Βάσεις Δεδομένων ΗγλώσσαSQL (Structured Query Language)

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

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

Βάσεις Δεδομένων. Βασίλειος Βεσκούκης Εισαγωγή στη γλώσσα SQL (Structured Query Language) Η γλώσσα SQL

Διαδικτυακές Εφαρμογές. Ενότητα 2: Enterprise Java Beans και Java Server Faces Μιχάλας Άγγελος Βούρκας Δημήτριος Τμήμα Μηχανικών Πληροφορικής ΤΕ

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

Βάσεις Δεδομένων Η γλώσσα SQL (Structured Query Language) Εισαγωγή στην SQL (2) Ιστορικά Στοιχεία. SQL - Structured Query Language (1)

Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου 8 η Διάλεξη: Προγραμματισμός στην πλευρά του εξυπηρετητή: Τεχνολογία Java Server Pages (JSP)

Βάσεις Περιβαλλοντικών Δεδομένων

Ηλεκτρονικοί Υπολογιστές II

Παράδειγμα Insert Update Delete Alter.. Εργαστήριο Βάσεων Δεδομένων. Εισαγωγή στη MySQL (2)

PL/SQL. Κώστας Στεφανίδης

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #2

Τμήμα Διοίκησης Επιχειρήσεων

Β. Εισαγωγή στον Προγραμματισμό Η/Υ με την JavaScript

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

5 η Διάλεξη Python - Αρχεία

Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

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

ΕΝΑΥΣΜΑΤΑ ΣΤΗΝ POSTGRES

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring

Αντικειμενοστρεφής Προγραμματισμός

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

ΚΕΡΑΜΟΠΟΥΛΟΣ ΕΥΚΛΕΙΔΗΣ

Κεφάλαιο 1. Βασικά Στοιχεία της Java... 13

Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6

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

Βάσεις Δεδομένων Ι SQL Μέρος 3 ο. (Constraints & Joins) Φώτης Κόκκορας (MSc/PhD) Τμήμα Μηχανικών Πληροφορικής ΤΕ

2. Εισαγωγή Δεδομένων σε Σχεσιακή Βάση Δεδομένων

Περιγραφή του EcoTruck

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

Ανοικτά Ακαδημαϊκά Μαθήματα

Βασικά Στοιχεία της Java

IBM DB2, Microsoft SQL Server. Εαρινό Εξάμηνο

ΚΕΦΑΛΑΙΟ ΤΡΙΤΟ ΕΝΤΟΛΕΣ SQL

PHP/MySQL και Project

PostgreSQL. Oracle. Εαρινό Εξάμηνο

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

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

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Τεχνολογία Πολιτισμικού Λογισμικού

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

Τεχνολογία Πολιτισμικού Λογισμικού

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

Γιάννης Σαμωνάκης. 1 ο ΣΧΟΛΕΙΟ ΚΩΔΙΚΑ «Βασικά Θέματα Προγραμματισμού στην Ανάπτυξη Δυναμικών Διαδικτυακών Εφαρμογών» (Part 4 - PHP)

Απλές Δοµές Δεδοµένων Στην ενότητα αυτή θα γνωρίσουµε ορισµένες απλές Δοµές Δεδοµένων και θα τις χρησιµοποιήσουµε για την αποδοτική επίλυση του προβλή

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

Transcript:

Ανάπτυξη Διαδικτυακών Τόπων Τεχνολογία JDBC

JDBC -Προεπισκόπηση Τι Είναι? Μια βιβλιοθήκη της Sun για πρόσβαση σε Βάσεις Δεδομένων (μέσω Java) Τι παρέχει? Ένα API το οποίο προδιαγράφει με ανοιχτό τρόπο: τη διασύνδεση με οποιαδήποτε βάση δεδομένων Μεθόδους για υποβολή ερωτήσεων (queries) Μεθόδους για δημιουργία παραμετροποιημένων ερωτήσεων(queries) Κατάλληλες δομές δεδομένων για την λήψη αποτελεσμάτων Μεθόδους για την ανάγνωση μετά-πληροφορίας από τη Βάση Το API δεν προδιαγράφει το συντακτικό της SQL

Υλικό στο Διαδικτυο Sun s JDBC Site http://java.sun.com/products/jdbc JDBC Tutorial http://java.sun.com/docs/books/tutorial/jdbc Λίστα διαθέσιμων JDBC drivers http://industry.java.sun.com/products/jdbc/drivers JDBC API http://java.sun.com/j2se/1.4/docs/api/java/sql/package -summary.html

Δομή και Λειτουργία Το JDBC αποτελείται από 2 τμήματα: JDBC API, βασισμένο πλήρως σε Java JDBC Driver Manager, ο οποίος χειρίζεται την επικοινωνία με τον vendor-specific driver ο οποίος πραγματοποιεί την πραγματική επικοινωνία με την βάση Java Application (π.χ., σελίδα JSP) JDBC API JDBC Driver Manager JDBC Driver API JDBC-ODBC bridge Vendor-specific ODBC Driver Vendor-specific JDBC Driver DataBase DataBase

JDBC Drivers 4 τύποι: JDBC-ODBC bridge + ODBC driver Native API partly Java driver JDBC-Net pure Java Driver Native protocol pure Java Driver

JDBC Τύποι Δεδομένων Είδος Δεδομένων Τύπος JDBC Τύπος JAVA Προτεινόμενη μέθοδος προσπέλασης Boolean BIT boolean Integer Data TINYINT byte SMALLINT short getshort() INTEGER int getint() BIGINT long Floating-point REAL float Data FLOAT double getdouble() DOUBLE Binary Data BINARY VARBINARY LONGVARBINARY byte[] Textual Data Date & Time Other types CHAR VARCHAR LONGVARCHAR String getstring() DATE java.sql.date getdate() TIME java.sql.time TIMESTAMP java.sql.timestamp NUMERIC BigDecimal DECIMAL CLOB Clob* BLOB Blob* ARRAY Array* DISTINCT Mapping of underlying type STRUCT Struct* REF Ref* JAVA_OBJECT Underlying java class gettime() gettimestamp()

Πώς Χρησιμοποιείται η τεχνολογία JDBC Εφτά Βασικά Βήματα: 1) Φόρτωμα του Driver 2) Ορισμός της σύνδεσης με τη Βάση 3) Δημιουργία σύνδεσης 4) Δημιουργία αντικειμένου ερωτήσεων 5) Υποβολή ερώτησεων 6) Επεξεργασία αποτελεσμάτων 7) Κλείσιμο της σύνδεσης

Βήμα 1ο Φόρτωμα του driver (οδηγού) try { Class.forName("oracle.jdbc.driver.OracleDriver"); Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); } catch (ClassNotFoundException error) { System.err.println("Error loading driver:"+error); }

Βήμα 2ο Ορισμός της σύνδεσης με τη Βάση: Γενική μορφή: jdbc:<subprotocol>:<subname> //example of an oracle JDBC URL String host="dbhost.mycompany.gr"; String dbname="mydatabase"; int port=1234; String oracleurl="jdbc:oracle:thin:@"+host+":"+port+":"+dbname; //example of a standard Microsoft Access JDBC:ODBC bridged URL String dbname= MyOdbcSource ; String MSAccessURL="jdbc:odbc:"+dbName; //example of a Microsoft Access DSNless JDBC:ODBC bridged URL String MSAccessDsnless="jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb)};dbq=c:\\path\\to\\your\\database.mdb";

Βήμα 3ο Δημιουργία σύνδεσης με τη Βάση //example of an oracle JDBC connection String username="admin"; String password="123456"; Connection connection = DriverManager.getConnection(OracleURL,username,password); //example of a standard Microsoft Access connection using JDBC:ODBC Connection connection=drivermanager.getconnection(msaccessurl,, ); //example of a Microsoft Access connection using DSNless JDBC:ODBC Connection connection=drivermanager.getconnection(msaccessdsnless,, );

Βήμα 4ο Δημιουργία αντικειμένου ερωτήσεων προς τη βάση Statement statement = connection.createstatement();

Βήμα 5ο Υποβολή ερωτήσεων (queries) προς τη Βάση //define the query using the SQL syntax String query= SELECT col1, col2, col3 FROM table1 ; String updatequery= Update table1 SET col1= Manager WHERE col2= Noukas ; //submit the query for execution by the DB ResultSet resultset=statement.executequery(query); //submit an update query to the DB int updatesperformed=statement.executeupdate(updatequery); //set a timeout interval statement.setquerytimeout(10); ResultSet timedresultset=statement.executequery(query);

Βήμα 6ο Επεξεργασία αποτελεσμάτων //process the results while (resultset.next()) { out.println( Column1: +resultset.getstring(1)+,column2: +resultset.getstring(2)+,column3: +resultset.getstring(3)); }

Βήμα 7ο Κλείσιμο της σύνδεσης στη Βάση connection.close(); Επειδή το κόστος του να ανοίξεις σύνδεση με τη Βάση (βήμα 3) είναι μεγάλο, το παραπάνω βήμα θα πρέπει να αποφεύγεται και να εκτελείται μόνο όταν τελειώσουν όλες οι συναλλαγές με τη βάση

Ολοκληρωμένο παράδειγμα χρήσης (1/2) <%@ page import="java.sql.*" %> <html> <head> <title>demonstrating a JDBC query</title> </head> <% <body> <center> <h2> Query Results </h2> <p> //loading the jdbc:odbc driver try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); } catch (ClassNotFoundException error) { System.err.println("Error"+error); out.println("error:unable to load jdbc:odbc Driver"); } //Define the connection URL String dbname="testdb"; String MSAccessURL="jdbc:odbc:"+dbName; //creating the connection to the DB Connection connection=drivermanager.getconnection(msaccessurl,"",""); //creating the statement object Statement statement = connection.createstatement(); %> //performing a test query String query="select * FROM User"; ResultSet resultset=statement.executequery(query);

Ολοκληρωμένο παράδειγμα χρήσης (2/2) <table border="2"> <tr bgcolor="cyan"> <td>id</td> <td>username</td> <td>name</td> <td>surname</td> <td>password</td> </tr> <% //print the results of the query in table format while (resultset.next()) { %> <tr> <td><%=resultset.getint("id")%></td> <td><%=resultset.getstring("username")%></td> <td><%out.println(resultset.getstring("name"));%></td> <td><%out.println(resultset.getstring("surname"));%></td> <td><%=resultset.getstring("password")%></td> </tr> <% } %> </table> <body> </html>

Creating a Microsoft Access DataBase

Configuring Microsoft Access ODBC DataSource

Running the example

Interface Connection Περιγραφή Ανοίγει μια σύνδεση (session) με τη βάση Ανήκει στο java.sql package Βασικές μέθοδοι: Statement createstatement() Δημιουργεί ένα αντικείμενο Statement για την διενέργεια queries προς τη βάση PreparedStatement preparestatement(string sql) Δημιουργεί ένα αντικείμενο PreparedStatement για την διενέργεια precompiled queries προς τη βάση boolean getautocommit() / setautocommit(boolean autocommit) Επιστρέφει/Ενεργοποιεί την αυτόματη διαδικασία commit() για την βάση. Εάν υπάρχουν δοσοληψίες που εκρεμούν τις κάνει πρώτα commit. commit() Κάνει μόνιμες όλες τις αλλαγές που πραγματοποιήθηκαν από τη τρέχουσα σύνδεση ως τώρα rollback() Ακυρώνει όλες τις αλλαγές που πραγματοποιήθηκαν από το τρέχουσα σύνδεση (από το τελευταίο commit() και μετά)

Εισαγωγή στην SQL Βασικές εντολές CREATE TABLE ALTER DROP SELECT INSERT UPDATE DELETE ROLLBACK COMMIT

Παραδείγματα εντολών SQL (1/4) Δημιουργία Δομών CREATE TABLE Δημιουργεί ένα καινούργιο πίνακα Σύνταξη: CREATE TABLE tablename (column_element [, column_element] ) Παράδειγμα: CREATE Table User (Id NUMBER NOT NULL PRIMARY KEY, Name CHAR(30), Surname CHAR(30), Username CHAR(10) ) ALTER TABLE Αλλάζει τη δομή ενός υπάρχοντος πίνακα Σύνταξη: ALTER TABLE tablename [ADD (column_element [, column_element] )] [MODIFY (column_element [, column_element ] )] Παράδειγμα: ALTER Table User ADD ( Password CHAR(10) ) DROP TABLE Καταστρέφει έναν πίνακα με όλες τις εγγραφές του Σύνταξη: DROP TABLE tablename Παράδειγμα: DROP TABLE User

Παραδείγματα εντολών SQL (2/4) Αναζήτηση SELECT Επιστρέφει έναν πίνακα από εγγραφές που συμφωνούν με τις παραμέτρους που ορίστηκαν Σύνταξη: :SELECT [ALL DISTINCT] { * tablename.* expr [, { tablename.* expr}] FROM tablename [t_alias] [, tablename [t_alias]] [WHERE condition] Παράδειγμα: SELECT DISTINCT * FROM User u WHERE u.name= Ioannis

Παραδείγματα εντολών SQL (3/4) Εισαγωγή και Τροποποίηση Εγγραφών INSERT Εισάγει μια νέα εγγραφή στην βάση Σύνταξη: INSERT INTO tablename [ (column [, column] ) ] {VALUES (value [,value] ) query } Παράδειγμα: INSERT INTO User (Id, Name, Surname, Username ) VALUES (1, ioannis, Priggouris, iprigg ) UPDATE Ενημερώνει μια υπάρχουσα εγγραφή με νέα στοιχεία Σύνταξη: UPDATE tablename SET column=expr [,column=expr] [ WHERE condition ] Παράδειγμα: UPDATE User SET Password= 123456 WHERE Username= iprigg DELETE Διαγράφει μια εγγραφή από την Βάση Σύνταξη:DELETE [FROM] tablename [WHERE condition] Παράδειγμα: DELETE FROM User WHERE username= iprigg

Παραδείγματα εντολών SQL (4/4) Άλλες Εντολές ROLLBACK Ακυρώνει όλες τις εργασίες που πραγματοποιήθηκαν στη τρέχουσα δοσοληψία Σύνταξη: ROLLBACK [WORK] [ TO [SAVEPOINT] savepoint] Παράδειγμα: ROLLBACK COMMIT Κάνει μόνιμες όλες τις αλλαγές που πραγματοποιήθηκαν στην βάση κατά την διάρκεια της τελευταίας δοσοληψίας Σύνταξη:COMMIT [WORK] Παράδειγμα: COMMIT

Interface Statement Περιγραφή Χρησιμοποιείται για την υποβολή ερωτήσεων προς τη Βάση Ανήκει στο java.sql package Βασικές μέθοδοι: boolean execute(string sql) Υποβολή οποιοδήποτε ερώτησης ResultSet executequery(string sql) Υποβολή ερωτήσεων που αφορούν SELECT int executeupdate(string sql) Υποβολή μόνο ερωτήσεων που τροποποιούν εγγραφές (INSERT, UPDATE, DELETE) και δομές (CREATE TABLE, ALTER TABLE, DROP TABLE) ResultSet getresultset() Λήψη αποτελεσμάτων που προέκυψαν από την εκτέλεση μιας execute() Connection getconnection(): Επιστρέφει το connection object που είναι συνδεδεμένο με το συγκεκριμένο Statement;

Interface PreparedStatement Περιγραφή Xρησιμοποιείται για την υποβολή pre-compiled ερωτήσεων προς τη Βάση Ανήκει στο java.sql package Βασικές μέθοδοι: Κληρονομεί όλες τις μεθόδους του Statement Πλεονεκτήματα: Μεγαλύτερη αποδοτικότητα για πολλαπλές ερωτήσεις του ίδιου τύπου Το query αποθηκεύεται σε compiled μορφή στη βάση Σε κάθε νέα χρήση οι ορισμένες παράμετροι αντικαθίστανται από καινούργιες με την χρήση των setxxx μεθόδων Όλες οι μετατροπές τύπων γίνονται από την ίδια την βάση

Statement Vs PreparedStatement //example of a standard statement String sqlquery= INSERT INTO User VALUES ( 10, Ioannis, Priggouris, iprigg ) ; Statement statement=connection.createstatement(); statement.executeupdate(sqlquery); //example of a prepared Statement connection.preparestatement( INSERT INTO User VALUES (?,?,?,? ) ); statement.setint(1,10); statement.setstring(2, ioannis ); statement.setstring(3, Priggouris ); statement.setstring(4, iprigg ); statement.executeupdate():

Interface ResultSet (1/4) Περιγραφή Ανήκει στο πακέτο java.sql Ένα αντικείμενο τύπου ResultSet περιέχει τα αποτελέσματα ενός διενεργηθέντος SQL query Επιστρέφεται ως αποτέλεσμα της κλήσης της ακόλουθης συνάρτησης: statement.executequery(sqlstring); Αναπαριστά έναν πίνακα από γραμμές και στήλες Για την λήψη της 1ης γραμμής πρέπει να κληθεί η μέθοδος: next() Για την λήψη κάθε μιας εκ των υπολοίπων γραμμών καλείται επίσης η next() Μετακίνηση προς τα πίσω (για την λήψη προηγούμενης γραμμής) είναι εφικτή (JDBC 2.0 +)

Interface ResultSet (2/4) Χρήσιμες μέθοδοι close() Αποδεσμεύει το JDBC connection και τους πόρους της βάσης Ένα ResultSet κλείνει αυτόματα κάθε φορά που το αντίστοιχο αντικείμενο Statement εκτελεί ένα νέο query. ResultSetMetaData getmatadataobject() Επιστρέφει ένα αντικείμενο ResultSetMetaData που περιέχει πληροφορίες για τις στήλες του ResultSet boolean next() Μετακίνηση στην επόμενη γραμμή του πίνακα του ResultSet: Επιστρέφει true αν βρεθεί επόμενη γραμμή, αλλιώς false Η πρώτη κλήση θέτει τον δείκτη στην πρώτη γραμμή (εάν υπάρχει)

Interface ResultSet (3/4) Χρήσιμες μέθοδοι int findcolumn(string columnname ) Επιστρέφει την αντίστοιχη ακέραια τιμή (δείκτη) που αντιστοιχεί στο όνομα της στήλης Παρατήρηση: δεν υπάρχει 1:1 αντιστοιχία ανάμεσα στις στήλες του ResultSet και αυτές του πίνακα Xxx getxxx(int index) Xxx getxxx(string columnname) Επιστρέφει την τιμή της στήλης που υποδεικνύει το όρισμα ως τύπο Xxx της java Επιστρέφει 0 ή NULL όταν η τιμή είναι τύπου SQL NULL Κυριότεροι Αποδεκτοί Xxx τύποι: double byte int long Date String Blob float short long Time TimeStamp Object wasnull Ελέγχει αν η τελευταία getxxx κλήση ήταν επέστρεψε SQL NULL

Interface ResultSet (4/4) Χρήσιμες μέθοδοι first() Μετακινεί τον δείκτη στη πρώτη γραμμή last() Μετακινεί τον δείκτη στη τελευταία γραμμή isfirst() Επιστρέφει true εάν η τρέχουσα γραμμή είναι η πρώτη islast() Επιστρέφει true εάν η τρέχουσα γραμμή είναι η τελευταία previous() Μετακινεί τον δείκτη στη προηγούμενη γραμμή Statement getstatement() Επιστρέφει το Statement object που δημιούργησε το συγκεκριμένο ResultSet

Άσκηση 1η Να φτιαχτεί web εφαρμογή: η οποία να διαβάζει μέσω μια φόρμας τα ακόλουθα στοιχεία και να τα τυπώνει στην οθόνη: Name (String) Surname (String) Telephone (Number) Username (String) Password (String)

Άσκηση 2η Να τροποποιηθεί η εφαρμογή της άσκησης 1 ώστε: Αντί απλά να τυπώνει τα στοιχεία στην οθόνη να τα καταχωρεί και σε κατάλληλη βάση δεδομένων Εάν η καταχώρηση είναι επιτυχής να τυπώνει μια επιβεβαίωση για τα στοιχεία που καταχωρήθηκαν Εάν η καταχώρηση δεν είναι επιτυχής να τυπώνει κατάλληλο μήνυμα ανεπιτυχούς καταχώρησης (π.χ. τον λόγο της αποτυχίας) Να φτιαχτούν 2 εκδόσεις του προγράμματος: Με χρήση απλού Statement Με χρήση PreparedStatement

Άσκηση 3η Να τροποποιηθεί η άσκηση 2 ώστε: Να δίνει την δυνατότητα στον χρήστη να αναιρέσει τις καταχωρήσεις που έκανε εφόσον το επιθυμεί Να επιβεβαιώσει τις καταχωρήσεις του Να κλείνει την σύνδεση με τη βάση.

Ανάπτυξη Διαδικτυακών Τόπων JSP Components

Component-based μοντέλο Account Management Component User Interface DB Access Component DB

Components Τι είναι το component? Αυτόνομο κομμάτι software με συγκεκριμένη λειτουργικότητα: Επεξεργασία δεδομένων Αποθήκευση συγκεκριμένου τύπου πληροφορίας Κύριο γνώρισμα: Δυνατότητα επαναχρησιμοποίησης (reusability)

Component-Based Architectures Πλεονεκτήματα αρχιτεκτονικών: Αυστηρή διάκριση λειτουργιών Μείωση πολυπλοκότητας Επαναχρησιμοποιησημότητα Γρήγορη ανάπτυξη μεγάλων εφαρμογών

Παράδειγμα από την καθημερινή ζωή παράθυρο Air-condition πόρτα

Εφαρμογή στην ανάπτυξη Web εφαρμογών JSP/HTML Pages Application Logic Presentation Layer Data Access DB Web designer s domain Developer s domain

JavaBeans (1/5) Βασικά Χαρακτηριστικά: Συμπεριφορά (behavior) Κατάσταση (State) Χρήση σε web εφαρμογές: Μέσω ειδικών tags Πλεονεκτήματα: Ανάπτυξη μιας JSP εφαρμογής σχεδόν χωρίς καθόλου συγγραφή κώδικα Java (εντός της σελίδος)

JavaBeans (2/5) Βασικές έννοιες: Bean container Bean properties Trigger & Linked properties Indexed properties Property Data types Text Number

JavaBeans (3/5) Τύποι JavaBeans: Visual Components Beans Data Beans Service (Worker) Beans

JavaBeans (4/5) Μια κλάση της Java με συγκεκριμένες προδιαγραφές: Κάθε property απεικονίζεται σε ένα member field getter και setter μεθόδους για κάθε member field που περιέχει Έναν default constructor

public class UserBean { String name; String surname; String username; String password; public User() { name= ; surname= ; username= ; password= ; } JavaBeans (5/5) public void setname(string n) { name=n; } public String getname() { return name; } public void setsurname(string s) { surname=s; } public String getsurname() { return surname; } public void setusername(string u) { username=u; } public String getusername() { return username; } public void setpassword(string p) { password=p; } } public String getpassword() { return password; }

<jsp: usebean /> tag (1/2) Πραγματοποιεί την πρόσβαση σε ένα JavaBean <jsp:usebean id="beaninstancename" scope="page request session application" { class="package.class" type="package.class" class="package.class" type="package.class" beanname="{package.class <%= expression %>}" type="package.class" } { /> > other elements </jsp:usebean> }

<jsp: usebean /> tag (2/2) Παραδείγματα χρήσης <jsp:usebean id="user" class="userbean"/> <jsp:usebean id="user" class="userbean"> initialization code </jsp:usebean> <jsp:usebean id="user" class="userbean" scope="session"> initialization code </jsp:usebean>

JavaBeans Properties (1/2) Πρόσβαση μέσω ειδικών tags <jsp:getproperty name="beaninstancename" property="propertyname" /> <jsp:setproperty name="beaninstancename" { property= "*" property="propertyname" [ param="parametername" ] property="propertyname" value="{string <%= expression %>}" } />

JavaBeans Properties (2/2) Παραδείγματα <jsp:getproperty name="user" property="name"/> <jsp:setproperty name="user" property="*"/> <jsp:setproperty name="user" property="name"/> <jsp:setproperty name="user" property="name" value="ioannis"/> <jsp:setproperty name="calculator" property="sum" value="<%=15*2%>"/>

Άσκηση 4η Να υλοποιηθεί η Άσκηση 1 με την χρήση components

Άσκηση 4η <%@ page import="java.sql.*" %> <html> <head> <title>registering User</title> </head> <body> <center> <jsp:usebean name="user" class="userbean"> <jsp:setproperty name="user" property="*"/> </jsp:usebean> <table border="2"> <tr bgcolor="cyan"> <td>name</td> <td>surname</td> <td>phone</td> <td>username</td> <td>password</td> </tr> <tr> <td><jsp:getproperty name="user" property="name"/></td> <td><jsp:getproperty name="user" property="surname"/></td> <td><jsp:getproperty name="user" property="phone"/></td> <td><jsp:getproperty name="user" property="username"/></td> <td><jsp:getproperty name="user" property="password"/></td> </tr> </table> <p> <body> </html>

Άσκηση 5η Να υλοποιηθεί η Άσκηση 2 με την χρήση components