JAVA και SQL

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

description

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

Transcript of JAVA και SQL

Page 1: JAVA  και  SQL

1

JAVA και SQL

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

Page 2: JAVA  και  SQL

Βάσεις Δεδομένων I - ΔΤΨΣ 2

Eπικοινωνία με διεπαφή JDBC/ODBC - Γενικά

• Σε αυτή την περίπτωση εισάγουμε ένα επίπεδο μεταξύ γλώσσας προγραμματισμού και Β.Δ., μέσω του οποίου γίνεται η επικοινωνία τους. Υπάρχει το ODBC (γενικής εφαρμογής) και το JDBC (για γλώσσα Java).• Ποια είναι η διαφορά με την ενσωματωμένη SQL ???

• Η επικοινωνία με τη ΒΔ γίνεται με system calls της host γλώσσας προγραμματισμού. Συνεπώς, για κάθε διαφορετικό ΣΔΒΔ πρέπει να δημιουργείται και διαφορετικό σύνολο system calls. Αυτό συνεπάγεται ότι για ν ΣΔΒΔ θα υπάρχουν ν implementations. Αντίθετα, με ένα ενδιάμεσο επίπεδο, αρκεί η γλώσσα να «μιλάει» με αυτό (DB-independent.)• Νο free lunch: κόστος -> αποδοτικότητα

Page 3: JAVA  και  SQL

Βάσεις Δεδομένων I - ΔΤΨΣ 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 και περιμένει την απάντηση.

Page 4: JAVA  και  SQL

Βάσεις Δεδομένων I - ΔΤΨΣ 4

Eπικοινωνία με διεπαφή JDBC/ODBC - ODBC

• Αυτό το layer μεταφράζει τα ερωτήματα της εφαρμογής σε εντολές που καταλαβαίνει η Β.Δ

• Η SQL χρησιμοποιείται σαν η γλώσσα πρόσβασης στη Β.Δ.

ODBC Driver for Oracle

ODBC Driver for IBM DB2

ODBC Driver for SQL Server

Application A

Application B

Application C

Application D

Oracle

DB2

SQL Server

Page 5: JAVA  και  SQL

Βάσεις Δεδομένων I - ΔΤΨΣ 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.

Page 6: JAVA  και  SQL

Βάσεις Δεδομένων I - ΔΤΨΣ 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.

Page 7: JAVA  και  SQL

Βάσεις Δεδομένων I - ΔΤΨΣ 7

Eπικοινωνία με διεπαφή JDBC/ODBC – Java

• Σύνδεση με τη ΒΔ• Εκτέλεση ενός SQL αιτήματος. Μπορεί να είναι δύο ειδών:

• select...from...where• insert/update/delete

•Αποσύνδεση με τη ΒΔ

Page 8: JAVA  και  SQL

Βάσεις Δεδομένων I - ΔΤΨΣ 8

Eπικοινωνία με διεπαφή JDBC/ODBC – Σύνδεση με ΒΔ

Connecting to database:

Connection dbcon;Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");dbcon = DriverManager.getConnection(“jdbc:odbc:employeedb”);

• Χρειάζεται να δηλώσουμε μία μεταβλητή τύπου Connection• Πρέπει να δηλώσουμε τι είδους JDBC driver θα χρησιμοποιήσουμε• Εάν είναι JDBC-ODBC bridge, πρέπει να δηλώσουμε το όνομα του ODBC

Πρέπει να εισάγουμε τα κατάλληλα packages στο πρόγραμμα μας:

import java.sql.*;

Page 9: JAVA  και  SQL

Βάσεις Δεδομένων I - ΔΤΨΣ 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();

όνομα γνωρίσματος

λογικός δρομέας

Page 10: JAVA  και  SQL

Βάσεις Δεδομένων I - ΔΤΨΣ 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();

Page 11: JAVA  και  SQL

Βάσεις Δεδομένων I - ΔΤΨΣ 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;

Page 12: JAVA  και  SQL

Βάσεις Δεδομένων I - ΔΤΨΣ 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();}}

Page 13: JAVA  και  SQL

Βάσεις Δεδομένων I - ΔΤΨΣ 13

ΆσκησηΈστω ότι έχετε την ακόλουθη περιγραφή ενός

πίνακα:

Sales(cust_id int, prod_id int , day int, month int, year int,

amount real)

Γράψτε ένα Java πρόγραμμα που να παίρνει σαν παράμετρο τον αριθμό πελάτη και να υπολογίζει το σύνολο των αγορών του το μήνα Ιούνιο του 2001.

Page 14: JAVA  και  SQL

Βάσεις Δεδομένων I - ΔΤΨΣ 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;

Page 15: JAVA  και  SQL

Βάσεις Δεδομένων I - ΔΤΨΣ 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()); }

}}