Επισκόπηση της χρήσης jdbc API



Ανοικτ? Ακαδημα?κ? Μαθ?ματαΤεχνολογικ? Εκπαιδευτικ? ?δρυμα Αθ?να?Ανοικτ? Ακαδημα?κ? Μαθ?ματαΤεχνολογικ? Εκπαιδευτικ? ?δρυμα Αθ?να?Β?σει? Δεδομ?νων ΙΙΕν?τητα 13: Επισκ?πηση τη? χρ?ση? του jdbc API Χ. Σκουρλ??, Α. Τσολακ?δη?, Δ. Β?σση?Τμ?μα Μηχανικ?ν Πληροφορικ?? ΤΕΤο περιεχ?μενο του μαθ?ματο? διατ?θεται με ?δεια Creative Commons εκτ?? και αν αναφ?ρεται διαφορετικ?Το ?ργο υλοποιε?ται στο πλα?σιο του Επιχειρησιακο? Προγρ?μματο? ?Εκπα?δευση και Δια Β?ου Μ?θηση? και συγχρηματοδοτε?ται απ? την Ευρωπα?κ? ?νωση (Ευρωπα?κ? Κοινωνικ? Ταμε?ο) και απ? εθνικο?? π?ρου?.Περιεχ?μενα TOC \o "1-3" \h \z \t "Title;3" 1.Επισκ?πηση τη? χρ?ση? jdbc API PAGEREF _Toc401565077 \h 32.Απλ? λειτουργικ? παραδε?γματα χρ?ση? του API: PAGEREF _Toc401565078 \h 43.Σ?νδεση σε β?ση δεδομ?νων στην περ?πτωση τoυ προ??ντο? MySQL PAGEREF _Toc401565079 \h 54.Παραδε?γματα διαχε?ριση? δηλ?σεων SQL - Insert-delete-update-select statements PAGEREF _Toc401565080 \h 75.Παρ?δειγμα χρ?ση? embedded select statement. PAGEREF _Toc401565081 \h 96.Case Study ?Διαχε?ριση β?ση? προσωπικο?? PAGEREF _Toc401565082 \h 127.Υλοπο?ηση εφαρμογ?? PAGEREF _Toc401565083 \h 18Στ?χο? του εργαστηρ?ου ε?ναι η επισκ?πηση τη? χρ?ση? του jdbc API για τη δημιουργ?α εφαρμογ?ν – jsp pages και τη διαχε?ριση β?σεων δεδομ?νων. Μετ? την επεξεργασ?α του εργαστηρ?ου ο ενδιαφερ?μενο? θα ?χει κατανο?σει τα θ?ματα δημιουργ?α? μια? εφαρμογ?? jsp pages. Λ?ξει? κλειδι?: jdbc API, netbeans, jsp pages Επισκ?πηση τη? χρ?ση? jdbc APIΣτο σχ?μα (Martii Leiho) προσφ?ρεται μ?α οπτικ? υπενθ?μιση για μ?α σειρ? απ? σημαντικ?? κλ?σει?, αντικε?μενα, μεθ?δου? (class, objects, methods) του jdbc API και με τα β?λη περιγρ?φεται η επικοινων?α / σ?νδεσ? / δι?ταξ? του?.Η βασικ? αρχ? χρ?ση? του jdbc API ε?ναι απλ?: Α? εστι?σουμε στα β?λη. Για να ορ?σω ?να αντικε?μενο μι?? κλ?ση? στην αιχμ? εν?? β?λου? χρησιμοποι? την κατ?λληλη μ?θοδο και αντικε?μενο τη? ?προηγο?μενη?? κλ?ση? που βρ?σκεται στην αρχ? του ιδ?ου β?λου?. Statement myStatement = myconnection.createStatement();Δηλαδ? για να ορ?σουμε το αντικε?μενο myStatement ?εφαρμ?ζουμε? τη μ?θοδο createStatement στο αντικε?μενο myconnection. Τα αντικε?μενα τη? β?ση? δεδομ?νων ορ?ζονται σαν συμβολοσειρ?? (string). Ακολουθο?ν παραδε?γματα: String testDatabase = “jdbc:mysql://localhost:3306/mydb?user=admin&password=1234";Προσοχ?! Η παρακ?τω εντολ? ε?ναι λανθασμ?νη String sqlString = "INSERT INTO USERS VALUES ('user1', 'password1')";Η σωστ? διαμορφ?νεται ω? εξ??: … VALUES('"+user1+"','"+password1+"')?ρα, String sql="insert into users values ('"+user1+"','"+password1+"')";Απλ? λειτουργικ? παραδε?γματα χρ?ση? του API:Η DriverManagerClass παρ?χει τη μ?θοδο 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"; Connection myConnection = DriverManager.getConnection(testDatabase);Σημε?ωση: Το αντικε?μενο myConnection ε?ναι τ?που Connection και μπορο?με να χρησιμοποι?σουμε τη μ?θοδο CreateStatement τη? κλ?ση? Connection για να ορ?σουμε ?να αντικε?μενο, για παρ?δειγμα το αντικε?μενο myStatement τ?που Statement. Μ?σω του αντικειμ?νου myStatement θα γρ?φουμε και θα εκτελο?με δηλ?σει? SQL (INSERT, UPDATE, DELETE, SELECT). Statement myStatement = myconnection.createStatement();Το αντικε?μενο myStatement ε?ναι τ?που Statement και μπορο?με να το ?εκτελ?σουμε? χρησιμοποι?ντα? μ?α απ? τι? δ?ο σχετικ?? μεθ?δου? τη? κλ?ση? δηλαδ? τη μ?θοδο executeUpdate ? τη μ?θοδο executeQuery. Ποια ε?ναι κατ?λληλη μ?θοδο? εξαρτ?ται απ? τη δ?λωση SQL. Στην περ?πτωση δ?λωση? INSERT ?χουμε: myStatement.executeUpdate(sqlString); Η συγγραφ? τη? 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);Ειδικ? στην περ?πτωση δ?λωση? 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. Σ?νδεση σε β?ση δεδομ?νων στην περ?πτωση τoυ προ??ντο? MySQL?Για να συνδεθο?με στη β?ση δεδομ?νων στην περ?πτωση τoυ προ??ντο? MySQL και να γρ?ψουμε δηλ?σει? SQL (SQL statements) απαιτο?νται οι εξ?? εν?ργειε?:?Δ?λωση του JDBC driver?libraries>δεξ? κλικ> Add Jar/Folder και επιλ?γουμε το αρχε?ο mysql-connector-java- 5.1.13 -bin.jar ? mysql.jarΕισαγωγ? του package java.sql στο πρ?γραμμ? μα??<%@page import="java.sql.*" %> (χρησιμοποιο?με .*, ;?τσι ?στε να μπορο?με να χρησιμοποι?σουμε ?λε? τι? κλ?σει? του package java.sql)?Φ?ρτωση? του JDBC driver στο πρ?γραμμ? μα??Class.forName(“com.mysql.jdbc.Driver”);// Φορτ?νουμε την κλ?ση Driver απ? το package com.mysql.jdbc. Σ?νδεση στη β?ση δεδομ?νων?String testDatabase = “jdbc:mysql://localhost:3306/mydb?user=admin&password=1234";// Ορ?ζουμε για τη β?ση δεδομ?νων μα? (‘εστω ?τι την ονομ?ζουμε mydb) ?να αντικε?μενο testDatabase τ?που συμβολοσειρ?? (string) τη? μορφ??: “jdbc:mysql://ServerName:ServerPort/DatabaseName?user=myUsername&password=myPassword";Connection myConnection = DriverManager.getConnection(testDatabase);// Δημιουργο?με ?να αντικε?μενο τ?που Connection. Tο αντικε?μεν? μα?, myConnection, ε?ναι μια ανοιχτ? σ?νδεση με τη β?ση δεδομ?νων?Δημιουργ?α αντικειμ?νου για να γρ?ψουμε 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 (που θ?λουμε να εκτελεστε? στη συν?χεια). Εκτ?λεση SQL statementsmyStatement.executeUpdate(sqlString);// Εκτελο?με τη δ?λωση SQL που γρ?ψαμε και πιο συγκεκριμ?να χρησιμοποιο?με το αντικε?μενο myStatement που δημιουργ?σαμε. Επειδ? ?χουμε στην περ?πτωση αυτ? εντολ? INSERT χρησιμοποι?σαμε τη μ?θοδο executeUpdate. Το ?διο θα κ?ναμε και σε δ?λωση UPDATE ? DELETE.Αν η sqlString αφορο?σε μια SQL statement τ?που select, η μ?θοδ?? μα? θα ?ταν:η executeQuery: myStatement.executeQuery(sqlString);Κλε?σιμο του αντικειμ?νου ?αναγραφ??? SQL statements?myStatement.close();?// Αφο? εκτελ?σουμε την SQL statement πρ?πει να κλε?σουμε το αντικε?μενο που χρησιμοποιε?ται για την εγγραφ? τη? SQL statements. Κλε?σιμο τη? σ?νδεση?myConnection.close();// Κλε?νουμε τη σ?νδεση με τη β?ση δεδομ?νων.?Παραδε?γματα διαχε?ριση? δηλ?σεων SQL - Insert-delete-update-select statementsΓια να γρ?ψουμε μια εντολ? SQL, χρησιμοποιο?με τη μ?θοδοmyStatement.methodName(sqlString);?που myStatement ε?ναι ?να αντικε?μενο τ?που Statement και methodName ε?ναι μια απ? τι? μεθ?δου? που παρ?χει η κλ?ση Statement. Θα μελετ?σουμε δι?φορε? μορφ?? τη? μεθ?δου methodName.?Στη συν?χεια, διορθ?στε το διαγραμμ?νο μ?ρο? των δηλ?σεων.?Εισαγωγ? δεδομ?νων (insert statement)Χρησιμοποιο?με τη μ?θοδο executeUpdate μ?σω τη? εντολ??:myStatement.executeUpdate(sqlString);?που sqlString ε?ναι μια συμβολοσειρ? τη? μορφ??:String sqlString = "INSERT INTO MYTABLE VALUES ('value1', 'value2')";?Διαγραφ? δεδομ?νων (delete statement)Χρησιμοποιο?με τη μ?θοδο executeUpdate μ?σω τη? εντολ??:myStatement.executeUpdate(sqlString);?που το sqlString ε?ναι τη? μορφ??:String sqlString = "DELETE FROM MYTABLE WHERE PARAM = 'paramValue'";??Ενημ?ρωση δεδομ?νων (update statement)Χρησιμοποιο?με τη μ?θοδο executeUpdate μ?σω τη? εντολ??:myStatement.executeUpdate(sqlString);?που το sqlString ε?ναι τη? μορφ??:String sqlString = "UPDATE MYTABLE SET PARAM1='value1' WHERE PARAM2='value2'";?Επιλογ? δεδομ?νων (select statement)Για επιλογ? δεδομ?νων χρησιμοποιο?με τη μ?θοδο executeQuery μ?σω τη?εντολ??:ResultSet rs = myStatement.executeQuery(sqlString);?που sqlString ε?ναι μια συμβολοσειρ? τη? μορφ??:String sqlString = "SELECT * FROM MYTABLE WHERE PARAM = 'paramValue'";Η μ?θοδο? executeQuery μα? δ?νει τη δυνατ?τητα να ανακτ?σουμε γραμμ?? δεδομ?νων απ? τη β?ση δεδομ?να. Τα δεδομ?να αυτ? πρ?πει να τα αποθηκε?σουμε προσωριν? σε κ?ποια δομ? ?στε να τα χρησιμοποι?σουμε. Η Java παρ?χει μια ε?χρηστη δομ? μ?σω τη? κλ?ση? ResultSet. Πιο συγκεκριμ?να, η μ?θοδο? ExecuteQuery μα? επιστρ?φει ?να αντικε?μενο τ?που ResultSet. Α? ονομ?σουμε το συγκεκριμ?νο αντικε?μενο rs. Μ?σα στο αντικε?μενο αυτ? αποθηκε?ονται προσωριν? ?λε? οι γραμμ?? δεδομ?νων που επιστρ?φει η δ?λωση SELECT που εκτελ?σαμε. Μ?σω του αντικειμ?νου αυτο? μπορο?με να επεξεργαστο?με τι? γραμμ?? στο πρ?γραμμ? μα?Το αντικε?μενο rs μα? παρ?χει και ?ναν δε?κτη ο οπο?ο? αρχικ? δε?χνει πρ?ν απ? την πρ?τη γραμμ? αποτελεσμ?των που ε?ναι αποθηκευμ?να στο αντικε?μενο rs. Το rs (ω? αντικε?μενο τη? κλ?ση? ResultSet) μα? παρ?χει μεθ?δου? για να επεξεργαζ?μαστε τι? γραμμ?? που ανακτ?σαμε απ? τη β?ση δεδομ?νων. Οι πιο σημαντικ?? μ?θοδοι αναφ?ρονται παρακ?τω:Για να χρησιμοποι?σουμε την πληροφορ?α που ε?ναι καταχωρημ?νη στο αντικε?μενο rs, θα πρ?πει:Να μετακιν?σουμε το δε?κτη στη γραμμ? που θ?λουμε να επεξεργασθο?με ? να τον μετακινο?με διαδοχικ? αν θ?λουμε να επεξεργασθο?με ?λε? τι? αποθηκευμ?νε? γραμμ??. Αυτ? γ?νεται με χρ?ση των μεθ?δων: next(), previous(), first(), last()Να χρησιμοποι?σουμε την κατ?λληλη μ?θοδο για να π?ρουμε πληροφορ?α απ? μια στ?λη. Αυτ? γ?νεται με τι? συναρτ?σει? getString, getInt, getFloat getDate κ.τ.λ.?Πρακτικ?? καν?να? για τη συγγραφ? δ?λωση? SQL στα προγρ?μματ? μα?:Δοκιμ?ζουμε τη δ?λωση με συγκεκριμ?νε? τιμ?? στι? μεταβλητ??. Τοποθετο?με την εντολ? σε " " και αντικαθιστο?με κ?θε συγκεκριμ?νη τιμ?, για παρ?δειγμα την τιμ? 'ANALYST'με το ?νομα τη? μεταβλητ?? γραμμ?νο με "+ +", ω? εξ??: '"+job+"'Δε?τε και το παρ?δειγμα: String sql="insert into emp(ename,job,sal,deptno) values ('"+name+"','"+job+"','"+sal+"',"+deptno+")";Παρ?δειγμα χρ?ση? embedded select statement.?Ακολουθε? παρ?δειγμα χρ?ση? τη? executeQuery που βοηθ? στην καταν?ηση του τρ?που που χρησιμοποιο?με τι? δι?φορε? μεθ?δου? τη? κλ?ση? ResultSet. ?στω ?τι ?χουμε τον παραπ?νω π?νακα myTable:myTable, ?IDIntNameTextselect * from myTable??Δημιουργε?στε ?να αρχε?ο test.jsp και γρ?ψτε τον παρακ?τω κ?δικα<%-- Document : test Created on : April 31, 2014, 8:24:04 AM Author : --%>// Import the package java.sql – all the classes<%@page import="java.sql.*" %><%@page contentType="text/html" pageEncoding="UTF-8"%><%int j=0;// Define parameters for retrieving database resultsint m[] = new int[5000];String s[] = new String[5000];// Load the driverClass.forName("com.mysql.jdbc.Driver");// Define the connection parametersString myDatabase = "jdbc:mysql://localhost:3306/personnel?user=root";// Connect to the databaseConnection myConnection = DriverManager.getConnection(myDatabase);// Create object to execute statementsStatement myStatement = myConnection.createStatement();// Select everything from the database tableString sqlString = "SELECT * FROM myTable ";ResultSet rs=myStatement.executeQuery(sqlString);// Store the results in vectors in order to pass them to the JSPwhile(rs.next()){m[j]=rs.getInt("id");s[j]=rs.getString("name");j++;}// Close the connection to the databasemyStatement.close();myConnection.close();// Print out.println("j="+j+"<br>"); for(int i=0; i<j; i++){out.println(m[i]+"");out.println(s[i]+"<br>");}%>Στη συν?χεια τρ?ξτε το πρ?γραμμα.j=31 11 ann1 tomΣ?νοψη – Επισκ?πησηΑρχικ? βλ?πουμε τον π?νακα myTable. Τα β?ματα ε?ναι τα παρακ?τω:?IDIntNameTextmyTable Oρ?ζουμε δυο παραμ?τρου?. Στι? παραμ?τρου? αυτ?? καταχωρο?με τι? τιμ?? των δυο στηλ?ν του π?νακα mytable.Φορτ?νουμε το driver και προετοιμ?ζουμε τη συμβολοσειρ? για σ?νδεση.Συνδε?μαστε, στην περ?πτωσ? μα?, με username root και κεν? password, στη β?ση δεδομ?νων mydb.Συνδε?μαστε στη β?ση δεδομ?νων, personnel, δημιουργο?με το αντικε?μενο τ?που statement και προετοιμ?ζουμε την SQL string. Εκτελο?με το SQL Statement.Μ?χρι στιγμ?? ?χουμε καταχωρ?σει ?λον τον π?νακα αποτελεσμ?των στο αντικε?μενο rs. Μ?νει να ?διαβ?σουμε? τα στοιχε?α του rs. Αυτ? γ?νεται με ?ναν βρ?χο while. Η εντολ? while(rs.next()) ?χει διπλ? ρ?λο:Εκτελε? την εντολ? rs.next(). Επιπλ?ον, ελ?γχει αν rs.next()=true. Αυτ? σημα?νει ?τι, αν rs.next()=true, τ?τε ο βρ?χο? θα εκτελεστε?. Αν rs.next()=false τ?τε ο βρ?χο? δε θα εκτελεστε? και το πρ?γραμμα θα προχωρ?σει παρακ?τω. Η μ?θοδο? next() τη? resultSet επιστρ?φει true αν υπ?ρχει επ?μενη γραμμ? για να διαβ?σει. Αν δεν υπ?ρχει επ?μενη γραμμ?, δηλαδ? ?χουμε φτ?σει στο τ?λο? των αποτελεσμ?των, τ?τε επιστρ?φει false. Με τον τρ?πο αυτ?, αν υπ?ρχει επ?μενη γραμμ?, ο βρ?χο? εκτελε?ται, και σταματ? να εκτελε?ται ?ταν οι γραμμ?? ?τελει?σουν?. Ο βρ?χο? κ?νει το εξ??:Διαβ?ζει, τι? στ?λε? τη? τρ?χουσα? γραμμ?? και τι? καταχωρε? στι? αντ?στοιχε? μεταβλητ?? του προγρ?μματο? (m[j], (m[j],), μ?σω τη? μεθ?δου getString() ? getInt().Τυπ?νει στην οθ?νη τι? παραπ?νω μεταβλητ??.?Case Study ?Διαχε?ριση β?ση? προσωπικο??Σα? αναθ?τουν να σχεδι?σετε και μα υλοποι?σετε εφαρμογ? η οπο?α αφορ? τη διαχε?ριση του προσωπικο? εταιρε?α?. Στην εφαρμογ? θα ?χουν πρ?σβαση μ?νο ?σοι χρ?στε? ε?ναι εγγεγραμμ?νοι και διαθ?τουν username –password. Αρχικ? θα εμφαν?ζεται στο χρ?στη μια login φ?ρμα ?που θα δ?νεται η δυνατ?τητα στον χρ?στη να συνδεθε?. Αφο? συνδεθε? ο χρ?στη? θα ?χει τι? παρακ?τω δυνατ?τητε?:Προβολ? ?λων των τμημ?των τη? εταιρε?α? μαζ? με τα στοιχε?α εργαζομ?νων που αν?κουν σε αυτ?.Εισαγωγ? εν?? ν?ου εργαζ?μενου.Διαγραφ? εν?? εργαζ?μενουΕνημ?ρωση των στοιχε?ων των εργαζομ?νων.Οι π?νακε? τη? εφαρμογ?? θα ε?ναι οι παρακ?τω:DROP DATABASE personnel_db;CREATE DATABASE personnel;USE personnel;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));INSERT INTO Dept(DEPTNO, DNAME, LOC) VALUES (10, 'ACCOUNTING', 'NEW YORK'); INSERT INTO Dept(DEPTNO, DNAME, LOC) VALUES (20, 'RESEARCH', 'DALLAS'); INSERT INTO Dept(DEPTNO, DNAME, LOC) VALUES (30, 'SALES', 'CHICAGO'); INSERT INTO Dept(DEPTNO, DNAME, LOC) VALUES (40, 'OPERATIONS', 'BOSTON'); 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); UPDATE dept SET no_of_employees = (SELECT COUNT(*) FROM emp WHERE emp.deptno = dept.deptno); Select * from dept; Select * from emp;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);Select * from user;Χρ?ση CursorDELIMITER $$ 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 loggging information */ CREATE TABLE infologs ( Id int(11) NOT NULL AUTO_INCREMENT, Msg varchar(255) NOT NULL, PRIMARY KEY (Id)); 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; DROP TABLE infologs; END$$ DELIMITER ; CALL CURSORPROC(); Υλοπο?ηση εφαρμογ??Τα στοιχε?α τη? σ?νδεση? ε?ναι: Ip:localhost Port:3306 Database: personnel User=root Password=Υπενθυμ?ζουμε ?τι ο χρ?στη? (βλ?πε και π?νακα user) ?χει: User=root Password=1234Στ?δια:Διαχε?ριση Σ?νδεση? Υλοποιε?ται με χρ?ση δ?ο (2) σελ?δων: index.jsp, check.jspIndex.jspΑν δοθο?ν λανθασμ?να στοιχε?α τ?τε<%-- Document : index Created on : April 30, 2014, 2:04:01 PM Author : --%><%@page 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><%-- Document : check Created on : April 30, 2014, 2:12:02 PM Author : --%><%@page import="java.sql.*" %><%@page 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; 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"; 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(); 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>Σημαντικ? σημε?ωση?στω ?τι τα στοιχε?α τη? σ?νδεση? ε?ναι: Ip:localhost Port:3306 Database: personnel User=root Password=1234Τ?τε αντ? τη? εντολ?? String DB = "jdbc:mysql://localhost:3306/personnel?user=root";Χρησιμοποιο?με την εντολ?: String DB = "jdbc:mysql://localhost:3306/personnel_db?user=root&password=1234";Προβολ? ?λων των εργαζομ?νων και των τμημ?των στα οπο?α αν?κουν.Υλοποιε?ται με χρ?ση τη? σελ?δα? (home.jsp)κ.λπ.<%-- Document : home Created on : April 30, 2014, 2:26:58 PM Author : --%><%@page import="java.sql.*" %><%@page contentType="text/html" pageEncoding="UTF-8"%><!DOCTYPE html> <% Integer empno[]=new Integer[100]; String name[]=new String[100]; String job[]=new String[100];int i; Class.forName("com.mysql.jdbc.Driver"); String DB = "jdbc:mysql://localhost:3306/personnel?user=root"; Connection myConnection = DriverManager.getConnection(DB); Statement SMT = myConnection.createStatement(); Statement SMT1 = myConnection.createStatement(); %><html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> <% 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"); %> <br> <INPUT TYPE="BUTTON" VALUE="ΠΡΟΣΘΗΚΗ ΕΝΟΣ ΝΕΟΥ ΕΡΓΑΖΟΜΕΝΟΥ" style="font-size:7px" ONCLICK="window.location.href='insert.jsp?deptno=<%= i%>'"> <% out.println(" <br>Oι εργαζ?μενοι στο Τμ?μα:"+dname+" ε?ναι οι:"); while(rs1.next()) { name[count]=rs1.getString("ename"); job[count]=rs1.getString("job"); empno[count]=rs1.getInt("empno"); %> <br> <%= name[count]%> (<%= job[count]%>) <INPUT TYPE="BUTTON" VALUE="ΑΛΛΑΓΗ" style="font-size:7px" ONCLICK="window.location.href='update.jsp?empno=<%= empno[count]%>'"> <INPUT TYPE="BUTTON" VALUE="ΔΙΑΓΡΑΦΗ " style="font-size:7px" ONCLICK="window.location.href='delete.jsp?empno=<%= empno[count]%>'"> <br> <% String x="o"; }}%> <% SMT.close(); SMT1.close(); myConnection.close(); %> </body></html>Εισαγωγ? Ν?ου εργαζ?μενου (insert.jsp, ins_submit.jsp)Για παρ?δειγμαΕνημ?ρωση στοιχε?ων εργαζομ?νων (update.jsp, up_submit.jsp)Αν συνδεθο?με εκ ν?ου θα δο?μεκ.λπ.Επιλ?γουμε ΑΛΛΑΓΗ για τον υπ?λληλο ANDREW.Αλλ?ζουμε τα στοιχε?αΕπιλ?γουμε update οπ?τε ενημερ?νεται η γραμμ? και επιστρ?φουμε στην αρχικ? φ?ρμα: Διαγραφ? εν?? εργαζομ?νου (delete.jsp)Αν συνδεθο?με εκ ν?ου θα δο?με κ.λπ.Αν επιλ?ξουμε ΔΙΑΓΡΑΦΗ για τον υπ?λληλο ANDREW διαγρ?φεται ο υπ?λληλο?.Σημε?ωση: Θα ?πρεπε να βλ?παμε ?λα τα στοιχε?α του πριν τον διαγρ?ψουμε. Επιπλ?ον, θα ?πρεπε να υπ?ρχει και επιβεβα?ωση πριν απ? τη διαγραφ?. Γενικ? θα μπορο?σαμε να βελτι?σουμε σε πολλ? σημε?α την εφαρμογ? με σχετικ? απλ? τρ?πο! <%-- Document : insert Created on : April 30, 2014, 2:32:55 PM Author : --%><%@page 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> <form name="insert" method="get" action="ins_submit.jsp"> Name<input type="text" name="ename"><br> Job<input type="text" name="job"><br> Salary<input type="text" name="sal"><br> <input type="hidden" name="deptno" value="<%= request.getParameter("deptno") %>"> <input type="submit" value="insert"> </form> </body></html><%-- Document : ins_submit Created on : April 30, 2014, 2:34:18 PM Author : --%><%@page import="java.sql.*"%><%@page 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> <% 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(); %> </body></html><%-- Document : update Created on : April 30, 2014, 2:35:38 PM Author : --%><%@page contentType="text/html" pageEncoding="UTF-8"%><!DOCTYPE html> <%@page import="java.sql.*"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> <% 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 job="",sal="",ename=""; int empno=Integer.parseInt(request.getParameter("empno")); String sql="select * from emp where empno="+empno; ResultSet rs= SMT.executeQuery(sql); while(rs.next()){ job=rs.getString("job"); sal=rs.getString("sal"); ename=rs.getString("ename"); } %> <form name="insert" method="get" action="up_submit.jsp"> Name<input type="text" name="ename" value="<%= ename%>"><br> Job<input type="text" name="job"value="<%= job%>"><br> Salary<input type="text" name="sal" value="<%= sal%>"><br> <input type="hidden" name="empno" value="<%= empno%>"> <input type="submit" value="update"> </form> </body></html><%-- Document : up_submit Created on : April 30, 2014, 2:37:10 PM Author : --%><%@page import="java.sql.*"%><%@page 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> <% 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 empno=Integer.parseInt(request.getParameter("empno")); String sql="update emp set ename ='"+name+"' where empno="+empno; SMT.executeUpdate(sql); sql="update emp set job ='"+job+"' where empno="+empno; SMT.executeUpdate(sql); sql="update emp set sal ='"+sal+"' where empno="+empno; SMT.executeUpdate(sql); String URL = "index.jsp"; response.sendRedirect(URL); SMT.close(); myConnection.close(); %> </body></html><%-- Document : delete Created on : April 30, 2014, 2:38:19 PM Author : --%><%@page import="java.sql.*"%><%@page 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> <% Class.forName("com.mysql.jdbc.Driver"); String DB = "jdbc:mysql://localhost:3306/personnel?user=root"; Connection myConnection = DriverManager.getConnection(DB); Statement SMT = myConnection.createStatement(); int empno=Integer.parseInt(request.getParameter("empno")); String sql="delete from emp where empno="+empno; SMT.executeUpdate(sql); String URL = "index.jsp"; response.sendRedirect(URL); SMT.close(); myConnection.close(); %> </body></html>Δημιουργ?α β?ση? δεδομ?νωνCREATE DATABASE personnel;USE personnel;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));INSERT INTO Dept(DEPTNO, DNAME, LOC) VALUES (10, 'ACCOUNTING', 'NEW YORK'); INSERT INTO Dept(DEPTNO, DNAME, LOC) VALUES (20, 'RESEARCH', 'DALLAS'); INSERT INTO Dept(DEPTNO, DNAME, LOC) VALUES (30, 'SALES', 'CHICAGO'); INSERT INTO Dept(DEPTNO, DNAME, LOC) VALUES (40, 'OPERATIONS', 'BOSTON'); 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); UPDATE dept SET no_of_employees = (SELECT COUNT(*) FROM emp WHERE emp.deptno = dept.deptno); Select * from dept; Select * from emp;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);Select * from user;Ανοικτ? Ακαδημα?κ? Μαθ?ματαΤεχνολογικ? Εκπαιδευτικ? ?δρυμα Αθ?να?Τ?λο? Εν?τητα?Χρηματοδ?τησηΤο παρ?ν εκπαιδευτικ? υλικ? ?χει αναπτυχθε? στα πλα?σια του εκπαιδευτικο? ?ργου του διδ?σκοντα.Το ?ργο ?Ανοικτ? Ακαδημα?κ? Μαθ?ματα στο ΤΕΙ Αθ?να?? ?χει χρηματοδοτ?σει μ?νο τη αναδιαμ?ρφωση του εκπαιδευτικο? υλικο?. Το ?ργο υλοποιε?ται στο πλα?σιο του Επιχειρησιακο? Προγρ?μματο? ?Εκπα?δευση και Δια Β?ου Μ?θηση? και συγχρηματοδοτε?ται απ? την Ευρωπα?κ? ?νωση (Ευρωπα?κ? Κοινωνικ? Ταμε?ο) και απ? εθνικο?? π?ρου?.Σημει?ματαΣημε?ωμα Αναφορ??Copyright ΤΕΙ Αθ?να?, Χ. Σκουρλ??, Α. Τσολακ?δη?, Δ. Β?σση?. Χ. Σκουρλ??, Α. Τσολακ?δη?, Δ. Β?σση?. ?Β?σει? Δεδομ?νων ΙΙ. Εν?τητα 13: Επισκ?πηση τη? χρ?ση? του jdbc API?. ?κδοση: 1.0. Αθ?να 2014. Διαθ?σιμο απ? τη δικτυακ? διε?θυνση: ocp.teiath.gr.Σημε?ωμα Αδειοδ?τηση?Το παρ?ν υλικ? διατ?θεται με του? ?ρου? τη? ?δεια? χρ?ση? Creative Commons Αναφορ?, Μη Εμπορικ? Χρ?ση Παρ?μοια Διανομ? 4.0 [1] ? μεταγεν?στερη, Διεθν?? ?κδοση. Εξαιρο?νται τα αυτοτελ? ?ργα τρ?των π.χ. φωτογραφ?ε?, διαγρ?μματα κ.λ.π., τα οπο?α εμπερι?χονται σε αυτ? και τα οπο?α αναφ?ρονται μαζ? με του? ?ρου? χρ?ση? του? στο ?Σημε?ωμα Χρ?ση? ?ργων Τρ?των?.[1] Ω? Μη Εμπορικ? ορ?ζεται η χρ?ση:που δεν περιλαμβ?νει ?μεσο ? ?μμεσο οικονομικ? ?φελο? απ? την χρ?ση του ?ργου, για το διανομ?α του ?ργου και αδειοδ?χοπου?δεν περιλαμβ?νει οικονομικ? συναλλαγ? ω? προ?π?θεση για τη χρ?ση ? πρ?σβαση στο ?ργοπου?δεν προσπορ?ζει στο διανομ?α του ?ργου και?αδειοδ?χο??μμεσο οικονομικ? ?φελο? (π.χ. διαφημ?σει?) απ? την προβολ? του ?ργου σε διαδικτυακ? τ?ποΟ δικαιο?χο? μπορε? να παρ?χει στον αδειοδ?χο ξεχωριστ? ?δεια να χρησιμοποιε? το ?ργο για εμπορικ? χρ?ση, εφ?σον αυτ? του ζητηθε?.Διατ?ρηση Σημειωμ?τωνΟποιαδ?ποτε αναπαραγωγ? ? διασκευ? του υλικο? θα πρ?πει να συμπεριλαμβ?νει:το Σημε?ωμα Αναφορ??το Σημε?ωμα Αδειοδ?τηση?τη δ?λωση Διατ?ρηση? Σημειωμ?των το Σημε?ωμα Χρ?ση? ?ργων Τρ?των (εφ?σον υπ?ρχει)μαζ? με του? συνοδευ?μενου? υπερσυνδ?σμου?.Σημε?ωμα Χρ?ση? ?ργων Τρ?των ................
................

In order to avoid copyright disputes, this page is only a partial summary.

Google Online Preview   Download