Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoGuido Pasini Modificato 9 anni fa
1
Laboratorio di Servizi Web - JDBC - Ardissono 1 Accesso a Database Relazionali Produttori di RDBMS offrono API per accedere ai dati gestiti dal DBMS Accesso a DB basato su modello client-server client accede a DB mediante le API definite dai produttori RDBMS diversi hanno API diverse serve strumento per generalizzare accesso, in modo da separare applicazione (business logic) da livello dei dati (può cambiare il DB) Introduciamo il Database Driver come strumento che implementa interfaccia a DB e permette di comunicare con DB mediante codice Java
2
Laboratorio di Servizi Web - JDBC - Ardissono 2 Java Database Connection (JDBC) - I API sviluppati per offrire interfaccia standardizzata tra applicazioni Java ed i database relazionali (RDBMS) package java.sql Requisiti: –consistente con metodologie java (basato su modello client server) –basato su classi, interfacce, oggetti e package –facilmente implementabile su database esistenti e su diversi middleware per sistemi distribuiti
3
Laboratorio di Servizi Web - JDBC - Ardissono 3 Java Database Connection (JDBC) - II Funzionalità –offre connessione a dati relazionali da codice Java –supporta l’esecuzione di query SQL (Structured Query Language) e l’analisi dei risultati delle query –offre metodi per accedere a RDBMS SQL-compliant, astraendo da dettagli implementativi del database (MS Access? Oracle? …?) e dei suoi API specifici dettagli di comunicazione con i database specifici –permette ad applicazione di connettersi a più database diversi (anche eterogenei) attraverso database drivers differenziati
4
Laboratorio di Servizi Web - JDBC - Ardissono 4 JDBC e ODBC JDBC basato su –linguaggio di interrogazione SQL (sottoinsieme, SQL-92) –interfaccia di comunicazione X/Open CLI ODBC (Open Database Connectivity) –creato inizialmente per offrire API standard per accesso SQL a piattaforme Microsoft Windows –poi esteso ad altre piattaforme –definisce funzioni per accesso diretto ai dati (quindi non poi così standard)
5
Laboratorio di Servizi Web - JDBC - Ardissono 5 CLI: X/Open Call Level Interface API standard per accesso a database relazionali interfaccia di comunicazione con database definita originariamente per ODBC indipendente da piattaforma e da database basata su idea di –includere statement SQL in applicazione programmata con linguaggio ad alto livello –pre-processare gli statement per generare chiamate di funzioni native del database implementata in C (e Cobol)
6
Laboratorio di Servizi Web - JDBC - Ardissono 6 Java, SQL e CLI JDBC sviluppato partendo da specifiche di driver ODBC esistenti e di CLI, per identificare caratteristiche comuni e offrire interfaccia di comunicazione –compatibile con tutti i driver –facilmente implementabile in Java Risultato: interfacce per accesso a database che possono essere –implementate su driver ODBC esistenti (prime versioni) –direttamente integrate nel database, senza passare attraverso ODBC (oggi molto diffuso)
7
Laboratorio di Servizi Web - JDBC - Ardissono 7 Tipi di connessioni tra database drivers e database servers JDBC-ODBC Bridge Part Java, part native driver Intermediate Database Access Server Pure Java Drivers
8
Laboratorio di Servizi Web - JDBC - Ardissono 8 JDBC-ODBC Bridge Java Application Data Source JDBC API JDBC-ODBC Bridge ODBC API ODBC Layer JDBC driver : traduce le chiamate JDBC in chiamate ODBC invia chiamate ODBC a database usando librerie ODBC delega il database esecuzione di chiamate poco efficiente per livelli multipli e traduzioni intermedie client che gestisce applicazione deve installare JDBC-ODBC Bridge API e ODBC driver Processo 1 Processo 2
9
Laboratorio di Servizi Web - JDBC - Ardissono 9 Part Java, part native driver Java Application Data Source JDBC API JDBC Driver Vendor specific API JDBC driver traduce chiamate JDBC in chiamate specifiche per DB DB processa richieste e invia risultati attraverso API specifica API invia risultati a JDBC driver JDBC driver traduce risultati in JDBC standard e invia ad applicazione + efficiente (- livelli di traduzione, uso completo di API specifiche) MA: client deve installare driver e API nativi del DB
10
Laboratorio di Servizi Web - JDBC - Ardissono 10 Intermediate database access server (net-protocol all-Java driver) Java Application Data Source JDBC API JDBC Driver Driver Server intermedio connette più client Java a più DB server JDBC Driver Server accessibile via listener, fa da gateway verso i server dei DB applicazione invia richiesta JDBC via JDBC Driver a Driver Server Driver Server completa la richiesta attraverso native driver JDBC Driver Server nasconde dettagli di connessioni ai database servers protocollo di comunicazione con Driver Server è specifico, ma Driver Server può usare protocolli per comunicare con DB JDBC Driver Server Native Driver
11
Laboratorio di Servizi Web - JDBC - Ardissono 11 Pure Java Drivers Java Application Data Source JDBC API JDBC Driver JDBC driver converte chiamate JDBC in chiamate in rete dirette utilizzando protocolli di rete specifici del database (socket) + efficiente dei primi due tipi di driver semplice da utilizzare perchè non richiede librerie o software speciali I principali produttori di database offrono JDBC driver puri per accedere ai propri DB. Una lista di JDBC driver: http://industry.java.sun.com/products/jdbc/drivers/
12
Laboratorio di Servizi Web - JDBC - Ardissono 12 Architettura di JDBC - I Application Driver Manager Database Specific Driver Connection Statement ResultSet 1) Applicazione installa DriverMgr e istanzia 1 o più JDBC drivers (specifici per DB) 2) Applicazione chiede Connection object a DriverMgr e lo usa per comunicare con DB (via Statement SQL) 3) Tabelle risultato contenute in oggetti ResultSet interrogabili Database Specific Driver Connection Statement ResultSet
13
Laboratorio di Servizi Web - JDBC - Ardissono 13 Architettura di JDBC - II DriverManager: classe che permette di installare i driver per accesso ai database Driver: interfaccia –Venditori di DBMS implementano interfaccia (metodi di accesso al loro database) –Driver JDBC traduce chiamate JDBC in invocazioni basate su API specifici del database NB: DriverManager e applicazione usano le interfacce, non le implementazioni Software delle applicazioni indipendente dal particolare database
14
Laboratorio di Servizi Web - JDBC - Ardissono 14 JDBC - classi e interfacce java.sql.DriverManager: classe. Offre funzionalità di gestione dei database driver java.sql.Driver: interfaccia. Astrae i dettagli del protocollo di connessione al database. I produttori di database implementano interfaccia java.sql.Connection: interfaccia. Astrae dettagli di interazione con il database. Permette di inviare statement SQL e di leggere i risultati dell’esecuzione degli statement. I produttori di database implementano l’interfaccia
15
Laboratorio di Servizi Web - JDBC - Ardissono 15 InstantDB Useremo InstantDB come JDBC driver (Java puro) connessione a database esistente e interrogazione creazione di database queste operazioni possono essere eseguite scrivendo un codice indipendente dalle caratteristiche di InstantDB (o quasi …) tuttavia, per utilizzare il Driver di instantDB, è necessario che il proprio CLASSPATH includa le classi (file jar) del pacchetto (vd. catEnv.sh)
16
Laboratorio di Servizi Web - JDBC - Ardissono 16 Connessione a database via JDBC driver - I import java.sql.*; public class QueryDB { static Connection con; public static void main (String args[]) { try { Class.forName("org.enhydra.instantdb.jdbc.idbDriver"); // LOCATION OF YOUR properties FILE: String url = "jdbc:idb:movies.prp"; con = DriverManager.getConnection(url); queryDB(); metodo che esegue gli statement SQL con.close(); } catch (SQLException e) {System.err.println(e);} }
17
Laboratorio di Servizi Web - JDBC - Ardissono 17 Connessione a database via JDBC driver - II … public static void main (String args[]) { try { Class.forName("org.enhydra.instantdb.jdbc.idbDriver");... String url = "jdbc:idb:movies.prp"; con = DriverManager.getConnection(url); … con.close(); } catch (SQLException e) {System.err.println(e);} } Carico driver specifico di DB in DriverManager URL di database: path relativo Chiedo a DriverManager connessione a database Chiudo connessione
18
Laboratorio di Servizi Web - JDBC - Ardissono 18 java.sql.DriverManager - I Classe java.sql.DriverManager fornisce livello intermedio per accedere a database driver da applicazione permette ad una stessa applicazione di utilizzare + driver ( + database diversi) in contemporanea offre metodi statici per stabilire connessione con DB offre anche metodi per vedere quali driver sono in uso dall’applicazione etc., ma trascuriamo questo argomento
19
Laboratorio di Servizi Web - JDBC - Ardissono 19 java.sql.DriverManager - II Classe java.sql.DriverManager richiede che i driver necessari all’applicazione siano registrati prima di essere usati –Class.forName("org.enhydra.instantdb.jdbc.idbDriver"): registrazione di driver –a run time, ClassLoader carica la classe (org.enhydra...) usando CLASSPATH, crea istanza della classe ed esegue codice di inizializzazione della classe –in codice di inizializzazione c’è registrazione (automatica) di un’istanza del driver presso il DriverManager –fatta la registrazione, applicazione può richiedere a DriverManager una connessione al database Driver
20
Laboratorio di Servizi Web - JDBC - Ardissono 20 JDBC URL di un Database Driver Simile a URL (Uniform Resource Locator) internet serve per identificare un driver rappresenta il driver e informazioni specifiche per localizzare il database e per connettervisi –jdbc: : –jdbc indica il protocollo (unico) –subprotocol: identifica un database driver, un meccanismo di connessione al database –subname: sintassi specifica per driver Esempio: jdbc:idb:movies.prp /usr/home/studenti/labgroup/labsweb/sweb40/movies.prp –movies.prp: file di properties del database, usato da instantDB (specifica uso di cache, transazioni,...) Path assoluto: non dipende da directory in cui viene eseguito Java
21
Laboratorio di Servizi Web - JDBC - Ardissono 21 Connessione a Database - I java.sql.DriverManager: metodi per ottenere connessione a database –public static Connection getConnection(String url) throws SQLException –public static Connection getConnection(String url, java.util.Properties info) throws SQLException –public static Connection getConnection(String url, String user, String password) throws SQLException Applicazione chiede connessione a DriverManager: Connection con = DriverManager.getConnection(url); Applicazione riceve oggetto di tipo java.sql.Connection
22
Laboratorio di Servizi Web - JDBC - Ardissono 22 Connessione a Database - II Metodi getConnection() invocano metodo connect() di Driver per stabilire connessione con database server – astrazione da specifiche di driver e database server I metodi sono synchronized oggetto java.sql.Connection non può essere preso da più di 1 thread dell’applicazione Si può specificare timeout di attesa per collegamento a database (setLoginTimeout) Le properties specificate per la connessione (o nell’URL, come per instantDB) dipendono dal driver
23
Laboratorio di Servizi Web - JDBC - Ardissono 23 java.sql.Connection - I Connection con = DriverManager.getConnection(url); Oggetto java.sql.Connection astrae da particolarità di connessione –A seconda del tipo di driver e database server, connessione può richiedere collegamento in rete a database server o altro –DB embedded non richiedono connessione fisica Connection object passato ad applicazione permette di creae statement SQL ed eseguirli per interrogare DB in modo indipendente dal tipo di collegamento
24
Laboratorio di Servizi Web - JDBC - Ardissono 24 java.sql.Connection - II Metodi per creazione di statement SQL Statement createStatement() throws SQLException –creazione statement SQL senza parametri PreparedStatement prepareStatement(String sql) throws SQLException –creazione statement SQL con parametri CallableStatement prepareCall(String sql) throws SQLException –invocazione di procedure
25
Laboratorio di Servizi Web - JDBC - Ardissono 25 java.sql.Connection - III A termine operazioni, chiudere connessione (DB accettano # max di connessioni prefissato) – con.close(); Chiusura di connessione può essere inserita in blocco finally per liberare risorse indipendentemente da successo di interrogazione try { con = DriverManager.getConnection("jdbc:idb:movies.prp"); … // query the DB } catch (SQLException e) {System.err.println(e);} finally { try {con.close();} } catch (SQLException e) {System.err.println(e);}
26
Laboratorio di Servizi Web - JDBC - Ardissono 26 Transazioni - I Oggetti Connection sono synchronized finchè thread che detiene connection non la chiude, altri thread non riescono ad aprire connessione In una Connection, per default, ogni Statement fa autocommit per definire transazioni formate da più statement, l’applicazione deve –Mettere il flag di autocommit a “false” –Eseguire gli statement che fanno parte della transazione –Eseguire il “commit” finale
27
Laboratorio di Servizi Web - JDBC - Ardissono 27 Transazioni - II Connection con = null; // Get a connection … try { // Begin a transaction con.setAutocommit(false); Statement st = con.createStatement(); st.executeUpdate(“…”); if (…) { // business logic succeeded statement.execute(“…”); con.commit(); } else con.rollback(); } catch (SQLException e) {System.err.println(e);} Finally {st.close(); con.close();} }
28
Laboratorio di Servizi Web - JDBC - Ardissono 28 Interfaccia java.sql.Statement Interfaccia per esecuzione di query SQL completamente specificate offre metodi indipendenti da DB per fare query SQL –ResultSet executeQuery(String sql) throws SQLException interrogazione SQL con risultato –int executeUpdate(String sql) throws SQLException esecuzione di statements SQL senza risultato (creazione tabelle, aggiornamento tabelle,...) restituisce numero di tuple coinvolte nell’operazione –boolean execute(String sql) throws SQLException invocazione procedure che restituiscono risultati multipli, o stringhe SQL sconosciute
29
Laboratorio di Servizi Web - JDBC - Ardissono 29 Interfaccia java.sql.ResultSet Interfaccia per ispezionare risultati di query SQL –offre metodi di ispezione dei metadati del risultato String getCatalogName() String getTableName() int getColumnCount() String getColumnName() int getColumnType(), ………… –risultato (tabella) rappresentato come enumerazione di tuple con cursore di scorrimento delle tuple interfaccia implementata da produttori di DB
30
Laboratorio di Servizi Web - JDBC - Ardissono 30 JDBC Types - I JDBC offre insieme di tipi di dati mappabili su tipi di dati SQL e Java. Vd. Java.sql.Types class. Tra questi:
31
Laboratorio di Servizi Web - JDBC - Ardissono 31 JDBC Types - II I tipi di dati sono identificati da costanti intere della classe java.sql.Types L’interfaccia ResultSet offre metodi getXXX() per ottenere i valori di campi di tipi diversi. I metodi effettuano il mapping da tipi JDBC a tipi java: –getString(String columnName), getString(int colNumber) –getDate(String columnName), getDate(int colNumber) –getInt(String columnName), getInt(int colNumber) –getURL(String columnName), getURL(int colNumber) –getObject(String columnName), getObject(int colNumber) –…… NB: le colonne sono numerate a partire da 1
32
Laboratorio di Servizi Web - JDBC - Ardissono 32 Esempio di database Database CATALOGO:
33
Laboratorio di Servizi Web - JDBC - Ardissono 33 Creazione di database con JDBC Si distingue la creazione del database, privo di tabelle, dalla creazione delle tabelle stesse –un database instantDB può ospitare molte tabelle diverse –questo approccio è tipico: anche Oracle è organizzato così (administrator crea il DB, altri utenti caricano tabelle in DB) Database instantDB hs 4 directory principali: (contengono dati relativi a tabelle e file di log di sistema) tables indexes tmp system
34
Laboratorio di Servizi Web - JDBC - Ardissono 34 Creazione Tabelle - I Dato un DB già creato, si utilizzano statement SQL per –creare tabelle nel DB –popolare tabelle La connessione al DB è del tutto analoga al caso di interrogazione di DB (via DriverManager e Connection) Tuttavia, i database server possono avere particolarità individuali. Es: –Cloudscape richiede che in fase di connessione si specifichi la property “create=true”: con = DriverManager.getConnection(url+”Movies;create=true”); –InstantDB offre modalità di creazione e popolamento DB da file (non lo vediamo) e richiede esecuzione di statement “DROP TABLE” – verificare specificità del DB server da utilizzare
35
Laboratorio di Servizi Web - JDBC - Ardissono 35 Creazione Tabelle - II import java.sql.*; import java.io.*; public class CreaTabelle { Connection con = null; Statement statement = null; public void init() throws SQLException,ClassNotFoundException { Class.forName("org.enhydra.instantdb.jdbc.idbDriver"); con = DriverManager.getConnection("jdbc:idb:movies.prp"); } public void close() throws SQLException { try {con.close();} catch (SQLException e) { throw e;} }
36
Laboratorio di Servizi Web - JDBC - Ardissono 36 Creazione Tabelle - III public void createTables() throws SQLException { statement = con.createStatement(); statement.execute("DROP TABLE CATALOGO"); statement.executeUpdate("CREATE TABLE CATALOGO" + "(TITLE VARCHAR(256) PRIMARY KEY NOT NULL, " + "LEAD_ACTOR VARCHAR(256) NOT NULL," + "RELEASE_DATE DATE NOT NULL)"); } Specifico di InstantDB Statement di creazione tabella CATALOG NB: executeUpdate!! Definizione campi della tabella NB: dopo creazione tabella esistono i suoi metadati
37
Laboratorio di Servizi Web - JDBC - Ardissono 37 Popolamento Tabelle public void insertMovies() throws SQLException,IOException { BufferedReader br=new BufferedReader(new FileReader("m.txt")); String rDate = ""; try { do {title = br.readLine(); rDate = br.readLine(); String sql = "INSERT INTO CATALOGO (TITLE, " + "LEAD_ACTOR, LEAD_ACTRESS, TYPE, RELEASE_DATE) "+ "VALUES('"+title+"','"+leadAct+ "','"+rDate+ "')"; statement.executeUpdate(sql);} while (br.readLine() != null); statement.close(); } catch (IOException e) {e.printStackTrace();} finally {br.close();} } Inserimento tuple in tabella Austin Powers Mike Myers Liz Hurley Comedy 1999-04-01 Rain Man Tom Cruise... Chiusura statement
38
Laboratorio di Servizi Web - JDBC - Ardissono 38 Interrogazione Database e analisi Metadati - I public static void queryDB() throws SQLException { Statement statement = con.createStatement(); String sql = "SELECT * FROM CATALOGO"; ResultSet rs = statement.executeQuery(sql); ResultSetMetaData metaData = rs.getMetaData(); int num = metaData.getColumnCount(); System.out.println("Numero di colonne: " + num); for (int i=1; i<=num; i++) { System.out.println(metaData.getColumnName(i) + " " + metaData.getColumnType(i)); }
39
Laboratorio di Servizi Web - JDBC - Ardissono 39 Interrogazione e analisi Metadati - II public static void queryDB() throws SQLException { Statement statement = con.createStatement(); String sql = "SELECT * FROM CATALOGO"; ResultSet rs = statement.executeQuery(sql);... }} Creo statement SQL Eseguo statement Catturo risultato: il risultato della query è la sequenza di tutte le tuple della tabella CATALOG (la clausola “where” è vuota…) Definisco statement SQL
40
Laboratorio di Servizi Web - JDBC - Ardissono 40 Interrogazione e analisi Metadati - III public static void queryDB() throws SQLException { Statement statement = con.createStatement(); String sql = "SELECT * FROM CATALOGO"; ResultSet rs = statement.executeQuery(sql); ResultSetMetaData metaData = rs.getMetaData(); int num = metaData.getColumnCount(); System.out.println("Numero di colonne: " + num); for (int i=1; i<=num; i++) { System.out.println(metaData.getColumnName(i) + " " + metaData.getColumnType(i)); }} Estraggo metadati di risultato Interrogo oggetto metadati Colonne numerate a partire da 1
41
Laboratorio di Servizi Web - JDBC - Ardissono 41 Interrogazione e analisi risultato - I public static void queryDB() throws SQLException { Statement statement = con.createStatement(); ResultSet rs = statement.executeQuery(“SELECT * FROM CATALOGO”); while (rs.next()) { System.out.println(rs.getString("TITLE") + ", "+ rs.getDate("RELEASE_DATE")); } Scorro le tuple del risultato con il cursore Prelevo valore colonne da tupla corrente NB: potrei anche scorrere le colonne della tupla per numero, da 1 a metadata.getColumnCount()...
42
Laboratorio di Servizi Web - JDBC - Ardissono 42 Query SQL Rispettano la sintassi di SQL (base). Alcuni esempi: Data una tabella T con campi C1, … Cn SELECT C1, C3, C4 FROM T SELECT T.C1 FROM T WHERE T.C2 = pippo SELECT * FROM T WHERE T.C2 = pippo Data una tabella T con campi C1, … Cn ed una tabella R con campi R1, …, Rm SELECT C1 FROM T AS TAB1 JOIN R AS TAB2 ON TAB1.C1 = TAB2.R1 WHERE TAB1.C2 = pippo SELECT * FROM T AS TAB1 JOIN R AS TAB2 ON TAB1.C1 = TAB2.R1
43
Laboratorio di Servizi Web - JDBC - Ardissono 43 Interfaccia java.sql.PreparedStatement - I Simile a java.sql.Statement, ma serve per preparare query non completamente specificate (statement parametrizzati) –gli statement possono contenere variabili, indicate con “?” –SELECT TITLE FROM CATALOG WHERE TYPE = ? –le variabili permettono di passare parametri dinamicamente agli statement –Es: clausola WHERE di una query SQL –Es: valori di una query SQL di tipo INSERT (vd dopo)
44
Laboratorio di Servizi Web - JDBC - Ardissono 44 Interfaccia java.sql.PreparedStatement - II Statement parametrizzati utili quando –a tempo di compilazione non si hanno info necessarie per specificare completamente la query –si vuole compilare uno statement una sola volta, e poi eseguirlo più volte sostituendo i valori dei parametri al momento della esecuzione (sostituire parametri in più invocazioni dello stesso statement) –Es: SELECT FROM WHERE USER_ID = ? Valore di chiave di ricerca Impostato a run time
45
Laboratorio di Servizi Web - JDBC - Ardissono 45 Interfaccia java.sql.PreparedStatement - III Interfaccia java.sql.Connection offre metodo –PreparedStatement prepareStatement(String sql) throws SQLException PreparedStatement offre metodi –ResultSet executeQuery(String sql) throws SQLException –int executeUpdate(String sql) throws SQLException –boolean execute(String sql) throws SQLException –setString(int i, String s) assegna all’i-mo parametro unbound la stringa s –setDate(int parNumber, java.sql.Date date) assegna all’i-mo parametro unbound la data date –….. Un metodo per ogni tipo di dato JDBC …….
46
Laboratorio di Servizi Web - JDBC - Ardissono 46 Esempio di uso di PreparedStatement - I public static void queryDB(String actorName) throws SQLException { String sql = "SELECT * FROM CATALOGO “+ “WHERE CATALOG.LEAD_ACTOR = ?"; PreparedStatement statement = con.prepareStatement(sql); statement.setString(1, actorName); ResultSet rs = statement.executeQuery(sql); …………….. } Assegno il valore di actorName al primo parametro della query
47
Laboratorio di Servizi Web - JDBC - Ardissono 47 Esempio di uso di PreparedStatement - II String sql = “INSERT INTO CATALOGO(TITLE, LEAD_ACTOR, “+ “LEAD_ACTRESS, TYPE, RELEASE_DATE)” + “VALUES(?, ?, ?, ?, ?)”); PreparedStatement statement = con.prepareStatement(sql); … String title = “AI”; … statement.setString(1, title); statement.setString(2, actorName); statement.setString(3, actressName); statement.setString(4, type); statement.setString(5, rDate); statement.executeUpdate(); … }
48
Laboratorio di Servizi Web - JDBC - Ardissono 48 Il main... public static void main (String args[]) { CreaTabelle movies = new CreaTabelle(); try { movies.init(); movies.createTables(); movies.insertMovies(); movies.close(); } catch (SQLException sqlException) { while (sqlException != null) { sqlException.printStackTrace(); sqlException = sqlException.getNextException(); } } catch (Exception e) { e.printStackTrace(); } Catturo eventuali eccezioni multiple Eventualmente in clausola “finally”
49
Laboratorio di Servizi Web - JDBC - Ardissono 49 Istruzioni per uso di instantDB - I Per utilizzare instantDB bisogna avere nel proprio CLASSPATH il path dei 3 file jar che costituiscono il pacchetto (idb.jar, jta-spec_1.0.1.jar, idbexmpl.jar) I 3 file sono salvati nella home docenti/liliana (vedere path specificati nel file di ambiente catEnv.sh)
50
Laboratorio di Servizi Web - JDBC - Ardissono 50 Istruzioni per uso di instantDB - II Creazione nuovo database instantDB –avviene in automatico alla prima esecuzione della classe di creazione delle tabelle (CreaTabelle.class) Creazione tabelle –java [packageName.]CreaTabelle esegue classe: crea tabella CATALOGO e la popola NB: creazione e popolamento possono essere fatti in tempi diversi se si scrive codice in classi separate. Basta collegarsi ogni volta al database Per rigenerare database: cancellare tables, indexes, system e tmp e rieseguire CreaTabelle.class
51
Laboratorio di Servizi Web - JDBC - Ardissono 51 Esercizio di laboratorio - I Creare nella propria area di gruppo (direttamente sotto swebi) una directory movieDB Salvare in movieDB il file movies.prp di property del DB Definire la classe CreaTabelle.java che crea (il DB) le tabelle dei film e degli attori: CATALOGO, ACTOR CATALOGO ACTOR Campi: Titolo film (ID), attore protagonista, attrice protagonista, tipo di film, data di pubblicazione Campi: Nome e cognome (ID), città di nascita, anno di nascita
52
Laboratorio di Servizi Web - JDBC - Ardissono 52 Esercizio di laboratorio - II Definire i file movie.txt e actor.txt che specificano le tuple delle due tabelle Aggiungere alla classe CreaTabelle i metodi per popolare le due tabelle (ed il main) –(NB: la classe deve avere package movieDB) Definire la classe QueryDB.java che –interroga i metadati delle tabelle CATALOGO e ACTOR per scoprire quante colonne hanno e che nome e tipo ha ciascuna colonna –imposta una query sulla tabella CATALOGO per scoprire la descrizione completa di tutti i film inclusi nella tabella il titolo ed il tipo dei film con attore principale Tom Cruise … –imposta una query con JOIN sulle due tabelle CATALOGO e ACTOR –… query con AND nella clausola WHERE, … –….
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.