Java Database Connection (dal corso dei Servizi Web)

Slides:



Advertisements
Presentazioni simili
1 Le s-espressioni. 2 Un nuovo esempio completo: le s-espressioni Sexpr 4 alberi binari (possibilmente vuoti) che hanno sulle foglie atomi (stringhe)
Advertisements

1 Progettazione gerarchica delle s- espressioni, utilizzando lereditarietà
JDBC: Concetti Fondamentali Lorenzo Blanco
Interfacce Java.
Midrange Modernization Conference 1 Scenari evolutivi per le soluzioni basate su AS/400 Walter Poloni Direttore Developer & Platform Evangelism Microsoft.
WSDL (Web Services Description Language) Laurea Magistrale in Informatica Reti 2 (2006/07) dott. Federico Paoloni
JPA Overview della tecnologia. Java Persistence Architecture Definita nella JSR-220 EJB 3.0 ( Tentativo di unificare EJB2.1 con.
1 Processi e Thread Processi Thread Meccanismi di comunicazione fra processi (IPC) Problemi classici di IPC Scheduling Processi e thread in Unix Processi.
Java DataBase Connectivity (JDBC)
Database nel Web Modulo Didattico: Francesca Platania
Un DataBase Management System (DBMS) relazionale client/server.
EJB Enterprise Java Beans B. Pernici. Approccio Java.
Model – View - Controller
Esempio: Tombola! Parte seconda.
Unified Modeling Language class C {…} class B extends C {…} Esiste una notazione grafica per mostrare le relazioni di ereditarietà. Object StringC B Tutte.
J0 1 Marco Ronchetti Java Threads & Sincronizzazione.
J0 1 Marco Ronchetti - Basi di Dati Web e Distribuite – Laurea Specialitica in Informatica – Università di Trento.
OO.1 Marco Ronchetti - Java Sql package.
EJB Getting started Database: MySql Application Server: Pramati Server Ambiente di sviluppo: Pramati Studio 3 Applicazione esempio: Logon Trento, 30/10/2002.
Richiami di Java Multithreading. Threads (subclassing) public class A { public void a_method { C t = new C(); //C t = new C(String name); t.start(); …
Sezione: Costruttori Costruttori. Definizione dei costruttori Se per una classe A non scrivo nessun costruttore, il sistema automaticamente crea il costruttore.
prompt> java SumAverage
1 struct Pila { private: int size; int defaultGrowthSize; int marker; int * contenuto; void cresci(int increment); public: Pila(int initialSize) ; Pila();
1. Conoscere luso delle collezioni in Java Comprendere le principali caratteristiche nelle varie classi di Collection disponibili Saper individuare quali.
Citrix Metaframe. Metaframe è la soluzione client-server prodotta dalla Citrix in grado di rendere disponibili applicazioni e desktop a qualsiasi dispositivo.
Programming with JXTA Hello World Peer discovery Peer Group discovery Creating Peer group Joining a Peer Group.
6.6Ordinamento di Vettori Ordinamento di dati –Applicazione computazionale importante –Virtualmente ogni organizzazione deve ordinare dei dati Enormi quantità
Università La Sapienza Ingegneria del Software I 1 Ingegneria del software I Seminario 2: Microsoft.NET.
Università La Sapienza Ingegneria del Software I 1 Ingegneria del software I Seminario 3:Enterprise Java Beans.
2000 Prentice Hall, Inc. All rights reserved. 1 Capitolo 6: Classi e astrazione dati 1.Introduzione 2.Definizione delle strutture 3.Accedere ai membri.
Packages. Package: insieme di classi e interfacce in relazione Per formare un package basta inserire la direttiva come prima istruzione nel file sorgente.
FONDAMENTI DI INFORMATICA III WfMC-1. FONDAMENTI DI INFORMATICA III WfMC-2 WFMC Cose WfMC Workflow Management Coalition (WfMC), Brussels, è unorganizzazione.
Programmazione distribuita in Java
JDBC(TM) Database Access
Java base VI: Gestione I/O. Argomenti Introdurre le API per linput e output in Java.
Componenti dell’architettura Oracle
DATA LINK PHYSICAL IP TRASPORTO APPLICATIVOclient PHYSICAL IP TRASPORTO APPLICATIVOserver Un Client è interconnesso ad un Server attraverso una porzione.
ETEN – Re-Public – RePublic website 1\5 eTEN Progetto Re-Public – RePublic website Workshop finale Dott. Marco Sentinelli – Galgano International Roma,
MIC 2008, Roma Antonio Pistoia Università Politecnica delle Marche MOODLELab Uno strumento per MOODLE per la gestione dei telelaboratori durante i corsi.
Università degli studi di Modena e Reggio Emilia Facoltà di Ingegneria di Modena Corso di Laurea Specialistica in Ingegneria Informatica Analisi e valutazione.
Un esempio: Registrazione e lettura di dati in un file
Microsoft Access Maschere.
7 cose da sapere su Volume Activation con Windows 7 © 2009 Microsoft Corporation. Tutti i diritti riservati. Come professionista IT, devi sapere che l'attivazione.
OR5 – Rete di trasmissione
Moduli o Form I Moduli permettono all'utente di immettere informazioni...
Fondamenti di Informatica Corsi di Laurea in Ingegneria Gestionale Canale AL ESERCITAZIONE 6 ARGOMENTI: LAVORARE CON CLASSI METODI DELLISTANZA, COSTRUTTORI.
INTERNET Internet è una rete a livello mondiale che permette alle persone di comunicare ed ad accedere a banca dati da qualunque parte del mondo e su qualunque.
Gruppo 4: Gelmi Martina, Morelato Francesca, Parisi Elisa La mia scuola ha un sito Web: modelli per la qualità dei siti (Ingegneria del Web)
INTERNET Antonio Papa Classe 2^ beat I.S.I.S. G. Meroni a.s. 2007/2008.
PROGETTO DI STRUMENTI PER LA CONFIGURAZIONE DI APPLICAZIONI JAVA ENTERPRISE Anno Accademico 2006 / 2007 Sessione III FACOLTÀ DI INGEGNERIA CORSO DI LAUREA.
Università degli Studi di Palermo Associazione SINTESI - SINergie TEcnologiche in SIcilia CRES - Centro per la Ricerca Elettronica in Sicilia Automatizzazione.
Attività Formativa Sviluppo di un WORKFLOW ENGINE di Dott. Riccardo Gasperoni Alessandro Caricato Gabriele Trabucco in collaborazione con Progesi S.p.A.
Scheda Ente Ente Privato Ente Pubblico. 2ROL - Richieste On Line.
1 Lucidi delle esercitazioni di Sistemi di Elaborazione in Rete Università degli Studi della Calabria Corso di Laurea in Ingegneria Informatica A.A. 2003/2004.
Scoprirete che su Office non si può solo contare ma anche sviluppare.
Basi di Dati e Sistemi Informativi SQL per Applicazioni Home page del corso:
Visual Studio Tools for Office: Developer Solutions Platform Fulvio Giaccari MCSD.NET / MCT Responsabile Usergroup ShareOffice Blog:
Test con JUnit. zJUnit è un ambiente di test per programmi Java ySviluppato da Kent Beck É possibile usare JUnit allinterno di Eclipse per eseguire i.
1 Simulated multiple inheritance Sandro Pedrazzini Approfondimento Simulated multiple inheritance in Java.
SUBQUERY Chi ha un salario maggiore di quello di Abel? Occorre scomporre la query in due sotto problemi: MAIN : quali impiegati hanno un salario maggiore.
Corso di Web Services A A Domenico Rosaci Patterns di E-Business D. RosaciPatterns per l'e-Business.
1 Basi di dati (Sistemi Informativi) Scuola di Dottorato in Scienze Veterinarie per la Salute Animale e la Sicurezza Alimentare a.a Ing. Mauro.
Collection & Generics in Java
Sistemi di elaborazione dell’informazione Modulo 3 -Protocolli applicativi Unità didattica 4 - Protocolli del Web Ernesto Damiani Lezione 3 – Esempi HTTP.
Dynamic SQL.
JDBC Java DataBase Connectivity SISTEMI ITIS B. CASTELLI Anno Scolastico
Laboratorio di Servizi Web - JDBC - Ardissono 1 Accesso a Database Relazionali Produttori di RDBMS offrono API per accedere ai dati gestiti dal DBMS Accesso.
Sistemi e Applicazioni per l’Amministrazione Digitale
ADO Per gestire i database con tecnologia ASP si utilizzano strumenti ADO (ActiveX Data Objects): un'architettura che fornisce oggetti.
Transcript della presentazione:

Java Database Connection (dal corso dei Servizi Web) JDBC Java Database Connection (dal corso dei Servizi Web) - JDBC -

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 - JDBC -

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 - JDBC -

JDBC e ODBC JDBC basato su ODBC (Open Database Connectivity) linguaggio di interrogazione SQL 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) - JDBC -

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) - JDBC -

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) - JDBC -

Architettura di JDBC - I 2) Applicazione chiede Connection object a DriverMgr e lo usa per comunicare con DB (via Statement SQL) 1) Applicazione istalla DriverMgr e istanzia 1 o più JDBC drivers (specifici per DB) Application Driver Manager Database Specific Driver Database Specific Driver Connection Connection Statement Statement ResultSet ResultSet 3) Tabelle risultato contenute in oggetti ResultSet interrogabili - JDBC -

