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

Σχετικά έγγραφα
ΚΕΡΑΜΟΠΟΥΛΟΣ ΕΥΚΛΕΙΔΗΣ

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

( Boats)) ( Tempsids, bid. sname. Boats. Boats. Boats. (Reserves)/ > Reserves. Interlake' Sailors) ...

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

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

ΕΣΔ 232: ΟΡΓΑΝΩΣΗ ΔΕΔΟΜΕΝΩΝ ΣΤΗΝ ΚΟΙΝΩΝΙΑ ΤΗΣ ΠΛΗΡΟΦΟΡΙΑΣ. Ακαδημαϊκό Έτος , Εαρινό Εξάμηνο Διδάσκων Καθ.: Νίκος Τσαπατσούλης

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

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

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

SQL: Αιτήματα. Κεφάλαιο 5. Database Management Systems, R. Ramakrishnan and J. Gehrke

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

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

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

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

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 2 : ΜΕΤΑΒΛΗΤΕΣ ΤΕΛΕΣΤΕΣ & ΕΚΦΡΑΣΕΙΣ ΕΛΕΓΧΟΣ ΡΟΗΣ

ΑΠΟΘΗΚΕΥΜΕΝΕΣ ΔΙΑΔΙΚΑΣΙΕΣ

ΤΑΞΙΝΟΜΗΣΗ ΑΠΟΤΕΛΕΣΜΑΤΩΝ ΕΡΩΤΗΜΑΤΟΣ

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

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

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

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

Περιγραφή της εργασίας

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

Lecture 3: Introduction III

SQL: Αιτήματα. ( Συνέχεια...) Κεφάλαιο 5. Ενηµέρωση: 23/12/2008. Database Management Systems, R. Ramakrishnan and J. Gehrke

Οδηγίες Χρήσης της MySQL

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

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

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

ιαδικτυακές Εφαρµογές

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

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

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

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

, Evaluation of a library against injection attacks

Σχεσιακή Άλγεβρα. Κεφάλαιο 4. Database Management Systems, R. Ramakrishnan and J. Gehrke

Προηγμένα Πληροφοριακά Συστήματα. Ακαδημαϊκό Έτος

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

Οδηγίες Χρήσης της MySQL

Query-by-Example (QBE)

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

9:00-10:00 π.μ. (60 λεπτά) Παρασκευή, 14 Οκτωβρίου, 2016

Το σχεσιακό μοντέλο βάσεων δεδομένων

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

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

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

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

ΚΕΦΑΛΑΙΟ Web Services

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

ΕΠΛ131 Αρχές Προγραμματισμού

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

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

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

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

Εαρινό Εξάμηνο

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

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

Το Σχεσιακό μοντέλο και η γλώσσα SQL

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

Κεφάλαιο 14 Διασύνδεση με Εφαρμογές JAVA

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

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

ΘΕΜΑΤΑ. Ερώτηση 1 Κατά τη Φυσική Αποθήκευση (Physical storage) μιας ΒΔ αποθηκεύονται στον δίσκο τα:

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07

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

2.1. Εντολές Σχόλια Τύποι Δεδομένων

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

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

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Έλεγχος ισότητας String Interning Αποαναφοροποίηση - dereferencing

Χειμερινό εξάμηνο Πέτρος Κωμοδρόμος. eng.ucy.ac.cy/petros

1. ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΤΗΣ MySQL

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

Κατασκευαστές. Μέθοδοι Κατασκευής (Constructors).

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

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

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

Σχηματίζοντας Γραφικές Παραστάσεις για Ημίτονο και Συνημίτονο και Ελέγχοντας Περιορισμούς σε Συστάδες Καρτών Τόμπολας

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

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

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

Αντικείµενα. ηµιουργία και χρησιµοποίηση αντικειµένων. ηµιουργία αντικειµένων

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Εργαστήριο Βάσεων Δεδομένων. Εισαγωγή στη MySQL (1)

Κεφάλαιο Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C

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

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 13/12/07

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

Η Γλώσσα SQL. Μέρος β. Η Γλώσσα SQL Σελίδα 1

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 4 : CLASSES

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός μνήμης Αντικείμενα παράμετροι String Interning

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

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

ΕΠΛ131 Αρχές Προγραμματισμού

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

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

BΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ ΕΞΕΤΑΣΗ ΦΕΒΡΟΥΑΡΙΟΥ 2013

HY340, 2009 Α. Σαββίδης Slide 2 / 143. HY340, 2009 Α. Σαββίδης Slide 3 / 143. HY340, 2009 Α. Σαββίδης Slide 4 / 143

Transcript:

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

Τα μεταδεδομένα είναι δεδομένα για τα δεδομένα (data about data). Περιγράφουν τη δομή μίας βάσης ή ενός συγκεκριμένου τύπου δεδομένων όπως ενός αντικειμένου, ενός πίνακα. Δρ. Κεραμόπουλος Ευκλείδης 2

ResultSetMetaData προσφέρει πληροφορίες σχετικά με τις στήλες ενός αντικειμένου ResultSet DatabaseMetaData προσφέρει πληροφορίες σχετικά με τη δομή μιας βάσης δεδομένων. ParameterMetaData προσφέρει πληροφορίες σχετικά με τις παραμέτρους ενός αντικειμένου PreparedStatement Δρ. Κεραμόπουλος Ευκλείδης 3

Το πρώτο βήμα για να έχουμε πρόσβαση σε ResultSet Metadata είναι να ορίσουμε το αντίστοιχο αντικείμενο. Παράδειγμα: Έστω con ένα αντικείμενο της τάξης Connection το οποίο έχει δημιουργηθεί για μία σύνδεση με μία πηγή δεδομένων String Select_Query = Select * from Sailor Statement stmt = con.createstatement(); ResultSet rs = stmt.executequery(select_query); ResultSetMetaData rsmd = rs.getmetadata(); Δρ. Κεραμόπουλος Ευκλείδης 5

Μέθοδος getcolumncount Επιστρέφει τον αριθμό των στηλών που περιέχει το resultset. int getcolumncount() throws SQLException Παράδειγμα int numberofcolumns = rsmd.getcolumncount(); System.out.println("Number of columns: "+numberofcolumns); Number of columns: 4 Δρ. Κεραμόπουλος Ευκλείδης 6

Μέθοδος getcolumnlabel Επιστρέφει τα ονόματα των στηλών που περιέχει το resultset. String getcolumnlabel(int column) throws SQLException Παράδειγμα for (int i = 1; i<= numberofcolumns; i++){ String columnname = rsmd.getcolumnlabel(i); System.out.println(columnName); } sid sname rating age Δρ. Κεραμόπουλος Ευκλείδης 7

Μέθοδος getcolumntype Επιστρέφει τον αντίστοιχο JDBC τύπο ενός SQL τύπου μίας συγκεκριμένης στήλης. int getcolumntype(int column) throws SQLException Παράδειγμα int jdbctype = rsmd.getcolumntype(1); int jdbctype = rsmd.getcolumntype(2); type 4 type 7 Δρ. Κεραμόπουλος Ευκλείδης 8

Μέθοδος getcolumntypename Επιστρέφει τον SQL τύπο που αντιστοιχεί σε έναν JDBC τύπο. Το αλφαριθμητικό που επιστρέφεται είναι διαφορετικό ανάλογα με το DBMS. String getcolumntypename(int column) throws SQLException Παράδειγμα String name = rsmd.getcolumntypename(1); String name = rsmd.getcolumntypename(2); Int4 float4 Δρ. Κεραμόπουλος Ευκλείδης 9

Παράδειγμα 1. ResultSet rs = statement.executequery("select * from Sailors"); 2. ResultSetMetaData rsmd = rs.getmetadata(); 3. int numberofcolumns = rsmd.getcolumncount(); 4. System.out.print("Number of columns: " + numberofcolumns); 5. for (int i=1; i <= numberofcolumns; i++) { 6. String label = rsmd.getcolumnlabel(i); 7. int jdbctype = rsmd.getcolumntype(i); 8. String name = rsmd.getcolumntypename(i); 9. System.out.print("Column "+i+ " " + label + " is JDBC type "); 10. System.out.println(jdbcType + ", which is DBMS type " + name); 11. } Number of columns: 4 Column: 1 sid is JDBC type 4, which is DBMS type int4 Column: 2 sname is JDBC type 1, which is DBMS type char Column: 3 rating is JDBC type 4, which is DBMS type int4 Column: 4 age is JDBC type 7, which is DBMS type float4 Δρ. Κεραμόπουλος Ευκλείδης 10

1. import java.sql.*; 2. public class Meta1 { ΠΑΡΑΔΕΙΓΜΑ 1ο 3. static String driverclassname = "org.postgresql.driver" ; 4. static String url = "jdbc:postgresql://aetos.it.teithe.gr:5432/db2lab1" ; 5. static Connection dbconnection = null; 6. static String username = "db090"; 7. static String passwd = "69L14"; 8. static Statement statement = null; 9. static ResultSet rs = null; 10. public static void main (String[] argv) throws Exception 11. { 12. Class.forName (driverclassname); 13. dbconnection = DriverManager.getConnection (url, username, passwd); 14. statement = dbconnection.createstatement(); 15. ResultSet rs = statement.executequery("select * from Sailors"); 16. ResultSetMetaData rsmd = rs.getmetadata(); Δρ. Κεραμόπουλος Ευκλείδης 11

17. int numberofcolumns = rsmd.getcolumncount(); 18. System.out.println("Column of columns: "+numberofcolumns); 19. int j = 0; 20. for (int i = 1; i<= numberofcolumns; i++){ 21. String columnname = rsmd.getcolumnlabel(i); 22. System.out.print(columnName+ " "); 23. } Δρ. Κεραμόπουλος Ευκλείδης 12

24. System.out.println(""); 25. String columnvalue; 26. while (rs.next()) { 27. for (int i = 1; i<= numberofcolumns; i++) { 28. columnvalue = rs.getstring(i); 29. System.out.print(columnvalue + " "); 30. j = j + 1; 31. if (j==4) { 32. System.out.println(""); 33. j = 0; 34. } 35. } 36. } 37. statement.close(); 38. dbconnection.close(); 39. } 40. } Δρ. Κεραμόπουλος Ευκλείδης 13

Number of columns: 4 sid sname rating age 22 Dustin 7 45 29 Brutus 1 33 31 Lubber 8 55.5 32 Andy 8 25.5 58 Rusty 10 35 64 Horatio 7 35 71 Zorba 10 16 74 Horatio 9 40 85 Art 3 25.5 95 Bob 3 63.5 Δρ. Κεραμόπουλος Ευκλείδης 14

1. import java.sql.*; 2. public class Meta1 { ΠΑΡΑΔΕΙΓΜΑ 2ο 3. static String driverclassname = "org.postgresql.driver" ; 4. static String url = "jdbc:postgresql://aetos.it.teithe.gr:5432/db2lab1" ; 5. static Connection dbconnection = null; 6. static String username = "db090"; 7. static String passwd = "69L14"; 8. static Statement statement = null; 9. static ResultSet rs = null; 10. public static void main (String[] argv) throws Exception 11. { 12. Class.forName (driverclassname); 13. dbconnection = DriverManager.getConnection (url, username, passwd); 14. statement = dbconnection.createstatement(); 15. ResultSet rs = statement.executequery("select * from Sailors"); 16. ResultSetMetaData rsmd = rs.getmetadata(); Δρ. Κεραμόπουλος Ευκλείδης 15

17. int numberofcolumns = rsmd.getcolumncount(); 18. for (int i = 1; i <= numberofcolumns; i++) { ΠΑΡΑΔΕΙΓΜΑ 2ο 19. String colname = rsmd.getcolumnname(i); 20. String typename = rsmd.getcolumntypename(i); 21. System.out.println("Information for column " + colname); 22. System.out.println(" DBMS SQL name for type is " + typename); 23. } 24. statement.close(); 25. dbconnection.close(); 26. } 27. } Δρ. Κεραμόπουλος Ευκλείδης 16

Information for column sid DBMS SQL name for type is int4 Information for column sname DBMS SQL name for type is bpchar Information for column rating DBMS SQL name for type is int4 Information for column age DBMS SQL name for type is float4 Δρ. Κεραμόπουλος Ευκλείδης 17

Το πρώτο βήμα για να έχουμε πρόσβαση σε Database Metadata είναι να ορίσουμε το αντίστοιχο αντικείμενο. Παράδειγμα: DatabaseMetaData dbmd = con.getmetadata(); con μεταβλητή που δημιουργήθηκε από Connection αντικείμενο Δρ. Κεραμόπουλος Ευκλείδης 19

Μέθοδος getcatalogs Επιστρέφει το όνομα των catalogs μίας Βάσης Δεδομένων ResultSet getcatalogs() throws SQLException Tο ResultSet επιστρέφει μία στήλη: 1. TABLE_CAT Περιέχει το όνομα του catalog Δρ. Κεραμόπουλος Ευκλείδης 20

Μέθοδος getschemas Επιστρέφει το όνομα του σχήματος ResultSet getschemas() throws SQLException Tο ResultSet επιστρέφει δύο στήλες. Από αυτές ενδιαφέρον έχει η: 1. TABLE_SCHEM Περιέχει το όνομα του σχήματος Δρ. Κεραμόπουλος Ευκλείδης 21

Μέθοδος getdatabaseproductname Επιστρέφει το όνομα του dbms String getdatabaseproductname() throws SQLException Δρ. Κεραμόπουλος Ευκλείδης 22

1. import java.sql.*; 2. public class Meta2 { 3. static String driverclassname = "org.postgresql.driver" ; 4. static String url = "jdbc:postgresql://aetos.it.teithe.gr:5432/db2lab1" ; 5. static Connection dbconnection = null; 6. static String username = "db090"; 7. static String passwd = "69L14"; 8. static Statement statement = null; 9. static DatabaseMetaData dbmd = null; 10. public static void main (String[] argv) throws Exception 11. { 12. Class.forName (driverclassname); 13. dbconnection = DriverManager.getConnection (url, username, passwd); 14. statement = dbconnection.createstatement(); 15. dbmd = dbconnection.getmetadata(); 16. String dbmsname = dbmd.getdatabaseproductname(); Δρ. Κεραμόπουλος Ευκλείδης 23

17. ResultSet rescat = dbmd.getcatalogs(); 18. System.out.println("List of databases: "); 19. while (rescat.next()) { 20. System.out.println(" "+rescat.getstring("table_cat")); 21. ResultSet scrs = dbmd.getschemas(); 22. while (scrs.next()) { 23. String s = scrs.getstring(1); 24. System.out.println("Schema name = " + s); 25. } 26. } 27. statement.close(); 28. dbconnection.close(); 29. } 30. } Δρ. Κεραμόπουλος Ευκλείδης 24

List of databases: db2lab1 Schema name = db061 Schema name = db062 Schema name = db063 Schema name = db064 Schema name = db065 Schema name = db066 Schema name = db067 Schema name = db068 Schema name = db069 Schema name = db070 Schema name = db071 Schema name = db072 Schema name = db073 Schema name = db074 Schema name = db075 Schema name = db076 Schema name = db077 Schema name = db078 Schema name = db079 Schema name = db080 Schema name = db081 Schema name = db082 Schema name = db083 Schema name = db084 Schema name = db085 Schema name = db086 Schema name = db087 Schema name = db088 Schema name = db089 Schema name = db090 Schema name = information_schema Schema name = pg_catalog Schema name = pg_toast_temp_1 Schema name = public BUILD SUCCESSFUL (total time: 1 second) Δρ. Κεραμόπουλος Ευκλείδης 25

Μέθοδος gettabletypes Επιστρέφει τον τύπο ενός πίνακα. ResultSet gettabletypes() throws SQLException Κάθε γραμμή του ResultSet περιέχει ένα String με πιθανές τιμές: "TABLE", "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY", "LOCAL TEMPORARY", "ALIAS", "SYNONYM" Το όνομα της στήλης που περιέχει τις τιμές είναι TABLE_TYPE Δρ. Κεραμόπουλος Ευκλείδης 26

ΠΑΡΑΔΕΙΓΜΑ String dbmsname = dbmd.getdatabaseproductname(); rs = dbmd.gettabletypes(); System.out.print("The following types of tables are "); System.out.println("available in " + dbmsname + ": "); while (rs.next()) { String tabletype = rs.getstring("table_type"); System.out.println(" " + tabletype); } ΑΠΟΤΕΛΕΣΜΑ The following types of tables are available in PostgreSQL: INDEX SEQUENCE SYSTEM INDEX SYSTEM TABLE SYSTEM TOAST INDEX SYSTEM TOAST TABLE SYSTEM VIEW TABLE TEMPORARY INDEX TEMPORARY TABLE VIEW Δρ. Κεραμόπουλος Ευκλείδης 27

Μέθοδος gettables επιστρέφει τα ονόματα των πινάκων ResultSet gettables(string catalog, String schemapattern, String tablenamepattern, String types[]) throws SQLException Παράδειγμα String [] tabletypes = { "TABLE" }; rs = dbmd.gettables("%", "db090", "%", tabletypes); Catalog Είναι ένα String που αναφέρεται στο catalog. "" επιστρέφει πίνακες χωρίς catalog; Το null υποδεικνύει ότι δεν θα χρησιμοποιηθεί το πρότυπο όνομα του catalog ως φίλτρο. schemapattern Είναι ένα String που αναφέρεται στο όνομα του schema; επιστρέφει πίνακες χωρίς schema; null υποδεικνύει ότι δεν θα χρησιμοποιηθεί το πρότυπο όνομα του schema ως φίλτρο, π.χ. DB320 tablenamepattern Ένα String που παρουσιάζει ένα πρότυπο όνομα πίνακα types[] Μία λίστα από String που παρουσιάζουν τους διαθέσιμους τύπους των πινάκων. Περιλαμβάνει τις τιμές: "TABLE", "SYSTEM TABLE", "VIEW", "GLOBAL TEMPORARY", "LOCAL TEMPORARY", "ALIAS", και "SYNONYM". Δρ. Κεραμόπουλος Ευκλείδης 28

Η μέθοδος gettables επιστρέφει 10 στήλες. Οι σημαντικότερες: 1. TABLE_CAT: Ο catalog του πίνακα 2. TABLE_SCHEMA: Το σχήμα του πίνακα 3. TABLE_NAME: το όνομα του πίνακα 4. TABLE_TYPE: Ο τύπος του πίνακα. 5. REMARKS: Η περιγραφή του πίνακα Δρ. Κεραμόπουλος Ευκλείδης 29

1. import java.sql.*; 2. public class Meta4 { 3. static String driverclassname = "org.postgresql.driver" ; 4. static String url = "jdbc:postgresql://aetos.it.teithe.gr:5432/db2lab1" ; 5. static Connection dbconnection = null; 6. static String username = "db090"; 7. static String passwd = "69L14"; 8. static Statement statement = null; 9. static DatabaseMetaData dbmd = null; 10. static ResultSet rs = null; 11. public static void main (String[] argv) throws Exception 12. { 13. Class.forName (driverclassname); 14. dbconnection = DriverManager.getConnection (url, username, passwd); 15. statement = dbconnection.createstatement(); 16. dbmd = dbconnection.getmetadata(); Δρ. Κεραμόπουλος Ευκλείδης 30

17. rs = dbmd.gettabletypes(); 18. String [] tabletypes = { "TABLE" }; 19. rs = dbmd.gettables("%", username, "%", tabletypes); 20. while (rs.next()) { 21. String tablename = rs.getstring("table_name"); 22. String tabletype = rs.getstring("table_type"); 23. System.out.println(tableType+ " " + tablename + " "); 24. } 25. statement.close(); 26. dbconnection.close(); 27. } 28. } Αποτέλεσμα TABLE boats TABLE reserves TABLE sailors Δρ. Κεραμόπουλος Ευκλείδης 31

getprimarykeys επιστρέφει πληροφορίες σχετικές με το κύριο κλειδί ενός πίνακα. Δήλωση ResultSet getprimarykeys(string catalog, String schema, String table) throws SQLException Παράδειγμα: dbmd.getprimarykeys(null, "dbo90", tablename) Catalog: Είναι ένα String που αναφέρεται στο catalog. "" επιστρέφει πίνακες χωρίς catalog. Το null υποδεικνύει ότι δεν θα χρησιμοποιηθεί το πρότυπο όνομα του catalog ως φίλτρο. Schema: Είναι ένα String που αναφέρεται στο όνομα του schema; επιστρέφει πίνακες χωρίς schema; null υποδεικνύει ότι δεν θα χρησιμοποιηθεί το πρότυπο όνομα του schema ως φίλτρο Table: Είναι ένα String που αναφέρεται στον πίνακα που περιέχει το κύριο κλειδί. Δρ. Κεραμόπουλος Ευκλείδης 32

Επιστρέφει ένα αντικείμενο Resultset που έχει 6 στήλες 1. TABLE_CAT το όνομα του catalog (μπορεί να πάρει την τιμή null) 2. TABLE_SCHEM το όνομα του σχήματος (μπορεί να πάρει την τιμή null) 3. TABLE_NAME το όνομα του πίνακα 4. COLUMN_NAME το όνομα της στήλης 5. KEY_SEQ η σειρά στο σύνθετο κλειδί 6. PK_NAME το όνομα του κυρίου κλειδιού (μπορεί να πάρει την τιμή null) Δρ. Κεραμόπουλος Ευκλείδης 33

getimportedkeys επιστρέφει πληροφορίες σχετικές με το ξένο κλειδί ενός πίνακα. Δήλωση ResultSet getimportedkeys(string catalog, String schema, String table) throws SQLException Παράδειγμα: dbmd.getimportedkeys("", "db090",tablename); Catalog: Είναι ένα String που αναφέρεται στο catalog. "" επιστρέφει πίνακες χωρίς catalog; Το null υποδεικνύει ότι δεν θα χρησιμοποιηθεί το πρότυπο όνομα του catalog ως φίλτρο Schema: Είναι ένα String που αναφέρεται στο όνομα του schema; επιστρέφει πίνακες χωρίς schema; null υποδεικνύει ότι δεν θα χρησιμοποιηθεί το πρότυπο όνομα του schema ως φίλτρο Table: Είναι ένα String που αναφέρεται στον πίνακα που περιέχει το ξένο κλειδί Δρ. Κεραμόπουλος Ευκλείδης 34

Επιστρέφει ένα αντικείμενο Resultset που έχει 14 στήλες. Οι σημαντικότερες είναι: 1. PKTABLE_NAME: το όνομα του πίνακα που δείχνει το ξένο κλειδί 2. PKCOLUMN_NAME: το όνομα της στήλης του κυρίου κλειδιού, στον πίνακα που δείχνει το ξένο κλειδί, που συνδέεται το ξένο κλειδί 3. FKTABLE_NAME: το όνομα του πίνακα που περιέχει το ξένο κλειδί 4. FKCOLUMN_NAME: το όνομα της στήλης του ξένου κλειδιού 5. UPDATE_RULE (importedkeynoaction, importedkeycascade, importedkeysetnull, importedkeysetdefault, importedkeyrestrict) 6. DELETE_RULE (importedkeynoaction, importedkeycascade, importedkeysetnull, importedkeysetdefault, importedkeyrestrict) Δρ. Κεραμόπουλος Ευκλείδης 35

Μέθοδος getcolumns Επιστρέφει τα ονόματα των στηλών ResultSet getcolumns(string catalog, String schemapattern, String tablenamepattern, String columnnamepattern) Παράδειγμα: dbmd.getcolumns("%", "db090", tablename, "%"); Catalog: Είναι ένα String που αναφέρεται στο catalog. "" επιστρέφει στήλες πινάκων χωρίς catalog; Το null υποδεικνύει ότι δεν θα χρησιμοποιηθεί το πρότυπο όνομα του catalog ως φίλτρο schemapattern : Είναι ένα String που αναφέρεται σε ένα πρότυπο όνομα σχήματος; "" επιστρέφει στήλες πινάκων χωρίς schema Το null υποδεικνύει ότι δεν θα χρησιμοποιηθεί το πρότυπο όνομα του schema ως φίλτρο tablenamepattern : Είναι ένα String που αναφέρεται στο πρότυπο του ονόματος του πίνακα που περιέχονται οι στήλες columnnamepattern: : Είναι ένα String που αναφέρεται σε τυχόν πρότυπο όνομα στηλών. Δρ. Κεραμόπουλος Ευκλείδης 36

Επιστρέφει ένα αντικείμενο Resultset που έχει 22 στήλες. Οι σημαντικότερες εξηγούνται παρακάτω: 1. TABLE_CAT το όνομα του catalog 2. TABLE_SCHEM το όνομα του σχήματος 3. TABLE_NAME το όνομα του πίνακα που περιέχει τις στήλες 4. COLUMN_NAME το όνομα της στήλης 5. DATA_TYPE το όνομα του JDBC τύπου της στήλης 6. TYPE_NAME το όνομα του SQL τύπου της στήλης 7. COLUMN_SIZE το μέγεθος του τύπου 8. DECIMAL_DIGITS δεκαδικά ψηφία 9. NULLABLE 0 αν είναι NOT NULL, 1 αν είναι NULL Δρ. Κεραμόπουλος Ευκλείδης 37

1. import java.sql.*; 2. public class Meta5 { 3. static String driverclassname = "org.postgresql.driver" ; 4. static String url = "jdbc:postgresql://aetos.it.teithe.gr:5432/db2lab1" ; 5. static Connection dbconnection = null; 6. static String username = "db090"; 7. static String passwd = "69L14"; 8. static Statement statement = null; 9. static DatabaseMetaData dbmd = null; 10. static ResultSet rs = null; 11. static ResultSetMetaData rsmd = null; 12. 13. 14. public static void main (String[] argv) throws Exception 15. { 16. Class.forName (driverclassname); 17. dbconnection = DriverManager.getConnection (url, username, passwd); 18. statement = dbconnection.createstatement(); 19. dbmd = dbconnection.getmetadata(); 20. rs = dbmd.gettabletypes(); 21. String [] tabletypes = { "TABLE" }; 22. rs = dbmd.gettables("%", "db090","%", tabletypes); Δρ. Κεραμόπουλος Ευκλείδης 38

23. while (rs.next()) { 24. String tablename = rs.getstring("table_name"); 25. String tabletype = rs.getstring("table_type"); 26. System.out.println(tableName+ " " + tabletype + " "); 27. ResultSet pkrs = dbmd.getprimarykeys(null, "db090", tablename); 28. System.out.println("Primary keys"); 29. while (pkrs.next()) { 30. String primarykeyname = pkrs.getstring("column_name"); 31. System.out.print(primarykeyName+ " "); 32. } 33. System.out.println(); 34. ResultSet colrs = dbmd.getcolumns("%", "db090", tablename, "%"); 35. System.out.println("Columns"); 36. while (colrs.next()) { 37. String columnname = colrs.getstring("column_name"); 38. String columntn = colrs.getstring("type_name"); 39. System.out.println(columnName+ " " + " " + columntn); 40. } Δρ. Κεραμόπουλος Ευκλείδης 39

41. System.out.println(); 42. ResultSet fkrs = dbmd.getimportedkeys("", "db090",tablename); 43. System.out.println("Foreign keys"); 44. 45. while (fkrs.next()) { 46. String foreignkeyname = fkrs.getstring("fkcolumn_name"); 47. System.out.print(foreignkeyName+ " "); 48. } 49. System.out.println(); 50. } 51. statement.close(); 52. dbconnection.close(); 53. } 54. } Δρ. Κεραμόπουλος Ευκλείδης 40

boats TABLE Primary keys bid Columns bid int4 bname bpchar color bpchar Foreign keys reserves TABLE Primary keys sid bid day1 Columns sid int4 bid int4 day1 date Foreign keys bid sid sailors TABLE Primary keys sid Columns sid int4 sname bpchar rating int4 age float4 Foreign keys Δρ. Κεραμόπουλος Ευκλείδης 41

Το πρώτο βήμα για να έχουμε πρόσβαση σε Parameter Metadata είναι να ορίσουμε το αντίστοιχο αντικείμενο. Παράδειγμα: con μεταβλητή που δημιουργήθηκε από Connection αντικείμενο prstatement = con.preparestatement(select_query_with_parameters) ParameterMetaData paraminfo = prstatement.getparametermetadata(); Δρ. Κεραμόπουλος Ευκλείδης 43

Μέθοδος getparametercount Επιστρέφει τον αριθμό των παραμέτρων ενός αιτήματος int getparametercount() throws SQLException Παράδειγμα prstatement = con.preparestatement("select * from Sailors Where sname =? and rating =?"); ParameterMetaData paraminfo = prstatement.getparametermetadata(); int NumberOfParameters = paraminfo.getparametercount(); System.out.println("Number of parameters: "+NumberOfParameters); Δρ. Κεραμόπουλος Ευκλείδης 44

Μέθοδος getparametertypename Επιστρέφει τον τύπο των παραμέτρων String getparametertypename(int param) throws SQLException Παράδειγμα String typename = paraminfo.getparametertypename(i); System.out.println("Type of parameters: "+typename); Δρ. Κεραμόπουλος Ευκλείδης 45

1. import java.sql.*; 2. public class Jdbc_mini_metadata_PM2_postgres { 3. static String driverclassname = "org.postgresql.driver" ; 4. static String url = "jdbc:postgresql://localhost:5432/postgres" ; 5. static Connection dbconnection = null; 6. static PreparedStatement prstatement = null; 7. public static void main (String[] argv) throws Exception { 8. Class.forName (driverclassname); 9. dbconnection = DriverManager.getConnection (url, "postgres", "postgres"); 10. prstatement = dbconnection.preparestatement("select * from Sailors Where sname =? and rating =?"); 11. ParameterMetaData paraminfo = prstatement.getparametermetadata(); 12. int NumberOfParameters = paraminfo.getparametercount(); 13. System.out.println("Number of parameters: "+NumberOfParameters); 14. for (int i=1;i<numberofparameters+1;i++){ 15. String typename = paraminfo.getparametertypename(i); 16. System.out.println("Type of parameters: "+typename); 17. } 18. dbconnection.commit(); 19. prstatement.close(); 20. dbconnection.close(); 21. } 22. } Δρ. Κεραμόπουλος Ευκλείδης 46

Number of parameters: 2 Type of parameters: bpchar Type of parameters: int4 Δρ. Κεραμόπουλος Ευκλείδης 47

ΕΠΟΜΕΝΗ ΕΝΟΤΗΤΑ