JDBC. Java Database Connection. (dal corso dei Servizi Web) Java Database Connection (JDBC) - I. JDBC e ODBC. Java Database Connection (JDBC) - II



Похожие документы
PROVA FINALE Ingegneria del software

JDBC. A. Bechini Accesso a DataD con Java

Non si deve fare ALCUN riferimento alla parte specifica di JDBC.

Introduzione JDBC interfaccia java.sql driver caricare i driver

JDBC versione base. Le classi/interfacce principali di JDBC

CORSO DI ALGORITMI E PROGRAMMAZIONE. JDBC Java DataBase Connectivity

JDBC di base. Le classi/interfacce principali di JDBC

Lezione 9. Applicazioni tradizionali

JDBC: Introduzione. Java Database Connectivity (JDBC): parte 1. Schema dei legami tra le classi principali. Principali classi/interfacce di JDBC

Esercitazione su JDBC

JDBC per l accesso Java a DB. Tito Flagella tito@link.it

Java: la libreria delle classi

Laboratorio di reti II: Gestione di database lato server

SQL. Laboratorio di Progettazione di Basi di Dati (CdS in Informatica e TPS)

Siti web centrati sui dati Architettura MVC-2: i JavaBeans

Sviluppo Applicazioni Mobile Lezione 12 JDBC. Dr. Paolo Casoto, Ph.D

Architettura MVC-2: i JavaBeans

JDBC Driver Manager. JDBC Architettura generale. JDBC - Tipi di dato. JDBC - Flusso applicativo. JDBC - Tipi di dato. ODBC Driver. Livello di gestione

Corso di Informatica Modulo T3 B2 - Database in rete

Tecnologia e Applicazioni Internet 2011/12

Basi di dati e Web (Moduli: Laboratorio e Siti Web centrati sui Dati) Prova scritta del 14 luglio 2008

Come trattare il risultato di un comando SQL (relazioni) che

Introduzione. 8- Programmazione di una base di dati attraverso JDBC ESEMPIO

Scheda 15 Accedere ai DataBase con JDBC

Basi di dati. Il Linguaggio SQL. K. Donno - Il Linguaggio SQL

Caricamento della classe driver. Apertura della connessione. DriverManager.getConnection() Creazione di uno statement

Accesso a Database con JDBC

Data Base. Master "Bio Info" Reti e Basi di Dati Lezione 6

DBMS (Data Base Management System)

JDBC. Dispense per il corso di Ingegneria del Web

Capitolo 13. Interrogare una base di dati

Il linguaggio SQL. è di fatto lo standard tra i linguaggi per la gestione di data base relazionali.

Programmazione Java Avanzata Spring - JDBC

SQL e applicazioni. Capitolo 8. SQL e linguaggi di programmazione. Applicazioni ed SQL: architettura. Una difficoltà importante.

Dispensa di database Access

Laboratorio di Basi di Dati e Web

2104 volume III Programmazione

Riccardo Dutto, Paolo Garza Politecnico di Torino. Riccardo Dutto, Paolo Garza Politecnico di Torino

Esercitazione 4 JDBC

Informatica Generale Andrea Corradini Sistemi di Gestione delle Basi di Dati

SQL SQL. Definizione dei dati. Domini. Esistono 6 domini elementari:

19. LA PROGRAMMAZIONE LATO SERVER

Lezione V. Aula Multimediale - sabato 29/03/2008

GERARCHIE RICORSIVE - SQL SERVER 2008

I comandi del linguaggio DDL (Data Definition Language): CREATE E ALTER

Informatica per le discipline umanistiche 2 lezione 10

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Uso delle basi di dati DBMS. Cos è un database. DataBase. Esempi di database

Volumi di riferimento

Database e reti. Piero Gallo Pasquale Sirsi

Telerilevamento e GIS Prof. Ing. Giuseppe Mussumeci

Insegnamento di Informatica CdS Scienze Giuridiche A.A. 2006/7. Il trattamento dei dati

Database. Si ringrazia Marco Bertini per le slides

Access. P a r t e p r i m a

MDAC. Attualmente la versione disponibile di MDAC è la 2.8 ma faremo riferimento alla 2.6. ADO Active Data Objects ADO OLE DB ODBC

Al giorno d oggi, i sistemi per la gestione di database

Esercitazione 01: DDL e DML di base

Introduzione ai database relazionali

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Basi di Dati: Corso di laboratorio

Capitoli 8 e 9. SQL embedded. Applicazioni tradizionali Applicazioni Internet. Sistemi di basi di dati Raghu Ramakrishnan, Johannes Gehrke

Lezione 8. Metadati, Viste e Trigger

Reflection in Java. Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A

User Tools: DataBase Manager

Esercitazione 1. Sistemi Informativi T. Versione elettronica: L01.2.DDLDMLbase.pdf

SQL Server Integration Services. SQL Server 2005: ETL - 1. Integration Services Project

DATABASE.

2.5. L'indirizzo IP identifica il computer di origine, il numero di porta invece identifica il processo di origine.

Programmazione Java Avanzata

MagiCum S.r.l. Progetto Inno-School