Architettura di JDBC - II DriverManager: classe che permette di istallare i driver per l’accesso ai database Driver: interfaccia I venditori di DBMS implementano interfaccia (metodi di accesso al loro database) Driver JDBC traduce le chiamate JDBC negli API specifici del database NB: DriverManager e applicazione usano le interfacce, non le implementazioni  Software delle applicazioni indipendente dal particolare database - JDBC -

Tipi di connessioni tra database drivers e database servers JDBC-ODBC Bridge Part Java, part native driver Intermediate Database Access Server Pure Java Drivers - JDBC -

JDBC-ODBC Bridge Java Application Processo 1 Data Source Processo 2 API Processo 2 ODBC API ODBC Layer JDBC-ODBC Bridge JDBC driver : traduce le chiamate JDBC in chiamate ODBC invia chiamate ODBC al database usando librerie ODBC delega il database all’esecuzione delle chiamate  poco efficiente per livelli multipli e traduzioni intermedie  client che gestisce applicazione deve istallare JDBC-ODBC Bridge API e ODBC driver - JDBC -

Part Java, part native driver Java Application JDBC API Data Source Vendor specific API JDBC Driver 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 istallare driver e API nativi del DB - JDBC -

Intermediate database access server Source Java Application JDBC API JDBC Driver Server JDBC Driver Native 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 -

