1 / 15

JAVA και SQL

JAVA και SQL. Δαμιανός Χατζηαντωνίου Τμήμα Διδακτικής της Τεχνολογίας και Ψηφιακών Συστημάτων Πανεπιστήμιο Πειραιώς. E πικοινωνία με διεπαφή JDBC/ODBC - Γενικά.

callie
Download Presentation

JAVA και SQL

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. JAVA και SQL Δαμιανός Χατζηαντωνίου Τμήμα Διδακτικής της Τεχνολογίας και Ψηφιακών Συστημάτων Πανεπιστήμιο Πειραιώς

  2. Eπικοινωνία με διεπαφή JDBC/ODBC - Γενικά • Σε αυτή την περίπτωση εισάγουμε ένα επίπεδο μεταξύ γλώσσας προγραμματισμού και Β.Δ., μέσω του οποίου γίνεται η επικοινωνία τους. Υπάρχει το ODBC (γενικής εφαρμογής) και το JDBC (για γλώσσα Java). • Ποια είναι η διαφορά με την ενσωματωμένη SQL ??? • Η επικοινωνία με τη ΒΔ γίνεται με system calls της host γλώσσας προγραμματισμού. Συνεπώς, για κάθε διαφορετικό ΣΔΒΔ πρέπει να δημιουργείται και διαφορετικό σύνολο system calls. Αυτό συνεπάγεται ότι για ν ΣΔΒΔ θα υπάρχουν ν implementations. Αντίθετα, με ένα ενδιάμεσο επίπεδο, αρκεί η γλώσσα να «μιλάει» με αυτό (DB-independent.) • Νο free lunch: κόστος -> αποδοτικότητα

  3. Eπικοινωνία με διεπαφή JDBC/ODBC - ODBC • Open Database Connectivity- Αναπτύχθηκε από τη Microsoft Corp. • Το ODBC είναι ένα ευρέως διαδεδομένο API (application programming interface) γιαπρόσβαση και χειρισμό βάσεων δεδομένων. • Ο στόχος είναι κάθε εφαρμογή να έχει πρόσβαση σε οποιαδήποτε δεδομένα, ανεξαρτήτου συστήματος. • Το ODBC δημιουργείένα middle layer (database driver) - μεταξύτης εφαρμογής (στην περίπτωση μας Java) και της Β.Δ. H Java στέλνει SQL στο ODBC και περιμένει την απάντηση.

  4. Eπικοινωνία με διεπαφή JDBC/ODBC - ODBC • Αυτό το layer μεταφράζει τα ερωτήματα της εφαρμογής σε εντολές που καταλαβαίνει η Β.Δ • Η SQL χρησιμοποιείται σαν η γλώσσα πρόσβασης στη Β.Δ. Oracle Application A ODBC Driver for Oracle Application B ODBC Driver for IBM DB2 DB2 ODBC Driver for SQL Server Application C SQL Server Application D

  5. Eπικοινωνία με διεπαφή JDBC/ODBC - ODBC • To open Data Sources (ODBC), click Start, point to Settings, and then click Control Panel. Double-click Administrative Tools, and then double-click Data Sources (ODBC). • For information about using Data Sources (ODBC), click Help in the ODBC Data Source Administrator dialog box.

  6. Eπικοινωνία με διεπαφή JDBC/ODBC - JDBC • Type 1: JDBC-ODBC bridge; Μεταφράζει standard JDBC calls σε ένα αντίστοιχο ODBC call και το στέλνει στο ΣΔΒΔ. • Type 2:απευθείας μετάφραση σε API άμεσης συγγένειας με το ΣΔΒΔ. Τα JDBC calls μεταφράζονται σε κάτο που το ΑΡΙ καταλαβαίνει. • Type 3:middle-tiers • Type 4: all-Java driver που στέλνει αιτήματα απευθείας στο ΣΔΒΔ. Όλα τα μεγάλα συστήματα ΔΒΔ έχουν τύπου-4 JDBC drivers.

  7. Eπικοινωνία με διεπαφή JDBC/ODBC– Java • Σύνδεση με τη ΒΔ • Εκτέλεση ενός SQL αιτήματος. Μπορεί να είναι δύο ειδών: • select...from...where • insert/update/delete • Αποσύνδεση με τη ΒΔ

  8. Eπικοινωνία με διεπαφή JDBC/ODBC – Σύνδεση με ΒΔ Πρέπει να εισάγουμε τα κατάλληλα packages στο πρόγραμμα μας: import java.sql.*; Connecting to database: Connection dbcon; Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); dbcon = DriverManager.getConnection(“jdbc:odbc:employeedb”); • Χρειάζεται να δηλώσουμε μία μεταβλητή τύπου Connection • Πρέπει να δηλώσουμε τι είδους JDBC driver θα χρησιμοποιήσουμε • Εάν είναι JDBC-ODBC bridge, πρέπει να δηλώσουμε το όνομα του ODBC

  9. Eπικοινωνία με διεπαφή JDBC/ODBC– Εκτέλεση SQL Πρέπει να δηλώσουμε ένα SQL statement (όχι insert/delete/update), να το εκτελέσουμεκαι να πάρουμε το αποτέλεσμα. Statement stmt = dbcon.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM Employee ORDER BY Salary"); while (rs.next()) { out.println(rs.getString(“SSN")); out.println(rs.getString(“Name")); out.println(rs.getString(“Salary")); } rs.close(); stmt.close(); λογικός δρομέας όνομα γνωρίσματος

  10. Eπικοινωνία με διεπαφή JDBC/ODBC– Εκτέλεση SQL Πρέπει να δηλώσουμε ένα SQL statement (insert/delete/update) και να το εκτελέσουμε. Statement stmt = dbcon.createStatement(); stmt.executeUpdate("UPDATE Employee SET Salary = Salary * 1.05”); stmt.close(); Τέλος πρέπει να κλείσουμε τη σύνδεση με τη ΒΔ: dbcon.close();

  11. Eπικοινωνία με διεπαφή JDBC/ODBC– Java Παράδειγμα Το επόμενο παράδειγμα εισάγει έναν υπάλληλο, αφού πρώτα ελέγξει αν υπάρχει άλλος με το ίδιο SSN. import java.io.*; import java.text.*; import java.util.*; import java.sql.*; public class example { public static void main(String args[]) { Connection dbcon; String url = "jdbc:odbc:employeedb"; Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); dbcon = DriverManager.getConnection(url,“sa", ""); Statement stmt; ResultSet rs; int rec_counter; String SSN = “230102211”; String Name = “John Johnson”; int Salary = 4301; int DeptCode = 312;

  12. Eπικοινωνία με διεπαφή JDBC/ODBC– Java Παράδειγμα • Το επόμενο παράδειγμα εισάγει έναν υπάλληλο, αφού πρώτα ελέγξει αν υπάρχει άλλος με το ίδιο SSN (συνέχεια). stmt = dbcon.createStatement(); rs = stmt.executeQuery("SELECT * FROM Employee WHERE SSN=‘"+SSN+”’”); rec_counter=0; while (rs.next()) { rec_counter++; if (rec_counter==1) break; } rs.close(); if (rec_counter!=0) // SSN already exists System.out.println("Code already exists. Try again."); else // create new item stmt.executeUpdate("INSERT INTO Employee VALUES (‘“+ SSN +“’,’” + Name + ”’,” + Salary+”,” + DeptCode + ”)”); stmt.close(); dbcon.close(); } }

  13. Άσκηση • Έστω ότι έχετε την ακόλουθη περιγραφή ενός πίνακα: Sales(cust_idint, prod_id int , day int, month int, year int, amount real) • Γράψτε ένα Java πρόγραμμα που να παίρνει σαν παράμετρο τον αριθμό πελάτηκαι να υπολογίζει το σύνολο των αγορών του το μήνα Ιούνιο του 2001.

  14. Λύση import java.io.*; import java.text.*; import java.util.*; import java.sql.*; public class DBexample1 { public static void main(String args[]) { float total=0, amount; int month, year, cust; String url = "jdbc:odbc:salesdb"; Connection dbcon ; Statement stmt; ResultSet rs;

  15. /* declare ODBC conectivity */ try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); } catch(java.lang.ClassNotFoundException e) { System.out.print("ClassNotFoundException: "); System.out.println(e.getMessage()); } /* execute SQL statements */ try { dbcon = DriverManager.getConnection(url,"",""); stmt = dbcon.createStatement(); rs = stmt.executeQuery("SELECT * FROM Sales"); while (rs.next()) { cust=rs.getInt("cust_id"); month=rs.getInt("month"); year=rs.getInt("year"); amount=rs.getFloat("amount"); if (cust==2 && month==6 && year==2001) total+=amount; } rs.close(); System.out.println(total); stmt.close(); dbcon.close(); } catch(SQLException e) { System.out.print("SQLException: "); System.out.println(e.getMessage()); } } }

More Related