Sviluppo di applicazioni per basi di dati

Esercitazione query in SQL L esercitazione viene effettuata sul database viaggi e vacanze che prevede il seguente modello E/R:

JDBC: Java e database.

Sistemi Operativi. Interfaccia del File System FILE SYSTEM : INTERFACCIA. Concetto di File. Metodi di Accesso. Struttura delle Directory

Test di unità con JUnit4

Laboratorio di Basi di Dati

CORSO ACCESS PARTE II. Esistono diversi tipi di aiuto forniti con Access, generalmente accessibili tramite la barra dei menu (?)

Manuale utente Volta Control

Telematica II 17. Esercitazione/Laboratorio 6

I file di dati. Unità didattica D1 1

Socket & RMI Ingegneria del Software - San Pietro

Introduzione a MySQL

Organizzazione degli archivi

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

PMF Integration Tools

DBMS. Esempi di database. DataBase. Alcuni esempi di DBMS DBMS. (DataBase Management System)

DATABASE RELAZIONALI

DDL, VINCOLI D INTEGRITÁ, AGGIORNAMENTI E VISTE. SQL è più di un semplice linguaggio di interrogazione

Organizzazione delle informazioni: Database

Database 1 biblioteca universitaria. Testo del quesito

Abilità Informatiche A.A. 2010/2011 Lezione 9: Query Maschere Report. Facoltà di Lingue e Letterature Straniere

Corso sul linguaggio SQL

Hardware delle reti LAN

Транскрипт:

Java Database Connection Java Database Connection () - I sviluppati per offrireinterfaccia standardizzata tra applicazioni Java ed i database relazionali (RDBMS) package java.sql (dal corso dei Servizi Web) - - 1 Requisiti : consistente con metodologiejava (basato su modello client server) basato su classi, interfacce, oggetti e package facilmente implementabile su database esistenti e su diversi middleware per sistemi distribuiti - - 2 Java Database Connection () - 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 specifici dettagli di comunicazione con i database specifici permette ad applicazione di connettersi a più database diversi (anche eterogenei) attraverso database drivers differenziati basato su e ODBC linguaggio di interrogazione SQL interfaccia di comunicazione X/Open CLI ODBC (Open Database Connectivity) creato inizialmente per offrire standard per accesso SQL apiattaforme Microsoft Windows poi esteso ad altre piattaforme definisce funzioni per accesso diretto ai dati (quindi non poi così standard) - - 3 - - 4 CLI: X/Open Call Level Interface standard peraccesso 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) - - 5 Java, SQL e CLI 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) direttamenteintegrate nel database, senza passare attraverso ODBC (oggi molto diffuso) - - 6

2) Applicazione chiede Connection object a DriverMgr e lo usa per comunicare con DB (via Statement SQL) Architettura di - I Database Specific Driver Connection Statement Application Driver Manager ResultSet 3) Tabelle risultato contenute in oggetti ResultSet interrogabili 1) Applicazione istalla DriverMgr e istanzia 1 o più drivers (specifici per DB) Database Specific Driver Connection Statement ResultSet - - 7 Architettura di - 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 traduce le chiamate negli specifici del database NB: DriverManager e applicazione usano le interfacce, non le implementazioni Software delle applicazioni indipendente dal particolare database - - 8 Tipi di connessioni tra database drivers e database servers -ODBC Bridge Part Java, part native driver Intermediate Database Access Server Pure Java Drivers - - 9 Java Application -ODBC Bridge -ODBC Bridge Processo 1 Processo 2 ODBC Data Source ODBC Layer driver : traduce lechiamate in chiamateodbc invia chiamate ODBCal database usando librerie ODBC delega il databaseall esecuzione delle chiamate poco efficiente per livelli multipli e traduzioni intermedie client che gestisce applicazione deve istallare -ODBC Bridge e ODBC driver - - 10 Java Application Driver Part Java, part native driver Vendor specific Data Source driver traduce chiamate in chiamatespecifiche per DB DB processa richieste e invia risultati attraverso specifica invia risultati a driver driver traduce risultati in standard e invia ad applicazione + efficiente (- livelli di traduzione, uso completo di specifiche) MA: client deve istallare driver e nativi del DB - - 11 Intermediate database access server Java Application Driver Driver Server Data Source Native Driver Driver Server intermedio connette più client Java a più DB server Driver Server accessibile via listener, fa da gateway verso i server dei DB applicazione invia richiesta via Driver a Driver Server Driver Server completa la richiesta attraverso native driver 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 - - 12