Pure Java Drivers Java Application Data Source JDBC JDBC Driver API 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 di avere 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/ - JDBC -

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 l’interfaccia java.sql.Connection: interfaccia. Astrae i dettagli dell’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 - JDBC -

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. dopo) - JDBC -

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);} } - JDBC -

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 - JDBC -

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 - JDBC -

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 nel codice di inizializzazione c’è la registrazione (automatica) di un’istanza del driver presso il DriverManager fatta la registrazione, applicazione può richiedere a DriverManager una connessione al database Driver - JDBC -

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:<subprotocol>:<subname> 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 - JDBC -

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 - JDBC -

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 - JDBC -

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 - JDBC -

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 - JDBC -

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();} - JDBC -

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 - JDBC -

Interfaccia java.sql.ResultSet Interfaccia per ispezione dei 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 - JDBC -

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: - JDBC -

NB: le colonne sono numerate a partire da 1 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 - JDBC -

Esempio di database Database CATALOG: - JDBC -

Interrogazione e analisi Metadati - I public static void queryDB() throws SQLException { Statement statement = con.createStatement(); String sql = "SELECT * FROM CATALOG"; 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)); } - JDBC -

Interrogazione e analisi Metadati - II public static void queryDB() throws SQLException { Statement statement = con.createStatement(); String sql = "SELECT * FROM CATALOG"; ResultSet rs = statement.executeQuery(sql); ... }} Creo statement SQL Definisco statement SQL Eseguo statement Catturo risultato: il risultato della query è la sequenza di tutte le tuple della tabella CATALOG (la clausola “where” è vuota…) - JDBC -

