Κατέβασμα παρουσίασης
Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε
ΔημοσίευσεΛευίς Ρέντης Τροποποιήθηκε πριν 7 χρόνια
0
Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας
Βάσεις Δεδομένων ΙΙ Ενότητα 10: Μελέτη περίπτωσης: Χρήση JDBC API, JSP pages Χ. Σκουρλάς Τμήμα Μηχανικών Πληροφορικής ΤΕ Το περιεχόμενο του μαθήματος διατίθεται με άδεια Creative Commons εκτός και αν αναφέρεται διαφορετικά Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους.
1
Σκοπός Μαθήματος Σκοπός: Παρουσιάζεται η διαχείριση βάσης δεδομένων με γλώσσα SQL, χρήση JDBC API, και τεχνολογίας JSP pages και λογισμικού mySQL. Στόχος μας είναι να βοηθήσουμε το σπουδαστή να μάθει να προγραμματίζει εφαρμογές βάσεων δεδομένων. Χ. Σκουρλάς
2
Προγραμματισμός με χρήση jdbc API
Στο σχήμα προσφέρεται μία οπτική υπενθύμιση για μία σειρά από αντικείμενα, μεθόδους (objects, methods) του jdbc API και με τα βέλη περιγράφεται η επικοινωνία / σύνδεσή / διάταξή τους.
3
Χρήση του JDBC API από Java application για σύνδεση σε βάση δεδομένων
ORACLE/mySQL
4
M Laiho
5
Η βασική αρχή χρήσης είναι απλή (δείτε και σχήμα API):
Statement myStatement = myconnection.createStatement(); Τα αντικείμενα της βάσης δεδομένων ορίζονται σαν συμβολοσειρές (string). Ακολουθούν παραδείγματα: String testDatabase = “jdbc:mysql://localhost:3306/mydb?user= root &password=c125"; Προσοχή! Η παρακάτω εντολή είναι λανθασμένη String sqlString = "INSERT INTO USERS VALUES ('user1', 'password1')"; Η σωστή διαμορφώνεται ως εξής: … VALUES('"+user1+"','"+password1+"') String sql="insert into users values ('"+user1+"','"+password1+"')";
6
Απλά παραδείγματα χρήσης του API:
Η DriverManager Class παρέχει τη μέθοδο getConnection. Μπορούμε να ορίσουμε ένα αντικείμενο, για παράδειγμα το αντικείμενο myConnection, τύπου Connection ως εξής: Connection myConnection = DriverManager.getConnection(testDatabase); Αυτό προϋποθέτει ότι έχουμε ορίσει ένα αντικείμενο testDatabase τύπου string που «ορίζει» τον driver που χρησιμοποιούμε, το URL, τη βάση μας, username και password. String testDatabase = “jdbc:mysql://localhost:3306/mydb?user=admin&password=1234";
7
Το αντικείμενο myConnection είναι τύπου Connection και μπορούμε να χρησιμοποιήσουμε τη μέθοδο CreateStatement της Connection για να ορίσουμε ένα αντικείμενο, για παράδειγμα το αντικείμενο myStatement τύπου Statement. Μέσω του αντικειμένου myStatement θα γράφουμε δηλώσεις SQL (INSERT, UPDATE, DELETE, SELECT). Statement myStatement = myconnection.createStatement(); Το αντικείμενο myStatement είναι τύπου Statement και μπορούμε να «εκτελέσουμε» τη δήλωση SQL χρησιμοποιώντας μία από τις δύο σχετικές μεθόδους της (μέθοδο executeUpdate ή μέθοδο executeQuery). Ποια είναι κατάλληλη μέθοδος εξαρτάται από τη δήλωση SQL. Στην περίπτωση δήλωσης INSERT έχουμε: myStatement.executeUpdate(sqlString);
8
Η συγγραφή της SQL δήλωσης γίνεται σε ένα αντικείμενο τύπου string, για παράδειγμα το αντικείμενο με όνομα sqlString. String sqlString = "INSERT INTO USERS VALUES ('"+user1+"','"+password1+"') ('user1', 'password1')"; Έτσι για να εκτελέσουμε την SQL δήλωση (που γράψαμε παραπάνω): String sql="insert into users values ('"+user1+"','"+password1+"')"; myStatement.executeUpdate(sqlString);
9
Στην περίπτωση δήλωσης SELECT μπορούμε να ορίσουμε ένα αντικείμενο, για παράδειγμα το αντικείμενο με όνομα rs, τύπου ResultSet. Στο αντικείμενο «αποθηκεύονται» τα αποτελέσματα της δήλωσης SELECT. Προηγουμένως, θα ορίσουμε το αντικείμενο sqlString (συμβολοσειρά που «περιέχει» τη δήλωση SELECT): (διορθώστε διαγραμμένο κείμενο στην εντολή) String sqlString = "SELECT * FROM MYTABLE WHERE PARAM = 'paramValue'"; ResultSet rs = myStatement.executeQuery(sqlString); ResultSet παρέχει μεθόδους για να διαχειριστούμε τις γραμμές που «αποθηκεύονται» στο rs: next(), previous(), first(), last() Επίσης, παρέχει μία σειρά από μεθόδους κάθε μία από τις οποίες μπορεί να χρησιμοποιήθει για να πάρουμε πληροφορία από μια στήλη: getString, getInt, getFloat getDate.
10
Πως θα συνδεθούμε στη βάση δεδομένων και πως θα γράψουμε SQL statements (περίπτωση χρήσης των προϊόντων MySQL, Netbeans): Δήλωση του JDBC driver libraries>δεξί κλικ> Add Jar/Folder και επιλέγουμε το αρχείο mysql-connector-java bin.jar ή mysql.jar Εισαγωγή του package java.sql στο πρόγραμμά μας import="java.sql.*" %> «Φόρτωση» του JDBC driver στο πρόγραμμά μας Class.forName(“com.mysql.jdbc.Driver”); Φορτώνουμε την κλάση Driver από το package com.mysql.jdbc.
11
Σύνδεση στη βάση δεδομένων
String testDatabase = “jdbc:mysql://localhost:3306/mydb?user=root&password=c125"; Ορίζουμε για τη βάση δεδομένων μας (mydb) το αντικείμενο testDatabase τύπου συμβολοσειράς (string) της μορφής: “jdbc:mysql://ServerName:ServerPort/DatabaseName?user=myUsername&password=myPassword"; Connection myConnection = DriverManager.getConnection(testDatabase); Δημιουργούμε ένα αντικείμενο τύπου Connection. Tο αντικείμενό μας, myConnection, είναι μια ανοιχτή σύνδεση με τη βάση δεδομένων
12
Δημιουργία αντικειμένου για να γράψουμε SQL statements
Statement myStatement = myconnection.createStatement(); Δημιουργούμε το αντικείμενο myStatement τύπου Statement. Μέσω του αντικειμένου myStatement θα γράφουμε δηλώσεις SQL. Εγγραφή SQL statements String sqlString = "INSERT INTO USERS VALUES ('user1', 'password1')"; String sql="insert into users values ('"+user1+"','"+password1+"')"; Ορίζουμε ένα αντικείμενο sqlString τύπου string για να γράψουμε τη δήλωση SQL (που θέλουμε να εκτελεστεί στη συνέχεια).
13
Εκτέλεση SQL statements
myStatement.executeUpdate(sqlString); Εκτελούμε τη δήλωση SQL που γράψαμε και πιο συγκεκριμένα χρησιμοποιούμε το αντικείμενο myStatement που δημιουργήσαμε. Επειδή έχουμε στην περίπτωση αυτή εντολή INSERT χρησιμοποιήσαμε τη μέθοδο executeUpdate. Το ίδιο θα κάναμε και σε δήλωση UPDATE ή DELETE. Αν η sqlString αφορούσε μια SQL statement τύπου select, η μέθοδός μας θα ήταν η executeQuery: myStatement.executeQuery(sqlString);
14
Κλείσιμο του αντικειμένου εγγραφής SQL statements
myStatement.close(); Αφού εκτελέσουμε την SQL statement πρέπει να κλείσουμε το αντικείμενο εγγραφής SQL statements. Κλείσιμο της σύνδεσης myConnection.close(); Κλείνουμε τη σύνδεση με τη βάση δεδομένων.
15
Παραδείγματα διαχείρισης δηλώσεων SQL
Για να γράψουμε SQL χρησιμοποιούμε myStatement.methodName(sqlString); insert statement myStatement.executeUpdate(sqlString); όπου sqlString είναι μια συμβολοσειρά της μορφής: String sqlString = "INSERT INTO MYTABLE VALUES ('value1', 'value2')"; (διορθώστε) delete statement όπου το sqlString είναι της μορφής: String sqlString = "DELETE FROM MYTABLE WHERE PARAM = 'paramValue'"; (διορθώστε) update statement myStatement.executeUpdate(sqlString); -- όπου το sqlString είναι: (διορθώστε) String sqlString = "UPDATE MYTABLE SET PARAM1='value1' WHERE PARAM2='value2'";
16
select statement Για επιλογή δεδομένων χρησιμοποιούμε τη μέθοδο executeQuery μέσω της εντολής: ResultSet rs = myStatement.executeQuery(sqlString); όπου sqlString είναι μια συμβολοσειρά της μορφής: (διορθώστε) String sqlString = "SELECT * FROM MYTABLE WHERE PARAM = 'paramValue'"; Η μέθοδος executeQuery μας δίνει τη δυνατότητα να ανακτήσουμε δεδομένα από τη βάση. Τα δεδομένα αυτά πρέπει να τα αποθηκεύσουμε προσωρινά σε κάποια δομή ώστε να τα χρησιμοποιήσουμε.
17
Η Java μας δίνει μια εύχρηστη δομή μέσω της κλάσης ResultSet
Η Java μας δίνει μια εύχρηστη δομή μέσω της κλάσης ResultSet. Πιο συγκεκριμένα, η μέθοδος ExecuteQuery μας επιστρέφει ένα αντικείμενο τύπου ResultSet. Ας ονομάσουμε το συγκεκριμένο αντικείμενο rs. Μέσα στο αντικείμενο αυτό αποθηκεύονται προσωρινά όλες οι γραμμές δεδομένων που επιστρέφει η δήλωση SELECT που εκτελέσαμε. Μέσω του αντικειμένου αυτού μπορούμε να επεξεργαστούμε τις γραμμές στο πρόγραμμά μας Το αντικείμενο rs μας παρέχει και έναν δείκτη ο οποίος αρχικά δείχνει πρίν από την πρώτη γραμμή αποτελεσμάτων που είναι αποθηκευμένα στο αντικείμενο rs.
18
Το rs (ως αντικείμενο της κλάσης ResultSet) μας παρέχει μεθόδους για να επεξεργαζόμαστε τις γραμμές που ανακτήσαμε από τη βάση δεδομένων. Για να χρησιμοποιήσουμε την πληροφορία που είναι καταχωρημένη στο αντικείμενο rs, θα πρέπει: Να μετακινήσουμε το δείκτη στη γραμμή που θέλουμε να επεξεργασθούμε ή να τον μετακινούμε διαδοχικά αν θέλουμε να επεξεργασθούμε όλες τις αποθηκευμένες γραμμές. Αυτό γίνεται με χρήση μεθόδων όπως: next(), previous(), first(), last() Να χρησιμοποιήσουμε την κατάλληλη συνάρτηση για να πάρουμε πληροφορία από μια στήλη. Αυτό γίνεται με τις συναρτήσεις getString, getInt, getFloat getDate κ.τ.λ.
19
Πρακτικός κανόνας για τη συγγραφή δήλωσης SQL στα προγράμματά μας:
Δοκιμάζουμε τη δήλωση με συγκεκριμένες τιμές στις μεταβλητές. Τοποθετούμε την εντολή σε " " και αντικαθιστούμε κάθε συγκεκριμένη τιμή, για παράδειγμα την τιμή 'ANALYST'με το όνομα της μεταβλητής γραμμένο με "+ +", ως εξής: '"+job+"' Δείτε και το παράδειγμα: String sql="insert into emp(ename,job,sal,deptno) values ('"+name+"','"+job+"','"+sal+"',"+deptno+")";
20
Δημιουργία πινάκων εφαρμογής
case study Δημιουργία πινάκων εφαρμογής
21
DROP DATABASE personnel; CREATE DATABASE personnel; USE proj; CREATE TABLE Dept(DEPTNO INT(2) NOT NULL, DNAME VARCHAR(14), LOC VARCHAR(14), NO_OF_EMPLOYEES INT(3), PRIMARY KEY(DEPTNO)); CREATE TABLE Emp(EMPNO INT(4) NOT NULL AUTO_INCREMENT, ENAME VARCHAR(10), JOB VARCHAR(9), SAL FLOAT(7,2), DEPTNO INT(2), PRIMARY KEY(EMPNO), FOREIGN KEY(DEPTNO) REFERENCES Dept(DEPTNO));
22
INSERT INTO Dept(DEPTNO, DNAME, LOC) VALUES (10, 'ACCOUNTING', 'NEW YORK'); VALUES (20, 'RESEARCH', 'DALLAS'); VALUES (30, 'SALES', 'CHICAGO'); VALUES (40, 'OPERATIONS', 'BOSTON');
23
INSERT INTO Emp( ENAME, JOB, SAL, DEPTNO) VALUES ( 'SMITH', 'CLERK', 800, 20); INSERT INTO Emp( ENAME, JOB, SAL, DEPTNO) VALUES ( 'ALLEN', 'SALESMAN', 1600, 30); INSERT INTO Emp( ENAME, JOB, SAL, DEPTNO) VALUES ( 'WARD', 'SALESMAN', 1250, 30); INSERT INTO Emp( ENAME, JOB, SAL, DEPTNO) VALUES ( 'JONES', 'MANAGER', 2975, 20); INSERT INTO Emp( ENAME, JOB, SAL, DEPTNO) VALUES ( 'MARTIN', 'SALESMAN', 1250, 30); INSERT INTO Emp( ENAME, JOB, SAL, DEPTNO) VALUES ( 'BLAKE', 'MANAGER', 2850, 30); INSERT INTO Emp( ENAME, JOB, SAL, DEPTNO) VALUES ( 'CLARK', 'MANAGER', 2450, 10); INSERT INTO Emp( ENAME, JOB, SAL, DEPTNO) VALUES ( 'SCOTT', 'ANALYST', 3000, 20); INSERT INTO Emp( ENAME, JOB, SAL, DEPTNO) VALUES ( 'KING', 'PRESIDENT', 5000, 10); INSERT INTO Emp( ENAME, JOB, SAL, DEPTNO) VALUES ( 'TURNER', 'SALESMAN', 1500, 30); INSERT INTO Emp( ENAME, JOB, SAL, DEPTNO) VALUES ( 'ADAMS', 'CLERK', 1100, 20); INSERT INTO Emp( ENAME, JOB, SAL, DEPTNO) VALUES ( 'JAMES', 'CLERK', 950, 30); INSERT INTO Emp( ENAME, JOB, SAL, DEPTNO) VALUES ( 'FORD', 'ANALYST', 3000, 20); INSERT INTO Emp( ENAME, JOB, SAL, DEPTNO) VALUES ( 'MILLER', 'CLERK', 1300, 10); INSERT INTO Emp( ENAME, JOB, SAL, DEPTNO) VALUES ( 'BATES', 'ANALYST', 1300, NULL);
24
Στη συνέχεια θα γίνει διαχείριση των τιμών της στήλης no_of_employees
UPDATE dept SET no_of_employees = (SELECT COUNT(*) FROM emp WHERE emp.deptno = dept.deptno); Select * from dept; Select * from emp; Στη συνέχεια θα γίνει διαχείριση των τιμών της στήλης no_of_employees με triggers
26
CREATE TABLE user( uname text, upass text, Uid int(11), Uphone varchar(45), Ucity varchar(45)); INSERT INTO `user` VALUES ('admin','1234',1,NULL,NULL);
27
DROP TRIGGER emp_insert; DROP TRIGGER emp_delete; DROP TRIGGER emp_update; DELIMITER // CREATE TRIGGER emp_insert AFTER INSERT ON emp FOR EACH ROW BEGIN UPDATE dept SET no_of_employees = IFNULL(no_of_employees, 0) + 1 WHERE deptno = NEW.deptno; END // DELIMITER ;
28
DELIMITER // CREATE TRIGGER emp_delete AFTER DELETE ON emp FOR EACH ROW BEGIN UPDATE dept SET no_of_employees = IFNULL(no_of_employees, 0) - 1 WHERE deptno = OLD.deptno; END // DELIMITER ;
29
DELIMITER // CREATE TRIGGER emp_update AFTER UPDATE ON emp FOR EACH ROW BEGIN UPDATE dept SET no_of_employees = NVL(no_of_employees,0) + 1 WHERE deptno = NEW.deptno; SET no_of_employees = IFNULL(no_of_employees, 0) - 1 WHERE deptno = OLD.deptno; END // DELIMITER ;
30
Ακολουθούν δοκιμές / έλεγχοι
INSERT INTO dept VALUES(11,'Belle Epoque', 'PARIS', 0); INSERT INTO dept VALUES(12,'Rasors edge', 'PARIS', 0); INSERT INTO emp(empno,ename,deptno) VALUES (102,'Luers',11); INSERT INTO emp(empno,ename,deptno) VALUES (103,'Atwood',11); INSERT INTO emp(empno,ename,deptno) VALUES (104,'Gennick',12); SELECT * FROM dept WHERE deptno IN (11,12); DELETE FROM emp WHERE empno = 103; UPDATE emp SET deptno = 11 WHERE empno = 104; SELECT * FROM dept; SELECT * FROM emp;
31
Παράδειγμα Χρήσης Cursor
Να καταχωρήσετε τμήματα με λιγότερους από 5 υπαλλήλους στον πίνακα infologs. Βλέπουμε τον πίνακα dept.
32
Δημιουργούμε τον πίνακα infologs
Id – αύξων αριθμός, Msg – κωδικός τμήματος με λιγότερους από 5 υπαλλήλους CREATE TABLE infologs ( Id int(11) NOT NULL AUTO_INCREMENT, Msg varchar(255) NOT NULL, PRIMARY KEY (Id)); Θα δημιουργήσουμε την procedure cursorproc και όταν την εκτελέσουμε θα δούμε τα παρακάτω:
33
DELIMITER $$ DROP PROCEDURE IF EXISTS CursorProc$$ CREATE PROCEDURE CursorProc() BEGIN DECLARE no_more_depts, available_employees INT DEFAULT 0; DECLARE dept_code VARCHAR(255); DECLARE cur_dept CURSOR FOR SELECT deptno FROM dept; DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_depts = 1; /* for logging information */ OPEN cur_dept; FETCH cur_dept INTO dept_code; REPEAT SELECT no_of_employees INTO available_employees FROM dept WHERE deptno = dept_code; IF available_employees < 5 THEN INSERT INTO infologs(msg)VALUES (dept_code); END IF; FETCH cur_dept INTO dept_code; UNTIL no_more_depts = 1 END REPEAT; CLOSE cur_dept; SELECT * FROM infologs; END$$ Δημιουργία procedure
34
DELIMITER ; CALL CURSORPROC();
35
case study Τα βήματα που θα ακολουθήσουμε προκειμένου να δημιουργήσουμε και να εκτελέσουμε την εφαρμογή είναι: Ανοίγουμε το προϊόν Netbeans και δημιουργούμε ένα νέο Web project Στον φάκελο libraries του Web Project προσθέτουμε τον driver (mysql.jar) «Φορτώνουμε» το script της βάσης. Αντιγράφουμε όλα τα αρχεία του φακέλου (σελίδες εφαρμογής) μέσα στον φάκελο Web Pages του Project. Διορθώνετε το String DB = "jdbc:mysql://localhost:3306/personnel?user=root&password=1234"; σύμφωνα με τα δικά σας δεδομένα (για παράδειγμα αν δεν δηλώσατε συνθηματικό θα πρέπει να βγάλετε το πεδίο password=1234)
37
Τα στοιχεία της σύνδεσης είναι:
IP: localhost Port: 3306 Database: personnel User=root Password=1234
38
Index.jsp
39
<%@page contentType="text/html" pageEncoding="UTF-8"%> <
contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> WELCOME<p></p> LOGIN<p></p> <p></p> <form name="formName" method="post" action="check.jsp" > Name: <input type="text" name="y"><p></p> Password:<input type="text" name="k"><P></P> <input type="submit" value="LOGIN"><p></p> </form> </body> </html>
40
Index.jsp <form name="formName" method="post" action="check.jsp" > Name: <input type="text" name="y"><p></p> Password:<input type="text" name="k"><P></P> <input type="submit" value="LOGIN"><p></p> </form> check.jsp String x =request.getParameter("y"); String p = request.getParameter("k");
41
<%@page import="java. sql
import="java.sql.*" %> contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> <% Boolean found; int j=0; String s=""; int ps; String x =request.getParameter("y"); String p = request.getParameter("k"); String URL; Class.forName("com.mysql.jdbc.Driver"); String DB = "jdbc:mysql://localhost:3306/personnel?user=root&password=1234"; Connection myConnection = DriverManager.getConnection(DB); Statement SMT = myConnection.createStatement(); String sql="SELECT * FROM user WHERE Uname='"+x+"'AND Upass='"+p+"' "; ResultSet rs=SMT.executeQuery(sql); found= rs.first(); check.jsp
42
if (found){ URL = "home. jsp. p1="+x+""; response
if (found){ URL = "home.jsp?p1="+x+""; response.sendRedirect(URL); } else { out.println("INCORRECT TRY AGAIN");%><P></P> <a href="index.jsp">Try Again</a><% SMT.close(); myConnection.close(); %> </body> </html>
43
Προβολή όλων των εργαζομένων και των τμημάτων στα οποία ανήκουν
Υλοποιείται με χρήση της σελίδας home.jsp
44
Εισαγωγή Νέου εργαζόμενου (insert.jsp, ins_submit.jsp)
Ενημέρωση στοιχείων εργαζομένων (σελίδες update.jsp, up_submit.jsp) Διαγραφή ενός εργαζομένου (σελίδα delete.jsp)
45
<% String sql="SELECT. FROM dept "; ResultSet rs=SMT
<% String sql="SELECT * FROM dept "; ResultSet rs=SMT.executeQuery(sql); String dname; int count=0; while (rs.next()) { i=rs.getInt("deptno"); String sql1="SELECT * FROM emp WHERE deptno='"+i+"' "; ResultSet rs1=SMT1.executeQuery(sql1); dname=rs.getString("dname"); %> (απόσπασμα της home.jsp)
46
<% Class.forName("com.mysql.jdbc.Driver");
String DB = "jdbc:mysql://localhost:3306/personnel?user=root"; Connection myConnection = DriverManager.getConnection(DB); Statement SMT = myConnection.createStatement(); String name=request.getParameter("ename"); String job=request.getParameter("job"); String sal=request.getParameter("sal"); int deptno=Integer.parseInt(request.getParameter("deptno")); String sql="insert into emp(ename,job,sal,deptno) values ('"+name+"','"+job+"','"+sal+"',"+deptno+")"; SMT.executeUpdate(sql); String URL = "index.jsp"; response.sendRedirect(URL); %> SMT.close(); myConnection.close(); (απόσπασμα της insubmit.jsp)
47
Παράδειγμα JSP Session
Μία συνεδρία είναι ένα αντικείμενο συνδεδεμένο με έναν επισκέπτη του ιστοτόπου μας <HTML> <BODY> <FORM METHOD=POST ACTION="SaveUserName.jsp"> What's your name? <INPUT TYPE=TEXT NAME=username SIZE=20> What's your age? <INPUT TYPE=TEXT NAME=userage SIZE=20> <P><INPUT TYPE="SUBMIT" value="Click"><p></p> </FORM> </BODY> </HTML>
48
SaveUserName.jsp <% String name = request.getParameter("username"); String age = request.getParameter("userage"); session.setAttribute( "theName", name ); session.setAttribute( "theAge", age ); %> <HTML> <BODY> <A HREF="WelcomePage.jsp">Continue</A> </BODY> </HTML>
49
WelcomePage.jsp <HTML> <BODY> Hello, <%= session.getAttribute( "theName" ) %> Your age is <%= session.getAttribute("theAge")%> </BODY> </HTML>
50
Προτεινόμενο μικρό έργο (Project):
Στόχος της εργασίας είναι να περιγράψετε σύντομα μια υποθετική εταιρεία και να σχεδιάσατε και να υλοποιήσετε μία Web εφαρμογή δημιουργίας και διαχείρισης περιεχομένου που πιστεύετε ότι ενδιαφέρει την εταιρεία. Η εφαρμογή σας θα λειτουργεί υπό τη μορφή ιστοτόπου.
51
Πρώτη προσέγγιση στον ιστότοπο PanoramaSummerSoccer.com camp
Σας αναθέτουν να σχεδιάσετε και να υλοποιήσετε εφαρμογή η οποία αφορά τη διαχείριση της Ακαδημίας ποδοσφαίρου. Στην εφαρμογή θα έχουν πρόσβαση μόνο όσοι συμμετέχοντες είναι εγγεγραμμένοι και διαθέτουν username και password. Αρχικά θα εμφανίζεται μια login φόρμα όπου θα δίνεται η δυνατότητα στον χρήστη να συνδεθεί. Αφού συνδεθεί ο χρήστης θα έχει τις παρακάτω δυνατότητες: Προβολή όλων των προγραμμάτων της εταιρείας μαζί με τα στοιχεία συμμετεχόντων που τα παρακολουθούν Εισαγωγή ενός νέου συμμετέχοντα Διαγραφή ενός συμμετέχοντα Ενημέρωση των στοιχείων των συμμετεχόντων
52
Στην οθόνη του login θα υπάρχει το εξής κείμενο:
PanoramaSummerSoccer.com camp Registration is now OPEN for Panorama Summer Soccer program in PanoramaSummerSoccer.com camp. Date: Play will begin June Time: Start times range from 9:00 am – 12:00 on Monday and Wednesday mornings. Possible sessions on 9:00 am – 10:00 Saturday Mornings (as per demand/interest min 20 players registered) Season: More than 12 sessions with small games June to July Programs: LEARN 2 PLAY, SOCCER PLUS, LEARN BY EXAMPLE Address: Sounio (Thisseos’ fields) Players will be split into the following groups: 3-5 years old (mini STARS) AM 6-8 years old (RISING STARS) AM 9-12 years old (SHINING STARS) 9-10 AM PLEASE NOTE WE HAVE VERY LIMITED SPACES, so register early… ALL participants will receive uniforms… Στην οθόνη του login θα υπάρχει το εξής κείμενο:
53
Οι πίνακες της εφαρμογής θα μπορούσαν να συμπεριλαμβάνουν και τους εξής:
Programs Accno Name Time Start Group 10 LEARN 2 PLAY 9.00 14/06/2014 mini STARS 20 SOCCER PLUS 10.00 RISING STARS 30 LEARN BY EXAMPLE 11.00 14/07/2014 SHINING STARS Participants Pno Firstname Lastname Gender Date of birth Address Postal code Accno 1 JIM ADAMS MALE 4/06/2004 THISSEUS 12345 20 2 ARTHUR CLARKE 14/03/2005 ARIADNE 23456 3 MARCIA BATES FEMALE 14/07/2009 30
54
Select * from user;
55
Τέλος Ενότητας
56
Σημειώματα
57
Σημείωμα Αναφοράς Copyright Τεχνολογικό Εκπαιδευτικό Ίδρυμα Αθήνας, Χρήστος Σκουρλάς Χρήστος Σκουρλάς. «Βάσεις Δεδομένων ΙΙ. Ενότητα 10: Μελέτη περίπτωσης: Χρήση JDBC API, JSP pages». Έκδοση: 2.0. Αθήνα Διαθέσιμο από τη δικτυακή διεύθυνση: pyles.teiath.gr.
58
Σημείωμα Αδειοδότησης
Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons Αναφορά, Μη Εμπορική Χρήση Παρόμοια Διανομή 4.0 [1] ή μεταγενέστερη, Διεθνής Έκδοση. Εξαιρούνται τα αυτοτελή έργα τρίτων π.χ. φωτογραφίες, διαγράμματα κ.λ.π., τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί με τους όρους χρήσης τους στο «Σημείωμα Χρήσης Έργων Τρίτων». [1] Ως Μη Εμπορική ορίζεται η χρήση: που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του έργου, για το διανομέα του έργου και αδειοδόχο που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή πρόσβαση στο έργο που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό όφελος (π.χ. διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση, εφόσον αυτό του ζητηθεί.
59
Διατήρηση Σημειωμάτων
Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να συμπεριλαμβάνει: το Σημείωμα Αναφοράς το Σημείωμα Αδειοδότησης τη δήλωση Διατήρησης Σημειωμάτων το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει) μαζί με τους συνοδευόμενους υπερσυνδέσμους.
60
Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στo πλαίσιo του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας» έχει χρηματοδοτήσει μόνο την αρχική αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους.
Παρόμοιες παρουσιάσεις
© 2024 SlidePlayer.gr Inc.
All rights reserved.