Java Application Pure Java Drivers Driver Data Source driver converte chiamate 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 driver puri per accedere ai propri DB. Una lista di driver: http://industry.java.sun.com/products/jdbc/drivers/ - - 13 - 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 - - 14 InstantDB Useremo InstantDB come 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) Connessione a database via driver - I import java.sql.*; public class QueryDB { static Connection con ; public static void main (String args[]) { 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); - - 15 - - 16 Connessione a database via driver - II public static void main (String args[]) { Class.forName("org.enhydra.instantdb.jdbc.idbDriver");... URL di database: String url = "jdbc:idb:movies.prp"; con = DriverManager.getConnection(url); Carico driver specifico di DB in DriverManager con.close(); catch (SQLException e) {System.err.println(e); Chiudo connessione path relativo Chiedo a DriverManager connessione a database 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 - - 17 - - 18

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 - - 19 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 Path assoluto: non dipende da directory in cui viene eseguito Java /usr/home/studenti/labgroup/labsweb/sweb40/movies.prp movies.prp: file di properties del database, usato da instantdb (specifica uso di cache, transazioni,...) - - 20 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 - - 21 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 - - 22 Connection con = java.sql.connection - I 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 retea database server o altro DB embedded non richiedono connessione fisica Connection object passato ad applicazione permette di creae statement SQLed eseguirli per interrogare DB in modo indipendente dal tipo di collegamento - - 23 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 - - 24

java.sql.connection - III A termine operazioni, chiudere connessione (DB accettano # max di connessioni prefissato) con.close(); Chiusura di connessione può essere inseritain blocco finally per liberare risorse indipendentemente da successo di interrogazione con = DriverManager.getConnection("jdbc:idb:movies.prp"); // query the DB catch (SQLException e) {System.err.println(e); finally { con.close(); catch (SQLException e) {System.err.println(e); - - 25 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 - - 26 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 tuplecon cursore di scorrimento delle tuple interfaccia implementata da produttori di DB - - 27 Types - I offre insieme di tipi di dati mappabili su tipi di dati SQL e Java. Vd. Java.sql.Types class. Tra questi: Type Purpose SQL Type Java Type DATALINK Rappresenta SQL DATALINK DATALINK java.net.url DATE Data strutturata come giorno, DATE java.sql.date mese ed anno VARCHAR Stringa di lunghezza variabile VARCHAR String INTEGER interi a 32-bit con segno INTEGER int NULL Rappresenta NULL values NULL null per oggetti java, 0 per numeri, false per boolean JAVA_OBJECT Memorizzare oggetti Java --- Object DOUBLE floating-point, doppia precisione con mantissa a 15 bit DOUBLE PRECISION double - - 28 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 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 - - 29 Database CATALOG: Esempio di database TITLE LEAD_ACTOR LEAD_ACTRESS TYPE RELEASE_DATE Austin Powers Mike Myers Liz Hurley Comedy 1999-04-01 Rain Man Tom Cruise Valeria Golino Essay 1995-02-01 Top Gun Tom Cruise Kelly Mc Gills Action 1990-02-01 - - 30

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)); - - 31 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 tutteletuple della tabella CATALOG (la clausola where è vuota) - - 32 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); Estraggo metadati di risultato 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) + Colonne numerate a partire da 1 Interrogo oggetto metadati Interrogo oggetto metadati " " + metadata.getcolumntype(i)); - - 33 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") + ", "+ Scorro le tuple del risultato con il cursore rs.getdate("release_date")); Prelevo valore colonne da tupla corrente NB: potrei anche scorrere le colonne della tupla per numero, da 1 a metadata.getcolumncount()... - - 34 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 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: clausolawhere di una query SQL Es: valori di una query SQL di tipo INSERT (vd dopo) - - 35 - - 36

Interfaccia java.sql.preparedstatement - II Interfaccia java.sql.connection offre metodo PreparedStatementprepareStatement(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-moparametro unbound la stringa s setdate(int parnumber, java.sql.date date) assegna all i-moparametro unbound la data date.. Un metodo per ogni tipo di dato. - - 37 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 - - 38 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(); - - 39 Creazione di database con 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 - - 40 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 DBda file (non lo vediamo) e richiede esecuzione di statement DROP TABLE verificare specificità del DB server da utilizzare - - 41 import java.sql.*; import java.io.*; public class CreaTabelle { Connection con = null; Statement statement = null; Creazione Tabelle - II 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 { con.close(); catch (SQLException e) { throw e; - - 42

Creazione Tabelle - III public void createtables() throws SQLException { statement = con.createstatement(); statement.execute("drop TABLE CATALOG"); NB: executeupdate!! statement.executeupdate("create TABLE CATALOG" + Definizione campi della tabella "(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: dopo creazione tabella esistono i suoi metadati - - 43 Popolamento Tabelle public void insertmovies() throws SQLException,IOException { BufferedReader br=new BufferedReader(new FileReader("m.txt")); String rdate = ""; <...altre dichiarazioni...> do {title = br.readline(); <...> rdate = br.readline(); Tom Cruise... 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 Inserimento tuple in tabella Chiusura statement - - 44 Il main... public static void main (String args[]) { CreaTabelle movies = new CreaTabelle(); 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 - - 45 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 leclassi 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 - - 46 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 - - 47 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.prpdi property del DB Definire la classe CreaTabelle.java che crea (il DB) le tabelle deifilm e degli attori: CATALOG, ACTOR CATALOG TITLE LEAD_ACTOR LEAD_ACTRESS TYPE RELEASE_DATE ACTOR NAME TOWN YEAR 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 - - 48

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.javache 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,. - - 49