Interrogazione e analisi Metadati - III public static void queryDB() throws SQLException { Statement statement = con.createStatement(); String sql = "SELECT * FROM CATALOG"; 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 Interrogo oggetto metadati Colonne numerate a partire da 1 - JDBC -

Interrogazione e analisi risultato - I public static void queryDB() throws SQLException { Statement statement = con.createStatement(); ResultSet rs = statement.executeQuery(“SELECT * FROM CATALOG”); 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()... - JDBC -

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 - JDBC -

Interfaccia java.sql.PreparedStatement - I Simile a java.sql.Statement, ma serve per preparare query non completamente specificate: gli statement possono contenere variabili, indicate con “?” SELECT TITLE FROM CATALOG WHERE TYPE = ? le variabili permettono di passare parametri dinamicamente agli statement utili quando a tempo di compilazione non si hanno info necessarie per specificare completamente la query Es: clausola WHERE di una query SQL Es: valori di una query SQL di tipo INSERT (vd dopo) - JDBC -

Interfaccia java.sql.PreparedStatement - II 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 ……. - JDBC -

Esempio di uso di PreparedStatement - I public static void queryDB(String actorName) throws SQLException { String sql = "SELECT * FROM CATALOG “+ “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 - JDBC -

Esempio di uso di PreparedStatement - II String sql = “INSERT INTO CATALOG(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(); } - JDBC -

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 - JDBC -

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 - JDBC -

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;} - JDBC -

Creazione Tabelle - III public void createTables() throws SQLException { statement = con.createStatement(); statement.execute("DROP TABLE CATALOG"); statement.executeUpdate("CREATE TABLE CATALOG" + "(TITLE VARCHAR(256) PRIMARY KEY NOT NULL, " + "LEAD_ACTOR VARCHAR(256) NOT NULL," + <...altri campi della tabella...> "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 - JDBC -

Popolamento Tabelle Inserimento tuple in tabella Chiusura statement public void insertMovies() throws SQLException,IOException { BufferedReader br=new BufferedReader(new FileReader("m.txt")); String rDate = ""; <...altre dichiarazioni...> try { do {title = br.readLine(); <...> rDate = br.readLine(); String sql = "INSERT INTO CATALOG (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();} } Austin Powers Mike Myers Liz Hurley Comedy 1999-04-01 Rain Man Tom Cruise ... Inserimento tuple in tabella Chiusura statement - JDBC -

Il main ... Eventualmente in clausola “finally” Catturo eventuali 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(); Eventualmente in clausola “finally” Catturo eventuali eccezioni multiple - JDBC -

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 salvare file di ambiente DBEnv.sh nella directory dell’esercizio (o sotto etc, se si preferisce…) eseguire “source DBEnv.sh” per aggiornare il proprio CLASSPATH a questo punto si possono compilare ed eseguire le classi java che usano instantDB NB: l’aggiornamento dell’ambiente va fatta ad ogni sessione di lavoro in cui si vuole usare un DB creato con instantDB - JDBC -

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 CATALOG e la popola NB: creazione e popolamento possono essere fatti in tempi diversi se si scrive il codice in classi separate. Basta collegarsi ogni volta al database Per rigenerare database: cancellare tables, indexes, system e tmp e rieseguire CreaTabelle.class - JDBC -

Esercizio di laboratorio - I (Caricare il file di ambiente DBEnv.sh) 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: CATALOG, ACTOR CATALOG Campi: Titolo film (ID), attore protagonista, attrice protagonista, tipo di film, data di pubblicazione ACTOR Campi: Nome e cognome (ID), città di nascita, anno di nascita - JDBC -

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 CATALOG e ACTOR per scoprire quante colonne hanno e che nome e tipo ha ciascuna colonna imposta una query sulla tabella CATALOG 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 CATALOG e ACTOR … query con AND nella clausola WHERE, … …. - JDBC -