Java e i database. Che cosa sono i database?

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Java e i database. Che cosa sono i database?"

Transcript

1 2001 proprietà di MokaByte s.r.l. tutti i diritti riservati è vietata la riproduzione non autorizzata anche parziale Java e i database DI NICOLA VENDITTI Che cosa sono i database? Ogni giorno nel mondo vengono scambiati inimmaginabili volumi di dati e quasi in ogni parte del mondo le informazioni vengono recuperate, elaborate, trasformate, accresciute, aggiornate e infine re-immagazzinate. Questa enormità, che è una novità della nostra epoca, rappresenta, per la sua portata, un raggiungimento per il genere umano. I databases sono il centro vitale di questo movimento: ci permettono non solamente di archiviare i dati e le informazioni raccolte nei vari campi della nostra attività economica, scientifica ecc., ma ci garantiscono anche la sicurezza e l integrità dei dati medesimi, così come la possibilità di poterli recuperare in ogni momento nel modo più efficiente e rapido possibile. A mano a mano che l informatica ha conquistato un ruolo fondamentale nei vari campi dell attività umana, è emersa la necessità di avere dei sistemi capaci di gestire in modo avanzato i dati e le informazioni. I DBMS (DataBase Management System) sono la risposta più significativa a questa esigenza. Per DBMS si intende un sistema costituito essenzialmente dal database vero e proprio e, soprattutto, dal software per gestire tutte le operazioni che ordinariamente si fanno su un database, dall archiviazione all aggiornamento, fino al backup, al mirroring e così via. Risale agli inizi degli anni Ottanta la comparsa sul mercato software dei primi DBMS e si trattava per lo più di sistemi che usavano il file system del sistema operativo che li ospitava come repository dei dati e delle librerie C per accedere ad essi da parte dei programmi client. Pioniere nel campo della ricerca orientata ai database è stata la IBM che, prima ancora di altri grandi database vendor come Oracle e Informix, si trovò ad affrontare la necessità di fornire sui propri sistemi mainframe, allora già largamente diffusi, del software capace di gestire l archiviazione dei dati. Come detto, originariamente, e in parte anche adesso, era il file che veniva utilizzato come unità di storage per i database. Così la ricerca si orientò allo studio di un metodo di organizzazione e strutturazione dello spazio nei files per un archiviazione ottimale e un accesso efficiente ai dati. Un risultato tuttora popolare di questa ricerca fu l ISAM (Indexed Sequential Access Method). 1

2 Il concetto di tabella divenne popolare insieme al modello relazionale agli inizi degli anni Settanta grazie a Codd (un ricercatore di IBM), che gettò le basi di un approccio teorico ancora largamente utilizzato in questo settore. Con la comparsa di nuovi protagonisti nel campo dei database, sorse l esigenza di avere un linguaggio comune per l accesso ai dati, visto che ognuno disponeva di una propria libreria (ad esempio Informix nelle primissime versioni del suo database forniva una libreria detta C- ISAM ). Anche in questo la IBM fu protagonista, e finì per diffondersi un suo linguaggio chiamato SQL (Structured Query Language) oggi molto popolare: da allora non ha subito modifiche ma solo aggiunte. L SQL, derivato a sua volta da un altro linguaggio sperimentale chiamato SEQUEL (da qui la diffusa pronuncia siquel ) creato per un sistema che si chiamava System R. La standardizzazione dell SQL voluta da ISO e ANSI risale al Una successiva standardizzazione, nel 1992, introduce nuovi e interessanti elementi senza cambiare la struttura. A questa versione dell SQL si ci riferisce come SQL-92. Prima di passare al punto di vista client, e quindi a Java e JDBC, ecco una breve panoramica dei tipi di database esistenti sul mercato. Il modo più comune per classificare i database è quello di discriminarli in base al modello di organizzazione dei dati che utilizzano al loro interno. Usando questo metodo una possibile suddivisione dei databases potrebbe essere quella che segue nei prossimi paragrafi. Relazionali Si basano sul modello relazionale: prevedono quindi organizzazione dei dati concettualmente descrivibile in termini di entità e relazioni tra di loro; l accesso e la manipolazione dei dati viene fatto tramite SQL. Esempi: Oracle 8i, Informix Dynamic Server.2000, DB2 e altri. Dimensionali Sono una specializzazione dei primi: per il datawarehouse: utilizzano il modello relazionale ma i princìpi con cui viene definito il modello di un db dimensionale è diverso da quello tradizionale basato sul concetto di normalizzazione. Per accedere e utilizzare le caratteristiche di questi database si utilizza una versione estesa dell SQL. Questi database vengono più comunemente chiamati OLAP (On Line Analytical Processing) per confronto con i precedenti anche conosciuti con il nome di OLTP (On Line Transaction Processing). Esempi: Redbrick, Informix XPS e altri. Object Oriented Sono molto più recenti dei primi due. Più che basi di dati sono framework per la persistenza di oggetti applicativi. Non vi si accede con l SQL; il modello di accesso ai dati non differisce dai meccanismi che il linguaggio OO (per cui il database fornisce il binding) utilizza per la creazione e la gestione degli oggetti. 2

3 Esempi: UniData di Ardent, Jasmine di CA. Object Relational Rappresentano una via di mezzo tra i database relazionali puri e i database OO anche se più esattamente possono essere considerati dei relazionali con estensioni di supporto per la tecnologia Object Oriented. Per accedere a questi database si utilizza ancora l SQL, ed è lo stesso SQL, attraverso alcune estensioni proprietarie a permettere l accesso alle caratteristiche a oggetti di questi database. Accesso ai database: il punto di vista applicativo Parallelamente all evoluzione dei database sono cambiati i meccanismi con cui le applicazioni accedono ai dati. Originariamente come detto ogni DBMS disponeva, per le applicazioni, di proprie librerie C. Oltre all SQL fu creato uno standard a livello di chiamata detto appunto Call Level Interface (CLI) proposto da X/Open. Fu cioè definita la sequenza di chiamate che l applicazione (per lo più un applicazione C) doveva seguire per accedere in modo corretto alle informazioni. I produttori di database hanno iniziato a fornire questo set di librerie in aggiunta alle proprie originarie. Per esempio ancora adesso il database Oracle fornisce uno strato CLI detto OCI (Oracle Call-level Interface). JDBC è modello anch esso basato sullo standard CLI per l accesso alle basi di dati. Il gruppo responsabile di Java ha deciso, a ragione, di fornire il proprio linguaggio di una propria libreria per le operazioni sui dati. Le motivazioni sono diverse ma si capisce subito che una libreria scritta per il C difficilmente si adatta a un linguaggio basato su classi e interfacce (e, per giunta, a differenza del C++, privo di puntatori). Il risultato raggiunto brilla sicuramente per semplicità ed essenzialità: con solamente 4 righe di codice posso caricare il driver più adatto alla base di dati che voglio interrogare, ottenere la connessione, creare lo statement e recuperare il result set esplicitando la query. I problemi che occorre affrontare quando si scrive una libreria per l accesso ai database sono diversi e non solo di tipo applicativo: si deve garantire dal lato client una coerenza logica il più possibile vicina alla filosofia del linguaggio che l applicazione usa, adattandosi ai metodi tra loro molto differenti che i DBMS utilizzano per processare le richieste dei client; si deve fornire poi una specifica per la scrittura e l implementazione dei drivers e non da ultimo convincere i produttori di database della opportunità di scrivere drivers per questa nuova interfaccia. Pertanto il risultato di semplicità e universalità di JDBC è tanto più apprezzabile. JDBC è una interfaccia a oggetti per l esecuzione di comandi SQL: è bene sottolineare quindi che il linguaggio SQL rimane il vero medium per la comunicazione con il database e lo stesso vale per le altre tecnologie a oggetti concorrenti di Java come DAO. Ciò è dovuto al fatto 3

4 che i database con cui si comunica sono per lo più relazionali e non sono predisposti per supportare le moderne applicazioni a oggetti. L accesso ai dati può essere considerata un anomalia nel paradigma Object Oriented alle radici di Java e del C++ ad esempio, dove non esiste il concetto di dato semplice né tantomeno quello di riga e di tabella. Per questi linguaggi occorrerebbe, più che una repository di dati come i database tradizionali, un framework per la persistenza degli oggetti: tutto quello che l applicazione dovrebbe fare sarebbe solo di indicare un astratta repository da cui recuperare un oggetto che rappresenta un certo elemento di realtà e in cui immagazzinare o più precisamente rendere persistenti gli oggetti nel loro stato applicativo. Si può però ovviare in vari modi a ciò e Java permette di utilizzare diverse tecniche per farlo (p.e. usando un layer software intermedio basato su RMI). A parte questo problema, JDBC è molto flessibile, anche grazie al fatto che è stato progettato basandosi sul concetto di interfaccia e non di oggetto: tutte le operazioni necessarie per accedere ai dati vengono fatte attraverso i metodi esposti da interfacce (che il driver JDBC si occupa di implementare) e non occorre istanziare alcun oggetto. Introduzione a JDBC Spiegare come è fatto JDBC significa essenzialmente dire come una applicazione deve utilizzarlo, perché in fondo non è altro che una libreria per applicazioni Java. Per accedere alla funzionalità di JDBC occorre che l applicazione importi il package java.sql, parte integrante di tutte le Virtual Machine a partire dalla versione 1.1. Al momento la versione più recente di JDBC è la 2.1, che comprende tutto il JDBC 1.1 e lo estende con nuove funzionalità e in più le Standard Extensions introdotte per l integrazione di JDBC nella piattaforma J2EE; vedremo più avanti le novità introdotte con JDBC 2.0 e cosa sono le Standard Extensions, per adesso concentriamoci sul core di JDBC. Come detto JDBC è progettato sul modello CLI. Esso fornisce oggetti e metodi per l interazione con un qualunque DB. Prima di vedere, con l ausilio di alcuni esempi, come funziona, vediamo brevemente una tipica applicazione. Supponiamo di disporre di un DB per il quale esista un driver JDBC. I passi da compiere per l esecuzione di una semplice query sono principalmente i seguenti: 1. Caricamento driver JDBC e connessione al DB Prima di ogni cosa occorre caricare il driver che gestisce la nostra base dati in modo esplicito o implicito. Ecco un esempio di caricamento esplicito della classe di un driver: Class.forName("com.informix.jdbc.IfxDriver"); per caricare il driver JDBC tipo 4 di Informix. La seconda operazione da fare è la connessione al DB individuato univocamente dalla stringa o URL di connessione. Al termine di questa operazione si dispone di un oggetto di tipo Connection che rappresenta la connessione. 4

5 Per la connessione l applicazione si affida al Driver Manager; l applicazione semplicemente richiede una connessione specificando l URL del database a cui desidera connettersi. Connection conn = "scott", "tiger"); Sarà il Driver Manager a recuperare il driver giusto attraverso un meccanismo a cui devono conformarsi tutti i driver JDBC. Una volta selezionato, il driver sarà responsabile di tutte le operazioni per quella connessione. 2. Creazione dello Statement object Creata la connessione al DB si è in possesso di un oggetto che rappresenta la connessione al DB. Da esso è possibile poi ottenere tre diversi tipi di oggetti che permettono di creare SQL query da inviare al DB. Questi sono Statement, PreparedStatement e Callable Statement. Essi differiscono per le modalità con cui sono eseguite all interno del DBMS. Alcuni DBMS potrebbero non avere tutte e tre le implementazioni dal punto di vista nativo. Ecco il frammento di codice che recupera lo statement Statement stmt = conn.createstatement(); Come vedremo, si possono recuperare versioni più specializzate per lavorare per esempio con le stored procedure; l esempio sopra riportato è però sufficiente a dare l idea. 3. Esecuzione della query Una volta creato uno dei tre oggetti precedenti non ci resta altro che eseguire la query. Le specifiche JDBC vogliono che le operazioni avvengano in modo thread safe in maniera tale che oggetti diversi accedano agli stessi dati in modo sicuro. Ecco un esempio ResultSet rs = stmt.executequery("select * FROM utenti"); 4. Elaborazione dei risultati Come vedremo una volta eseguite le query si ottiene un oggetto di tipo ResultSet che contiene i dati risultati della query ordinati per record. Attraverso il suo metodo next() è possibile percorrere tali record e accedere ai campi dello stesso attraverso opportuni metodi getxxx. Come detto all inizio, quando si costruisce una libreria per i database occorre che questa si conformi al modello di accesso ai dati utilizzato del medesimo. Questo è un esempio evidente. In questo caso sembra che abbiate a vostra disposizione un oggetto che contiene al suo interno il set di dati recuperato ma non è così. In realtà la query (è sottinteso che stiamo parlando di una query ) ha solo creato un cursore che punta inizialmente alla prima riga del set di risultati ritornati: il metodo next() serve per spostare il cursore in avanti e i metodi getxxx() si utilizzano per spostare effettivamente i dati dal server al client. 5

6 Per rendervene conto potete utilizzare il seguente drastico esperimento: provate ad eseguire i passi fino al 4 e, dopo la prima chiamata a next(), provate a distruggere la tabella su cui è stata fatta la query. Se non vi fossero i cursori e l applicazione avesse tutti i risultati della query, allora potrebbe scandire il suo result set anche se la tabella originaria non esiste più, e invece viene segnalato un errore grave. Ritorneremo su questa differenza quando parleremo dei RowSets. Il metodo standard per la scansione dei risultati è mostrato nel codice che segue. while(rs.next()) { String nome = rs.getstring(1); // colonna 1 contiene il nome String cognome = rs.getstring(2); // colonna 2 contiene il cognome int eta = rs.getint(2); // colonna 3 contiene l'età 5. Eventuale commit e rollback JDBC offre la possibilità di gestione delle transazioni. Per inciso, il database a cui si connette l applicazione deve supportare le transazioni. Ciò si traduce nel fatto che nel database dell applicazione deve essere abilitato il log delle operazioni. Verificate presso l amministratore del DB che sia effettivamente così. Se il logging sul database non è abilitato, e quindi non sono supportate le transazioni, riceverete un esplicito messaggio di errore in tal senso. La commit o la rollback della transazione vanno invocate attraverso gli omonimi metodi dell oggetto Connection. 6. Rilascio delle risorse utilizzate Una volta eseguite le operazioni volute è bene rilasciare le risorse acquisite per cui si chiude la connessione al DBMS. Ciò comporta per lo meno la chiusura degli oggetti ResultSet, Statement e Connection, nell ordine inverso alla loro apertura. Se occorre, avete a disposizione un metodo su tali oggetti per verificare se l operazione è già stata effettuata: isclose(), che però vi dice solo che il metodo close() sull oggetto è stato già chiamato, e non se la connessione è attiva o meno. Ecco tradotta in un piccolo esempio di programma che utilizza JDBC su ODBC, la sequenza di passi appena illustrata. try { // Caricamento esplicito del driver JDBC per il tipo di sorgente // di dati che mi interessa: in questo caso una fonte ODBC Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // Creazione della connessione al database (tramite // il Driver Manager) Connection con = DriverManager.getConnection("jdbc:odbc:MokaDb"); // Creazione dello statement, l'oggetto che utilizzo per // spedire i comandi SQL al database Statement st = con.createstatement(); // Eseguo la query o un altro comando SQL attraverso lo statement // e recupero i risultati attraverso l'interfaccia ResultSet 6

7 ResultSet rs = st.executequery("select * from lettori"); // Scandisco il result set per la visualizzazione // delle informazioni recuperate while (rs.next()){ System.out.println("Nome: " + rs.getstring(1)); System.out.println("Cognome: " + rs.getstring(2)); System.out.println("Telefono: " + rs.getstring(3)); System.out.println(" " + rs.getstring(4)); System.out.println("Categoria: " + rs.getstring(5)); System.out.println(" "); // Rilascio le risorse utilizzate rs.close(); // result set st.close(); // statement con.close(); // connessione catch(classnotfoundexception cnfe) { System.err.println("Attenzione classe non trovata" + cnfe.getmessage()); catch(sqlexception sqle) { System.err.println("Attenzione errore SQL" + sqle.getmessage()); Fino ad ora abbiamo mostrato la sequenza di passi da seguire per l esecuzione di una query. Ovviamente JDBC permette di eseguire tutte le operazioni SQL di manipolazione dei dati e delle strutture dati (comandi DDL e DML). Prima di affrontare nel dettaglio tutte le possibilità di JDBC soffermiamoci su alcuni aspetti generali di JDBC. Convenzioni JDBC URL Naming Per permettere a una applicazione di accedere a un database, la prima cosa da fare è definire la localizzazione dello stesso e la modalità di accesso, come ad esempio il tipo di driver da utilizzare oppure UserID e Password dell utente con il quale si intende accedere ai dati. Tutte queste informazioni devono essere rese disponibili al momento della connessione in un qualche formato prestabilito. La soluzione scelta consiste nell impacchettare tutti questi dati in una stringa, detta di connessione, che viene utilizzata al momento della creazione del collegamento. Per la scelta della sintassi di tale stringa si è adottato un formalismo derivante da quello utilizzato per la definizione degli URL. La struttura generica di tale stringa è la seguente: jdbc:<subprotocol><domain-name> Nella sintassi URL il primo termine indica il protocollo da utilizzare per la gestione della risorsa individuata, e che in questo è ovviamente jdbc. Il subprotocol rappresenta invece il sottoprotocollo ovvero il driver che si intende utilizzare come interfaccia al DB verso il DBMS. Per domain-name si intende, invece, il nome della risorsa che verrà elaborata dal driver in relazione a delle regole caratteristiche del driver stes- 7

8 so. Nel caso più comune di utilizzo del bridge jdbc-odbc, un URL potrebbe essere il seguente: jdbc:odbc://www.infomedia.it/dblettori In questo modo si indica che la risorsa che vogliamo raggiungere attraverso JDBC e il driver bridged JDBC-ODBC, si chiama dblettori. Come detto l interpretazione del domainname dipende dal driver. Nel caso del bridge il nome dblettori rappresenta il nome di un DSN (Data Source Name). Nel seguente caso jdbc:infonaming:db si interpreterà il nome db in relazione a quello stabilito dal sottoprotocollo infonaming che potrebbe, ad esempio, indirizzare al DBMS in un URL caratteristico dello stesso. Gestione dei driver: il DriverManager Come si può dedurre dalle considerazioni fatte, i driver assumono un ruolo fondamentale. Ad essi è delegato il compito di adattare tutte le operazioni possibili con JDBC al DBMS corrispondente. JDBC dà la possibilità di collegarsi a diversi DB individuati da diversi URL. Serve quindi un meccanismo per associare a ciascun sottoprotocollo il driver corrispondente. A questo compito è dedicata la classe java.sql.drivermanager. Essa gestisce i driver e permette di stabilire una connessione con il DBMS indirizzato fornendo un oggetto di tipo java.sql.connection rappresentativo della connessione. Il meccanismo di caricamento del driver corrispondente all URL può avvenire in due modi: attraverso la lista dei driver elencati nella proprietà di sistema jdbc.drivers. I vari driver disponibili saranno scritti in relazione alla proprietà jdbc.drivers, in successione divisi dai due punti ( : ). Quando si cerca, attraverso il metodo getconnection() di stabilire una connessione al DB e quindi di ottenere un oggetto Connection, il Driver- Manager carica tutti i driver elencati nella proprietà di sistema jdbc.drivers. Poi registrerà i driver trovati attraverso il metodo registerdriver(). Per stabilire la connessione, il DriverManager farà un parsing dell URL e cercherà il driver corrispondente tra quelli memorizzati. Possiamo ottenere la lista di questi attraverso il metodo getdrivers(). 8

9 richiamando esplicitamente il driver attraverso la istruzione Class.forName(). In questo caso si avrà il caricamento del driver e la gestione dello stesso come se fosse avvenuta nel modo descritto al punto precedente. Nell esempio che segue è riportata una porzione di codice completa che partendo dalle due modalità di caricamento del driver, esegue alcune semplici operazioni, come la connessione e il successivo controllo sui driver disponibili. if (loadtype.compareto("esp")==0) { // Caricamento del driver per mezzo del settaggio // della proprietà di sistema sql.drivers System.out.println("Caricamento implicito del Bridge JDBC-ODBC"); Properties prop = System.getProperties(); prop.put("jdbc.drivers", "sun.jdbc.odbc.jdbcodbcdriver"); System.setProperties(prop); else { //caricamento del driver per dichiazione esplicita try { System.out.println("Caricamento esplicito di JDBC-ODBC"); Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); catch(classnotfoundexception cnfe) { System.out.println("Attenzione: driver non disponibile"); // controllo di tutti i driver caricati Enumeration enum = DriverManager.getDrivers(); System.out.println(""); System.out.println("Elenco dei driver disponibili in memoria"); System.out.println(" "); System.out.println("Driver =" + enum.nextelement()); while (enum.hasmoreelements()) System.out.println("Driver" + enum.nextelement()); La classe DriverManager non è l unica che permette di stabilire una connessione al DB. Esiste anche l implementazione dell interfaccia Driver. Essa contiene tutte le informazioni relative a un particolare driver. È possibile conoscere se esso è JDBC-Compliant, la sua versione, se accetta oppure no un determinato URL. Attraverso il metodo connect() è possibile creare la connessione a un URL. Questa interfaccia è utile nel caso di gestione avanzata di determinati Driver in quanto permette, attraverso un oggetto Properties di assegnare valori a suoi eventuali parametri. A tale scopo è dedicata anche la classe DriverPropertyInfo. Ecco un esempio di utilizzazione dell interfaccia Driver per conoscere le caratteristiche del database. try { // caricamento del driver per dichiazione esplicita Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 9

10 catch(classnotfoundexception cnfe) { System.out.println("Attenzione il driver non è disponibile"); try { Enumeration drivers = DriverManager.getDrivers(); while (drivers.hasmoreelements()) { Driver driver = (Driver) (drivers.nextelement()); System.out.println("Driver: " + driver); System.out.println("Accetta standard jdbc-url: " + driver.acceptsurl("jdbc:odbc:mokadb")); System.out.println("Minor Version: " + driver.getminorversion()); System.out.println("Major Version: " + driver.getmajorversion()); System.out.println("JDBC Compatibile:" + driver.jdbccompliant()); Gestione degli errori Si sono visti fino ad adesso tutti i modi per poter gestire i dati contenuti in un database per mezzo delle librerie JDBC. Più avanti sarà approfondita le differenze che ci sono nel caso si debba realizzare una applet o una applicazione. Per il momento è bene prendere in considerazione un aspetto abbastanza importante, quello della gestione delle eccezioni durante questo tipo di operazioni. Le SQLExceptions Negli esempi riportati precedentemente, si è potuto osservare che ogni volta che viene eseguita una operazione delicata, viene intercettata una eccezione di tipo SQLException. Questa classe offre una serie di informazioni relativamente al tipo di errore che si è verificato. Essa deriva dalla più generale java.lang.exception, la quale a sua volta deriva dalla Throwable. Le informazioni contenute nella classe sono le seguenti: il tipo di errore verificato sotto forma di una stringa descrittiva; tale informazione può essere utilizzato come Exception message e può essere ricavata per mezzo del metodo getmessage(). una proprietà (SQLState) descrivente l errore in base alle convenzioni dello standard X/Open SQLState. Può essere ottenuto con getsqlstate(). un codice di errore specifico del produttore del database, e che in genere corrisponde al messaggio di errore fornito dal DBMS stesso; geterrorcode() permette la sua lettura. una catena al successivo oggetto di tipo SQLException, la quale può essere utilizzata se si sono verificati più di un errore. Il metodo getnextexception() permette di spostarsi su questa catena. 10

11 Nell esempio che segue è mostrato come utilizzare tali informazioni per avere una descrizione completa dell errore verificatosi. try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection con = DriverManager.getConnection("jdbc:odbc:MokaDb"); Statement st = con.createstatement(); //esegue una istruzione errata: la tabella Lettrici non esiste ResultSet rs = st.executequery("select * from Lettrici"); catch(classnotfoundexception cnfe) { System.out.println("Classe non trovata" + cnfe.getmessage()); catch(sqlexception sqle) { System.out.println("Attenzione errore SQL" + "\n"); while (sqle!= null) { System.out.println("Messaggio SQL \n" + sqle.getmessage() + "\n"); System.out.println("SQLState \n" + sqle.getsqlstate() + "\n"); System.out.println("Codice errore del produttore \n" + sqle.geterrorcode()+ "\n"); System.out.println("Traccia dello StackTrace"); sqle.printstacktrace(system.out); sqle = sqle.getnextexception(); System.out.println(""); I Warnings Oltre alle eccezioni alle quali si è abituati in Java, nel caso specifico di JDBC è disponibile anche un altro strumento per la gestione delle situazioni anomale. La differenza che sussiste fra un Warning e una eccezione è essenzialmente nel fatto che il primo non interrompe il flusso del programma: si dice infatti che sono dei segnalatori silenziosi di anomalie. Un Warning viene scatenato direttamente dal database, in funzione del tipo di errore che si verifica. Non è possibile generalizzare quando l uno o l altro tipo di strumento viene generato, essendo molto dipendente dall implementazione del db. I Warning offrono lo stesso tipo di informazioni delle eccezioni SQLException, e possono essere ricavate con metodi del tutto identici rispetto al caso precedente. I metadati JDBC permette quello che la documentazione di Sun chiama accesso dinamico ai database. Il nome non indica molto, ma si tratta della possibilità di accedere a un database e ricavarne informazioni sulla sua struttura interna (tabelle, relazioni, sinonimi, link, trigger, ecc.) senza saperne nulla a priori. In questo modo posso, per esempio, interrogare una tabella utenti senza sapere esattamente quali e quante sono le colonne che la compongono. La risposta è nel fatto che tutti i DBMS hanno delle tabelle interne dette dizionari che contengono metainformazioni circa la struttura interna dai database. Per fare un esempio, quando si crea un database Informix, prima ancora che vengano create tabelle dagli utenti abilitati, ne viene automaticamente creata qualche decina come normale processo di creazione del database. Se si hanno i privilegi e si esegue il comando "SELECT * FROM systables" si 11

12 può aver l elenco di tali tabelle che hanno nomi a volte molto espliciti (sysindexes, systriggers, syscolumns, ecc.). JDBC sfrutta questa possibilità e fornisce un paio di interfacce per fornire al programmatore un modo per accedere a tali meta-informazioni. Chiudiamo questa panoramica su JDBC con una applicazione completa che può essere utilizzata per eseguire query su database Cloudscape. Cloudscape è il database della omonima software house recentemente aquisita da Informix, distribuito in evaluation dalla Sun con la propria piattaforma Java 2 Enterprise Edition. Per provare il programma quindi potete utilizzare l installazione di J2EE che avete sulla vostra macchina oppure scaricare una versione gratuita di Cloudscape per valutazione. Cloudscape può anche essere utilizzato come database di test per le tecnologie J2EE che agiscono su Data Sources, pertanto è comodo un programma da linea di comando per l esecuzione di queries come il seguente. package esempi.cloudscape; import java.sql.*; /** * Semplice programma che crea e si connette a * un database <i>cloudscape</i> */ public class SQLCloudscape { /** * Nome del driver JDBC di Cloudscape * Una volta installata la Java 2 EE si trova in * $J2EE_HOME/lib/cloudscape/cloudscape.jar su Unix e * %J2EE_HOME%\lib\cloudscape\cloudscape.jar su Windows */ static String driver = "COM.cloudscape.core.JDBCDriver"; /** * Stringa di connessione al database cloudscape * 'create = true' indica al driver di creare il database * se non esiste. Viene utilizzato se non ne viene fornito * uno dalla linea di comando */ static String url = "jdbc:cloudscape:clouddb;create = true"; /** * Utilizzato come comando SQL di default se non ne viene * passato uno sulla linea di comando */ static String sql = "SELECT * FROM SYS.SYSTABLES"; /** * main: entry del programma */ public static void main(string[] args) { try { if(args.length > 0) url = args[0]; 12

13 if(args.length > 1) sql = args[1]; // Carica il driver di Cloudscape Class c = Class.forName(driver); System.err.println("Caricato driver nella VM: " + c.tostring()); // Crea la connessione (crea il database) Connection conn = DriverManager.getConnection(url); System.err.println("Creata connessione: " + conn.tostring()); // Crea lo statement Statement stmt = conn.createstatement(); System.err.println("Creato statement: " + stmt.tostring()); // Esegue una query sulla tabella di sistema ResultSet rs = stmt.executequery(sql); System.err.println("Esecuzione query: " + sql); // La scansione result set dà tutte le tabelle // presenti nel database ResultSetMetaData rsmd = rs.getmetadata(); // prende il numero di colonne int cols = rsmd.getcolumncount(); while(rs.next()) { for(int i = 0; i < cols; ++i) { // le colonne 1, 2 System.out.print(rs.getString(i + 1)); // separatore di campi if(i < cols) System.out.print(" "); System.out.println(""); // Chiusura delle risorse rs.close(); stmt.close(); conn.close(); catch(exception e) { System.err.println("Messaggio err.: " + e.getmessage()); return; Segue lo script sqlcloudscape.bat che lancia il programma impostando correttamente l ambiente. REM REM Lancia programma SQLCloudscape per le query su database Cloudscape REM SET J2EE_HOME=D:\java\j2sdkee1.2 SET CLOUDSCAPE_HOME=D:\java\j2sdkee1.2\cloudscape SET WORK_HOME=D:\lavoro\sviluppo SET CLASSPATH=%CLASSPATH%;%J2EE_HOME%\lib\cloudscape\cloudscape.jar;%WORK_HOME% 13

14 java -Dcloudscape.system.home=%CLOUDSCAPE_HOME% esempi.cloudscape.sqlcloudscape %1 %2 La variabile d ambiente cloudscape.system.home indica dove creare il database se non specificato, come nel nostro caso. JDBC 1.1 core API: struttura del package java.sql Ecco nel grafico come si articolano le classi più utilizzate del package java.sql. In questa sezione affrontiamo in dettaglio le principali classi del package java.sql. DriverManager DriverManager.registerDriver() Questo metodo restituisce un enumerazione dei drivers caricati nella Virtual Machine. Per caricare un driver su utilizza di solito l istruzione Class.forName("com.informix.jdbc.IfxDriver"); I Driver JDBC hanno normalmente degli inizializzatori statici che registrano la classe stessa presso il DriverManager automaticamente. Ecco un esempio: public class IfxDriver extends { // blocco di inizializzazione statica static { // qualcosa del genere DriverManager.register(new IfxDriver()); 14

15 Questo metodo di registrazione viene detto implicito. Per registrare invece la classe del driver in modo esplicito si invoca il metodo registerdriver(). DriverManager.registerDriver(new Classe_del_Driver); Il thin driver di Oracle richiede la registrazione esplicita ad esempio, anche se il metodo più diffuso è quello implicito. È possibile fare in modo che la VM carichi automaticamente uno o più drivers JDBC. Per fare ciò occorre impostare la variabile d ambiente jdbc.drivers. DriverManager.getDrivers() Questo metodo permette di recuperare in forma di enumerazione l elenco dei drivers caricati nella VM. Il programma che segue utilizza getdrivers() per mostrare come effettivamente venga letta dalla VM la variabile d ambiente jdbc.drivers citata poco sopra. package esempi.sql; import java.sql.drivermanager; import java.sql.driver; import java.util.enumeration; /** * Esempio 01 - mostra la JVM * utilizza la variabile d'ambiente jdbc.drivers. */ public class Esempio01 { static public void main(string[] args) { // Mostra la variabile jdbc.drivers System.out.println("jdbc.drivers=" + System.getProperty("jdbc.drivers")); // Enumera i driver in memoria Enumeration e = DriverManager.getDrivers(); while(e.hasmoreelements()) { Driver driver = (Driver)e.nextElement(); System.out.println("Nome: " + driver.tostring()); System.out.println("JDBC Compliant: " + driver.jdbccompliant()); Ecco il risultato dell esecuzione del programma in due diversi casi. D:\lavoro\sviluppo>java esempi.sql.esempio01 jdbc.drivers=null D:\lavoro\sviluppo>java -Djdbc.drivers=com.informix.jdbc.IfxDriver esempi.sql.esempio01 jdbc.drivers=com.informix.jdbc.ifxdriver Nome: 15

16 JDBC Compliant: true D:\lavoro\sviluppo>java - Djdbc.drivers=com.informix.jdbc.IfxDriver:COM.cloudscape.core.JDBCDr iver esempi.sql.esempio01 jdbc.drivers=com.informix.jdbc.ifxdriver:com.cloudscape.core.jdbcdriver Nome: JDBC Compliant: true Nome: JDBC Compliant: false setlogstream() Questo metodo permette di impostare lo stream di log per le operazioni di JDBC. L applicazione che segue mostra come si utilizza il metodo impostando come stream di log un file sql.log. package esempi.sql; import java.io.*; import java.sql.*; /** * Esempio 02 - mostra strumenti di loggin di JDBC */ public class Esempio02 { /** * Stream di log di JDBC */ static PrintStream sqlstream = null; static { try { FileOutputStream fos = new FileOutputStream("C:\\temp\\sql.log"); sqlstream = new PrintStream(fos); catch(ioexception e) { System.err.println("ERRORE I/O: " + e.getmessage()); static public void main(string[] args) { try { // Carica il driver Cloudscape Class.forName("COM.cloudscape.core.JDBCDriver"); DriverManager.setLogStream(sqlstream); DriverManager.println("--- Sessione " + (new java.util.date()).tostring() + " ---"); // Crea connessione DriverManager.println("apertura connessione"); Connection conn = DriverManager.getConnection("jdbc:cloudscape:clouddb"); DriverManager.println("connessione aperta con successo"); // Chiude la connessione DriverManager.println("chiusura connessione"); conn.close(); DriverManager.println("connessione chiusa con successo"); 16

17 catch(exception e) { System.err.println("ERRORE: " + e.getmessage()); L output prodotto nel file C:\temp\sql.log è il seguente: --- Sessione Mon Oct 16 01:05:40 GMT+02: apertura connessione DriverManager.getConnection("jdbc:cloudscape:clouddb") trying getconnection returning connessione aperta con successo chiusura connessione connessione chiusa con successo Si notano, oltre ai nostri messaggi, alcuni messaggi di log della VM riguardanti la ricerca del driver associato all URL jdbc:cloudscape:clouddb utilizzato dal programma: questi messaggi non appaiono sulla console, quindi occorre esplicitamente impostare uno stream di log come mostrato (può anche essere System.out o System.err) per visualizzarli. Il programma che segue recupera il default (0) per il valore di login timeout. package esempi.sql; import java.sql.drivermanager; /** * Esempio 03 - mostra il valore di default di login timeout */ public class Esempio03 { static public void main(string[] args) { int timeout = DriverManager.getLoginTimeout(); System.out.println("Default Login Timeout " + timeout); getconnection() Restituisce l oggetto Connection. Il driver manager scorre l elenco dei drivers caricati nella VM e su ognuno invoca il metodo acceptsurl() per vedere se il driver comprende il protocollo di connessione richiesto dall applicazione. Se trova il driver adatto viene invocato il suo metodo connect() per ottenere la connessione. Esistono tre forme di getconnection(), da utilizzare a seconda di come si vogliono passare le proprietà della connessione. Il primo esempio: DriverManager.getConnection("jdbc:informixsqli://www.mokabyte.com:1525/mokadb:INFORMIXSERVER=ol_mokabyte;user= mokauser;password=mokaifx"); 17

18 Il secondo esempio: DriverManager.getConnection("jdbc:informixsqli://www.mokabyte.com:1525/mokadb:INFORMIXSERVER=ol_mokabyte", "mokauser", "mokaifx"); Il terzo esempio: Properties props = new Properties(); props.put("user", "mokauser"); props.put("user", "mokaifx"); Connection DriverManager.getConnection("jdbc:informixsqli://www.mokabyte.com:1525/mokadb:INFORMIXSERVER=ol_mokabyte", props); createstatement() Crea l oggetto connessione utilizzato dall applicazione per l esecuzione dei comandi SQL. E- siste in due forme, per il supporto della nuova funzionalità di scrolling result set. gettransactionisolation() settransactionisolation() Si utilizzano per impostare il livello di isolamento delle transazioni per la sessione corrente. I possibili livelli di isolamento transazione sono riportati di seguito (in ordine di isolamento crescente, tra parentesi la relativa costante da utilizzare in settransactionisolation()). uncommitted read (TRANSACTION_READ_UNCOMMITTED). Questo livello di isolamento permette di leggere anche i dati in transazione, quindi dati che stanno quindi per essere modificati e non sono integri. committed read (TRANSACTION_READ_COMMITTED). Lettura di soli dati non in transazione. Se un altra sessione sta lavorando sui dati ai quali cerchiamo di accedere, la lettura viene bloccata. repeatable read (TRANSACTION_REPEATABLE_READ). Questo livello di isolamento vi garantisce non solo che i dati che leggete durante la vostra transazione siano integri ma, se all interno della stessa transazione leggete più volte gli stessi dati (ad esempio rifate la stessa query) riotterrete gli stessi risultati. Il livello di isolamento precedente non garantisce questa possibilità. serializable (TRANSACTION_SERIALIZABLE). È il livello di isolamento più alto per una transazione utente. Oltre a ovviare ai problemi precedenti, conosciuti come dirty read e non-repeteable read, permette di affrontare anche il problema dei phantom read, che si verifica quando un altra transazione inserisce ad esempio una nuova riga che soddisfa a una clausola di WHERE di una lettura all interno della vostra transazione. In tal caso i valori prece- 18

19 dentemente letti non sarebbero stati modificati ma vi capiterà di vedere dati nuovi (phantom) che prima non comparivano nel record set. Perché non impostare fin dall inizio, o prima di qualsiasi transazione, il massimo livello in modo da evitare in anticipo ogni problema? La risposta è semplice: l aumento del livello di isolamento di una o più sessioni utenti limita il grado di parallelismo del database, non riuscendo il server a eseguire le transazioni in modo concorrente. Ne risulta quindi un abbassamento delle performance. Il più delle volte è il sufficiente il livello di isolamento di default, che può essere reperito con il metodo DatabaseMetadata.getDefaultTransaction- Isolation(). Occorre conoscere d altra parte i diversi gradi di isolamento e quali specifiche violazioni evitano nel caso dobbiate scrivere programmi che effettuano modifiche critiche sui dati. commit() rollback() getautocommit() setautocommit() Questi quattro metodi si utilizzano insieme per avviare una transazione in modo programmatico, senza cioè inviare al database le istruzioni SQL classiche BEGIN WORK, COMMIT WORK, ROLLBACK. Normalmente tutte i comandi SQL eseguiti da un applicazione sono svolti in modalità autocommit. Ciò vuol dire che per ogni singolo comando SQL viene aperta e chiusa una transazione. Nel caso invece occorra rendere atomica una serie di operazioni SQL che hanno senso se eseguite insieme, disabilitare la modalità autocommit con l istruzione setautocommit(false); // disabilita autocommit e avvia transazione Questa istruzione automaticamente avvia una transazione non occorre insomma un ulteriore istruzione del tipo stmt.execute BEGIN WORK che sarà terminata con una delle due istruzioni commit() o rollback(). Vedremo in seguito esempi di utilizzo delle transazioni e dei metodi mostrati. Potete ovviamente utilizzare questi metodi solo se le transazioni per il database che state utilizzando sono supportate: per saperlo a priori utilizzate il metodo DatabaseMetadata.supports- Transactions(). preparestatement() preparecall() Si utilizzano questi due metodi rispettivamente per creare uno statement preparato e una stored procedure. 19

20 Se si prevede di utilizzare spesso la stessa istruzione SQL, conviene prepararla, ovvero spedirla al parser del db server in una forma tale che possa precompilarla per poi rieseguirla con i soli parametri variabili. Ad esempio, query come la seguente SELECT * FROM articoli WHERE nome = 'Nicola' AND cognome = 'Venditti' SELECT * FROM articoli WHERE nome = 'Giovanni' AND cognome = 'Puliti' possono essere preparate con la sintassi seguente SELECT * FROM articoli WHERE nome =? AND cognome =? In codice Java diventa ResultSet rs = null; PreparedStatement pstmt = conn.preparestatement("select * FROM articoli WHERE nome =? AND cognome =?"); // recupera articoli di Nicola Venditti pstmt.setstring(1,'nicola'); pstmt.setstring(1,'venditti'); rs = pstmt.executequery(); // recupera articoli di Giovanni Puliti pstmt.setstring(1,'giovanni'); pstmt.setstring(1,'puliti'); rs = pstmt.executequery(); In modo simile si esegue la chiamata a una stored procedure nel database. Statement Lo Statement è lo strumento che le applicazioni utilizzano per spedire comandi SQL al database. È un concetto generale valido non solo per Java. execute() executequery() executeupdate() Questi e in particolare gli ultimi due sono i metodi che utilizzerete per ogni operazione possibile sul database. Il primo è un metodo generico, utilizzabile per istruzioni SQL tipo DDL e DML; il secondo è specializzato per le query o in generale per operazioni che ritornano un result set; executeupdate(), si utilizza per tutte le operazioni che non ritornino un result set ma al più un update count (come nel caso di cancellazioni, inserimenti e aggiornamenti). Il primo metodo è interessante anche perché permette di eseguire in una sola volta istruzioni multiple separate dal punto e virgola ( ; ) come 20

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

Introduzione. 8- Programmazione di una base di dati attraverso JDBC ESEMPIO 8- Programmazione di una base di dati attraverso JDBC Introduzione ai differenti approcci - JDBC: Architettura e Programmazione Introduzione Nella pratica gli utenti finali accedono al contenuto di una

Dettagli

JDBC versione base. Le classi/interfacce principali di JDBC

JDBC versione base. Le classi/interfacce principali di JDBC JDBC versione base Java Database Connectivity è il package Java per l accesso a database relazionali il package contiene interfacce e classi astratte uno dei pregi è la completa indipendenza del codice

Dettagli

JDBC di base. Le classi/interfacce principali di JDBC

JDBC di base. Le classi/interfacce principali di JDBC JDBC di base Java Database Connectivity è il package Java per l accesso a database relazionali il package contiene interfacce e classi astratte completa indipendenza del codice dal tipo di database o di

Dettagli

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

JDBC: Introduzione. Java Database Connectivity (JDBC): parte 1. Schema dei legami tra le classi principali. Principali classi/interfacce di JDBC JDBC: Introduzione Java Database Connectivity (JDBC): parte 1 Gianluca Moro DEIS - Università di Bologna gmoro@deis.unibo.it Java Database Connectivity è il package Java per l accesso a database relazionali

Dettagli

JDBC. A. Bechini 2004. Accesso a DataD con Java

JDBC. A. Bechini 2004. Accesso a DataD con Java JDBC Accesso a DataD atabase ase con Java Utilizzo di DB da applicazioni esterne Un DB contiene e gestisce dati, importanti per varie operazioni supportate da applicazioni software Come può un applicazione

Dettagli

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

Non si deve fare ALCUN riferimento alla parte specifica di JDBC. Un applicazione per la quale sia fondamentale l indipendenza dal Database può essere scritta in Java usando le specifiche. (Package java.sql) Non devono essere usate chiamate specifiche del database: Si

Dettagli

CORSO DI ALGORITMI E PROGRAMMAZIONE. JDBC Java DataBase Connectivity

CORSO DI ALGORITMI E PROGRAMMAZIONE. JDBC Java DataBase Connectivity CORSO DI ALGORITMI E PROGRAMMAZIONE JDBC Java DataBase Connectivity Anno Accademico 2002-2003 Accesso remoto al DB Istruzioni SQL Rete DataBase Utente Host client Server di DataBase Host server Accesso

Dettagli

Introduzione JDBC interfaccia java.sql driver caricare i driver

Introduzione JDBC interfaccia java.sql driver caricare i driver J D B C DISPENSE Introduzione JDBC (Java Database Connectivity) è un interfaccia completamente Java utilizzata per eseguire istruzioni SQL sui database. L'API JDBC si trova nel pacchetto java.sql; contiene

Dettagli

Scheda 15 Accedere ai DataBase con JDBC

Scheda 15 Accedere ai DataBase con JDBC Scheda 15 Accedere ai DataBase con JDBC G IOVANNI PULITI Panoramica: che cosa è JDBC La API JDBC, introdotta per la prima volta con il JDK 1.0, è una API che permette di accedere a database relazionali

Dettagli

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

SQL. Laboratorio di Progettazione di Basi di Dati (CdS in Informatica e TPS) 1 SQL Laboratorio di Progettazione di Basi di Dati (CdS in Informatica e TPS) a.a. 2014/2015 http://www.di.uniba.it/~lisi/courses/basi-dati/bd2014-15.htm Dott.ssa Francesca A. Lisi dott.ssa Francesca A.

Dettagli

Esercitazione su JDBC

Esercitazione su JDBC Esercitazione su JDBC Basi di Dati L Ingegneria dei Processi Gestionali (Ilaria Bartolini - Roberto Cabras) come usare SQL (1) Le istruzioni SQL possono essere eseguite interattivamente Ese JDBC 2 come

Dettagli

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

JDBC Driver Manager. JDBC Architettura generale. JDBC - Tipi di dato. JDBC - Flusso applicativo. JDBC - Tipi di dato. ODBC Driver. Livello di gestione Interfacce DBMS in breve Corso di BD1 Ripasso comandi applicazione JDBC Manipolazione estensioni OR in JDBC Interfacce per DBMS Problema: Far accedere un applicazione ad una base di dati Soluzione: Librerie

Dettagli

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

Sviluppo Applicazioni Mobile Lezione 12 JDBC. Dr. Paolo Casoto, Ph.D - 2012 + Sviluppo Applicazioni Mobile Lezione 12 JDBC + Cosa vediamo nella lezione di oggi Oggi analizzeremo insieme una specifica tecnologia Java per l accesso e la manipolazione di basi di dati relazionali

Dettagli

Laboratorio di reti II: Gestione di database lato server

Laboratorio di reti II: Gestione di database lato server Laboratorio di reti II: Gestione di database lato server Stefano Brocchi brocchi@dsi.unifi.it 23 marzo, 2009 Stefano Brocchi Laboratorio di reti II: Database 23 marzo, 2009 1 / 32 Uso di database lato

Dettagli

Laboratorio di Sistemi Fondamenti di JDBC (parte1) Java. Fondamenti di JDBC

Laboratorio di Sistemi Fondamenti di JDBC (parte1) Java. Fondamenti di JDBC Fondamenti di JDBC Concetto di driver Il dialogo fra applicazione e DBMS non è mai gestito direttamente ma passa in genere per un opportuno modulo software chiamato driver che agisce da interfaccia fra

Dettagli

Accesso a Database con JDBC

Accesso a Database con JDBC 1 Sommario Accesso a Database con JDBC Introduzione architettura generale di riferimento flusso tipico delle applicazioni ODBC/JDBC ODBC architettura il flusso generale di un applicazione ODBC JDBC architettura

Dettagli

Java: la libreria delle classi

Java: la libreria delle classi Java: la libreria delle classi Applet anatomia di un applet cenni di html La libreria JDBC per l accesso ai database il package java.sql 213 Applet Un applet è una applicazione Java che ha una forma particolare

Dettagli

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

Caricamento della classe driver. Apertura della connessione. DriverManager.getConnection() Creazione di uno statement JDBC Programmazione in Ambienti Distribuiti V 1.4 Marco Torchiano 2006 Uso di JDBC Caricamento della classe driver Class.forName() Apertura della connessione DriverManager.getConnection() Creazione di

Dettagli

JDBC Un API JAVA per accedere a Basi di Dati Relazionali. Contenuti. Cos è JDBC? Introduzione a JDBC. Perché JDBC. Inside JDBC.

JDBC Un API JAVA per accedere a Basi di Dati Relazionali. Contenuti. Cos è JDBC? Introduzione a JDBC. Perché JDBC. Inside JDBC. JDBC Un API JAVA per accedere a Basi di Dati Relazionali 1 Contenuti Introduzione a JDBC Perché JDBC R, Architetture client-server, ODBC Inside JDBC Driver, classi, interfacce Un esempio 2 Cos è JDBC?

Dettagli

APPENDICE. Procedure in SQL (1)

APPENDICE. Procedure in SQL (1) APPENDICE Procedure in SQL Transazioni in SQL Embedded SQL Remote Procedure Call Appendice 1 Procedure in SQL (1) Standard SQL2 permette di definire procedure, associate a singoli comandi SQL, memorizzate

Dettagli

DBMS ed Applicazioni Motivazioni

DBMS ed Applicazioni Motivazioni DBMS ed Applicazioni Motivazioni Sin ora abbiamo visto SQL come linguaggio per interrogare DBMS da interfaccia interattiva Nella pratica, un efficace sfruttamento delle potenzialità dei DBMS deriva dalla

Dettagli

JAVA JDBC. Andrea BEI (andrea.bei@libero.it)

JAVA JDBC. Andrea BEI (andrea.bei@libero.it) JAVA JDBC Andrea BEI (andrea.bei@libero.it) JDBC: API JDBC (Java DataBase Connectivity) è una API per l accesso a DataBase relazionali sviluppata da SUN. Permette ad applicazioni JAVA di eseguire istruzioni

Dettagli

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

SQL e applicazioni. Capitolo 8. SQL e linguaggi di programmazione. Applicazioni ed SQL: architettura. Una difficoltà importante. SQL e applicazioni Capitolo 8 Applicazioni tradizionali In applicazioni complesse, l utente non vuole eseguire comandi SQL, ma programmi, con poche scelte SQL non basta, sono necessarie altre funzionalità,

Dettagli

Programmazione delle basi di dati attraverso JDBC

Programmazione delle basi di dati attraverso JDBC Programmazione delle basi di dati attraverso JDBC Dispense di Basi di dati Queste breve note non hanno la pretesa di essere un nuovo libro di testo sulle tecnologie informatiche. Vogliono invece costituire

Dettagli

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

Come trattare il risultato di un comando SQL (relazioni) che USO DI SQL DA PROGRAMMI: PROBLEMI 1 Come collegarsi alla BD Come trattare gli operatori SQL Come trattare il risultato di un comando SQL (relazioni) che Come scambiare informazioni sull esito delle operazioni.

Dettagli

PROVA FINALE Ingegneria del software

PROVA FINALE Ingegneria del software PROVA FINALE Ingegneria del software Ing. Jody Marca jody.marca@polimi.it Laboratorio N 4 Cos è JDBC 2 JDBC significa Java Database Connectivity Standard definito da Sun MicroSystems per connettere programmi

Dettagli

Sviluppo di applicazioni per basi di dati

Sviluppo di applicazioni per basi di dati Sviluppo di applicazioni per basi di dati 1 Sviluppo di applicazioni per basi di dati Quattro parti: Gestione dati Business rules (vincoli di integrità e dati derivati) Logica applicativa Interfaccia utente

Dettagli

Indice. Java. JDBC è l interfaccia di base standard di Java ai database relaionali

Indice. Java. JDBC è l interfaccia di base standard di Java ai database relaionali Java java database connectivity -- jdbc G. Prencipe prencipe@di.unipi.it Indice JDBC: Java Data Base Connectivity connessioni a basi di dati esecuzione di statement SQL accesso ai result set JDBC: Java

Dettagli

JDBC: Java e database.

JDBC: Java e database. JDBC: Java e database. Introduzione all architettura e esempi di utilizzo 1.0 INTRODUZIONE ALL ARCHITETTURA JDBC è (anche se non ufficialmente riconosciuto da Sun) l acronimo per Java DataBase Connectivity.

Dettagli

Corso di Informatica Modulo T3 B2 - Database in rete

Corso di Informatica Modulo T3 B2 - Database in rete Corso di Informatica Modulo T3 B2 - Database in rete 1 Prerequisiti Programmazione web Applicazione web Modello OSI Architettura client/server Conoscenze generali sui database Tecnologia ADO in Visual

Dettagli

Basi di Dati Esercitazione JDBC. Giugno 2007

Basi di Dati Esercitazione JDBC. Giugno 2007 Basi di Dati Esercitazione JDBC Giugno 2007 Esercizi Considerando il seguente schema: Fornitori (CodiceFornitore, Nome, Indirizzo, Citta) Prodotti (CodiceProdotto, Tipo, Marca, Modello) Catalogo (CodiceFornitore,

Dettagli

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

JDBC per l accesso Java a DB. Tito Flagella tito@link.it JDBC per l accesso Java a DB Tito Flagella tito@link.it JDBC fornisce una libreria standard per l accesso a database relazionali Non è un acronimo ufficiale ma è comunemente interpretato come Java DataBase

Dettagli

Quando si sa chiaramente come si deve comportare l applicazione si può analizzare una possibile soluzione applicativa.

Quando si sa chiaramente come si deve comportare l applicazione si può analizzare una possibile soluzione applicativa. Introduzione alla tecnologia JMX 1 Viene analizzata l architettura sottostante le Java Managment Extensions (JMX) mostrandone un utilizzo applicativo e analizzando altri possibili scenari d uso di Ivan

Dettagli

JDBC. Dispense per il corso di Ingegneria del Web

JDBC. Dispense per il corso di Ingegneria del Web JDBC Dispense per il corso di Ingegneria del Web Revisione 05/11 Giuseppe Della Penna (giuseppe.dellapenna@di.univaq.it) Dipartimento di Informatica Università degli studi dell'aquila Java Database Connectivity:

Dettagli

Basi di Dati: Corso di laboratorio

Basi di Dati: Corso di laboratorio Basi di Dati: Corso di laboratorio Lezione 10 Raffaella Gentilini 1 / 46 Sommario 1 Introduzione: DB e Programmazione 2 3 2 / 46 Approcci alla Programmazione di un DB Meccanismi Disponibili 1 Linguaggi

Dettagli

Programmazione Java Avanzata

Programmazione Java Avanzata Programmazione Java Avanzata Accesso ai Dati Ing. Giuseppe D'Aquì Testi Consigliati Eclipse In Action Core J2EE Patterns - DAO [http://java.sun.com/blueprints/corej2eepatterns/patterns/dataaccessobject.html]

Dettagli

UNIVERSITA DI FIRENZE Facoltà di Ingegneria. Persistenza Applicazioni Enterprise Uso dei modelli

UNIVERSITA DI FIRENZE Facoltà di Ingegneria. Persistenza Applicazioni Enterprise Uso dei modelli UNIVERSITA DI FIRENZE Facoltà di Ingegneria Persistenza Applicazioni Enterprise Uso dei modelli 1 IL problema della persistenza APPLICAZIONE (programmi) (oggetti) DATI PERSISTENTI (file, record) (basi

Dettagli

UNIVERSITA DI FIRENZE Facoltà di Ingegneria. Persistenza Applicazioni Enterprise Uso dei modelli

UNIVERSITA DI FIRENZE Facoltà di Ingegneria. Persistenza Applicazioni Enterprise Uso dei modelli UNIVERSITA DI FIRENZE Facoltà di Ingegneria Persistenza Applicazioni Enterprise Uso dei modelli 1 IL problema della persistenza APPLICAZIONE (programmi) (oggetti) DATI PERSISTENTI (file, record) (basi

Dettagli

SQL nei linguaggi di programmazione

SQL nei linguaggi di programmazione SQL nei linguaggi di programmazione Atzeni, Ceri, Paraboschi, Torlone Basi Di Dati Modelli e Linguaggi di Interrogazione, McGraw-Hill Italia, Capitolo 6 SQL in Linguaggi di Programmazione L uso diretto

Dettagli

Accesso Web a Data Base

Accesso Web a Data Base Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria Reggio Emilia CORSO DI TECNOLOGIE E APPLICAZIONI WEB Accesso Web a Data Base Ing. Marco Mamei Anno Accademico 2004-2005 M. Mamei -

Dettagli

Lezione 9. Applicazioni tradizionali

Lezione 9. Applicazioni tradizionali Lezione 9 Applicazioni tradizionali Pag.1 Sommario Concetti trattati in questa lezione: SQL nel codice applicativo Cursori API native ODBC Pag.2 SQL nel codice applicativo I comandi SQL possono essere

Dettagli

Le transazioni. Dott. Doria Mauro doriamauro@gmail.com

Le transazioni. Dott. Doria Mauro doriamauro@gmail.com Hibernate Le transazioni Dott. Doria Mauro doriamauro@gmail.com Introduzione La demarcazione delle transazioni può essere fatta: In maniera programmatica: demarcazione all interno del codice applicativo.

Dettagli

Sistema di Gestione di Basi di Dati DataBase Management System DBMS

Sistema di Gestione di Basi di Dati DataBase Management System DBMS Base di dati (accezione generica) collezione di dati, utilizzati per rappresentare le informazioni di interesse per una o più applicazioni di una organizzazione (accezione specifica) collezione di dati

Dettagli

APPENDICE B Le Active Server Page

APPENDICE B Le Active Server Page APPENDICE B Le Active Server Page B.1 Introduzione ad ASP La programmazione web è nata con la Common Gateway Interface. L interfaccia CGI tuttavia presenta dei limiti: ad esempio anche per semplici elaborazioni

Dettagli

Che cos è un DBMS? Capitolo 1. Perché usare un DBMS? DBMS. Descrizioni dei dati nei DBMS. Modelli di dati

Che cos è un DBMS? Capitolo 1. Perché usare un DBMS? DBMS. Descrizioni dei dati nei DBMS. Modelli di dati Che cos è un DBMS? Capitolo 1 Introduzione ai sistemi di basi di dati Una collezione integrata molto grande di dati Modella organizzazioni del mondo reale Entità (ad esempio studenti, corsi) Relazioni

Dettagli

INFORMATICA. Applicazioni WEB a tre livelli con approfondimento della loro manutenzione e memorizzazione dati e del DATABASE.

INFORMATICA. Applicazioni WEB a tre livelli con approfondimento della loro manutenzione e memorizzazione dati e del DATABASE. INFORMATICA Applicazioni WEB a tre livelli con approfondimento della loro manutenzione e memorizzazione dati e del DATABASE. APPLICAZIONI WEB L architettura di riferimento è quella ampiamente diffusa ed

Dettagli

Uso dei data bases con PHP. Prof. Francesco Accaino Iis Altiero Spinelli Sesto Sa Giovanni

Uso dei data bases con PHP. Prof. Francesco Accaino Iis Altiero Spinelli Sesto Sa Giovanni Uso dei data bases con PHP Prof. Francesco Accaino Iis Altiero Spinelli Sesto Sa Giovanni MDAC MDAC è l acronimo di Microsoft Data Access Component e fa parte della tecnologia Microsoft denominata Universal

Dettagli

JDBC. Di Michele de Nittis Versione 06/08/2008 www.mdenittis.it

JDBC. Di Michele de Nittis Versione 06/08/2008 www.mdenittis.it JDBC Di Michele de Nittis Versione 06/08/2008 www.mdenittis.it JDBC...1 Introduzione...2 Caricamento dell appropriato Driver JDBC...2 Classi...3 Connection...4 Statement...5 PreparedStatement...6 ResultSet...7

Dettagli

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

Al giorno d oggi, i sistemi per la gestione di database Introduzione Al giorno d oggi, i sistemi per la gestione di database implementano un linguaggio standard chiamato SQL (Structured Query Language). Fra le altre cose, il linguaggio SQL consente di prelevare,

Dettagli

DATABASE IN RETE E PROGRAMMAZIONE LATO SERVER

DATABASE IN RETE E PROGRAMMAZIONE LATO SERVER DATABASE IN RETE E PROGRAMMAZIONE LATO SERVER L architettura CLIENT SERVER è l architettura standard dei sistemi di rete, dove i computer detti SERVER forniscono servizi, e computer detti CLIENT, richiedono

Dettagli

SQL e linguaggi di programmazione Applicazioni ed SQL: architettura

SQL e linguaggi di programmazione Applicazioni ed SQL: architettura SQL e applicazioni Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1996-2002 Capitolo 5: SQL nei linguaggi di programmazione 21/10/2002 In applicazioni complesse, l utente non vuole eseguire

Dettagli

Tecnologie di Sviluppo per il Web

Tecnologie di Sviluppo per il Web Tecnologie di Sviluppo per il Web Programmazione su Basi di Dati: ADO.NET versione 1.1 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina) G. Mecca mecca@unibas.it

Dettagli

Il linguaggio SQL: transazioni

Il linguaggio SQL: transazioni Il linguaggio SQL: transazioni Sistemi Informativi T Versione elettronica: 4.8.SQL.transazioni.pdf Cos è una transazione? Una transazione è un unità logica di elaborazione che corrisponde a una serie di

Dettagli

Gestione delle eccezioni in Java

Gestione delle eccezioni in Java Gestione delle eccezioni in Java - Introduzione al concetto di eccezioni E possibile definire un eccezione come un situazione imprevista che il flusso di un applicazione può incontrare. È possibile gestire

Dettagli

PROGRAMMA CORSO Analista Programmatore JAVA - ORACLE

PROGRAMMA CORSO Analista Programmatore JAVA - ORACLE PROGRAMMA CORSO Analista Programmatore JAVA - ORACLE 1. JAVA 1.1 Introduzione a Java Introduzione Cosa è Java 1.2 Sintassi e programmazione strutturata variabili e metodi tipi di dati, array operatori

Dettagli

19.1 - Lavorare con JDBC L'impiego di JDBC è semplice, e solitamente si articola attraverso quattro passi:

19.1 - Lavorare con JDBC L'impiego di JDBC è semplice, e solitamente si articola attraverso quattro passi: Lezione 19 Accesso ai database con JDBC JDBC (non è una sigla, secondo quanto sostenuto da Sun, anche se molti la interpretano come Java DataBase Connectivity) è un'interfaccia di programmazione che lavora

Dettagli

Dominio applicativo. Progettazione. v SQL incluso in codice applicativo v Embedded SQL v Cursori v Dynamic SQL v JDBC v Stored procedures

Dominio applicativo. Progettazione. v SQL incluso in codice applicativo v Embedded SQL v Cursori v Dynamic SQL v JDBC v Stored procedures Dominio applicativo (Capitolo 6) v SQL incluso in codice applicativo v Embedded SQL v Cursori v Dynamic SQL v JDBC v Stored procedures Basi di dati 1 Docente Claudia Amari 1 Progettazione PROGETTAZIONE

Dettagli

DBMS ED APPLICAZIONI (CAPITOLO 6) SQL incluso in codice applicativo Embedded SQL Cursori Dynamic SQL JDBC Stored procedures

DBMS ED APPLICAZIONI (CAPITOLO 6) SQL incluso in codice applicativo Embedded SQL Cursori Dynamic SQL JDBC Stored procedures 1 DBMS ED APPLICAZIONI (CAPITOLO 6) SQL incluso in codice applicativo Embedded SQL Cursori Dynamic SQL JDBC Stored procedures Progettazione 2 Dominio Applicativo PROGETTAZIONE CONCETTUALE PROGETTAZIONE

Dettagli

Programmazione Java Avanzata Spring - JDBC

Programmazione Java Avanzata Spring - JDBC Programmazione Java Avanzata Spring - JDBC Ing. Gianluca Caminiti Riferimenti Spring http://www.springsource.org/ (scaricate il reference) Beginning Spring 2 - From Novice to Professional. APress. 2008

Dettagli

BENEDETTI ALESSANDRO Matricola :252805 PROGETTO DI TECNOLOGIA DELLE BASI DI DATI PARTE 2

BENEDETTI ALESSANDRO Matricola :252805 PROGETTO DI TECNOLOGIA DELLE BASI DI DATI PARTE 2 BENEDETTI ALESSANDRO Matricola :252805 PROGETTO DI TECNOLOGIA DELLE BASI DI DATI PARTE 2 Testo: Sviluppare semplici programmi che permettano di verificare i diversi livelli di isolamento previsti da SQL

Dettagli

Il DBMS Oracle. Express Edition. Donatella Gubiani e Angelo Montanari

Il DBMS Oracle. Express Edition. Donatella Gubiani e Angelo Montanari Gubiani & Montanari Il DBMS Oracle 1 Il DBMS Oracle Express Edition Donatella Gubiani e Angelo Montanari Il DBMS Oracle Il DBMS Oracle Oracle 10g Express Edition Il DBMS Oracle (nelle sue versioni più

Dettagli

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

Capitoli 8 e 9. SQL embedded. Applicazioni tradizionali Applicazioni Internet. Sistemi di basi di dati Raghu Ramakrishnan, Johannes Gehrke Capitoli 8 e 9 Applicazioni tradizionali Applicazioni Internet SQL embedded SQL nel codice applicativo I comandi SQL possono essere chiamati dall interno di un programma in un linguaggio ospite (ad esempio

Dettagli

APPUNTI SU ADO (ACTIVEX DATA OBJECTS)

APPUNTI SU ADO (ACTIVEX DATA OBJECTS) APPUNTI SU ADO (ACTIVEX DATA OBJECTS) Introduzione ADO (Activex Data Object) è il sistema di accesso a database che noi utilizzeremo in ambiente Microsoft, sia da Visual Basic sia da pagine ASP. Activex

Dettagli

Programmazione Java: JDBC

Programmazione Java: JDBC Programmazione Java: JDBC romina.eramo@univaq.it http://www.di.univaq.it/romina.eramo/tlp Roadmap Introduzione Risorse Driver Contesto Applicativo SQL Classi e interfacce Passi» Registrare un driver» Stabilire

Dettagli

Basi di dati. Docente: Andrea Bulgarelli. Università di Modena e Reggio Emilia. andrea.bulgarelli@gmail.com Argomento: presentazione corso (1.

Basi di dati. Docente: Andrea Bulgarelli. Università di Modena e Reggio Emilia. andrea.bulgarelli@gmail.com Argomento: presentazione corso (1. Università di Modena e Reggio Emilia Basi di dati Docente: andrea.bulgarelli@gmail.com Argomento: presentazione corso (1.0) - Basi di Dati 1 Materiale didattico Web site: www.andrea.bulgarelli.name/corso

Dettagli

DB2 Universal Database (UDB) DB2 Universal Database (UDB)

DB2 Universal Database (UDB) DB2 Universal Database (UDB) DB2 Universal Database (UDB) Sistemi Informativi L-A Home Page del corso: http://www-db.deis.unibo.it/courses/sil-a/ Versione elettronica: DB2Presentazione2009.pdf Sistemi Informativi L-A DB2 Universal

Dettagli

Basi di Dati. Introduzione ai sistemi di basi di dati. K.Donno - Introduzione ai sistemi di basi di dati

Basi di Dati. Introduzione ai sistemi di basi di dati. K.Donno - Introduzione ai sistemi di basi di dati Basi di Dati Introduzione ai sistemi di basi di dati Introduzione ai sistemi di basi di dati Gestione dei Dati Una prospettiva storica File system verso DBSM Vantaggi di un DBMS Modelli dei dati Utenti

Dettagli

FileMaker 12. Guida ODBC e JDBC

FileMaker 12. Guida ODBC e JDBC FileMaker 12 Guida ODBC e JDBC 2004 2012 FileMaker, Inc. Tutti i diritti riservati. FileMaker, Inc. 5201 Patrick Henry Drive Santa Clara, California 95054 FileMaker e Bento sono marchi di FileMaker, Inc.

Dettagli

Introduzione ai sistemi di basi di dati

Introduzione ai sistemi di basi di dati Basi di Dati Introduzione ai sistemi di basi di dati Alessandro.bardine@gmail.com alessandro.bardine@iet.unipi.it Introduzione ai sistemi di basi di dati Gestione dei Dati Una prospettiva storica File

Dettagli

Connessione ad una fonte di dati ODBC

Connessione ad una fonte di dati ODBC Linguaggio Java JDBC L architettura JDBC: driver, connessione, statement e result set Invio di comandi SQL Transazioni: COMMIT, ROLLBACK e livelli di isolamento Utizzo avanzato dei result set: cenni Connessione

Dettagli

Transazioni - Parte 1

Transazioni - Parte 1 Basi di dati II Lezione 3 09/10/2008 Caputo Domenico Cosimo, Francesco Pichierri Transazioni - Parte 1 Le transazioni hanno a che fare con la programmabilità delle basi di dati. Prima di trattarle è necessaria

Dettagli

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

Basi di dati e Web (Moduli: Laboratorio e Siti Web centrati sui Dati) Prova scritta del 14 luglio 2008 Basi di dati e Web (Moduli: Laboratorio e Siti Web centrati sui Dati) Prova scritta del 14 luglio 2008 Avvertenze: e severamente vietato consultare libri e appunti; chiunque verrà trovato in possesso di

Dettagli

Informatica B. Contenuti. Introduzione alle Basi di Dati e ai DBMS. Introduzione a dati e basi dati DBMS Modello dei dati

Informatica B. Contenuti. Introduzione alle Basi di Dati e ai DBMS. Introduzione a dati e basi dati DBMS Modello dei dati Informatica B Introduzione alle Basi di Dati e ai DBMS Contenuti Introduzione a dati e basi dati DBMS Modello dei dati Informazioni e dati Dato: elemento semanticamente significativo (data, codice, ecc.),

Dettagli

DBMS (Data Base Management System)

DBMS (Data Base Management System) Cos'è un Database I database o banche dati o base dati sono collezioni di dati, tra loro correlati, utilizzati per rappresentare una porzione del mondo reale. Sono strutturati in modo tale da consentire

Dettagli

Tecnologia e Applicazioni Internet 2011/12

Tecnologia e Applicazioni Internet 2011/12 Tecnologia e Applicazioni Internet 2011/12 Lezione 4 - Persistenza Matteo Vaccari http://matteo.vaccari.name/ matteo.vaccari@uninsubria.it Perché usare un DB relazionale? Per l accesso concorrente ai dati

Dettagli

Database e reti. Piero Gallo Pasquale Sirsi

Database e reti. Piero Gallo Pasquale Sirsi Database e reti Piero Gallo Pasquale Sirsi Approcci per l interfacciamento Il nostro obiettivo è, ora, quello di individuare i possibili approcci per integrare una base di dati gestita da un in un ambiente

Dettagli

L ARCHIVIAZIONE E LA GESTIONE DATI ATTRAVERSO L INTERAZIONE TRA MICROSOFT ACCESS ED EXCEL 1 INTRODUZIONE

L ARCHIVIAZIONE E LA GESTIONE DATI ATTRAVERSO L INTERAZIONE TRA MICROSOFT ACCESS ED EXCEL 1 INTRODUZIONE Roccatello Ing. Eduard L ARCHIVIAZIONE E LA GESTIONE DATI ATTRAVERSO L INTERAZIONE TRA MICROSOFT ACCESS ED EXCEL 1 INTRODUZIONE Agenda Presentazione docente Definizione calendario Questionario pre corso

Dettagli

Funzioni scalari in SQL. Capitolo 5. coalesce. nullif. Altre funzioni scalari. case

Funzioni scalari in SQL. Capitolo 5. coalesce. nullif. Altre funzioni scalari. case Funzioni scalari in SQL Capitolo 5 Costrutti definiti in SQL-2 che estendono la sintassi delle espressioni nella target list coalesce nullif case Prof. Stefano Paraboschi Vengono valutate per ogni riga

Dettagli

Introduzione Ai Data Bases. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San giovanni

Introduzione Ai Data Bases. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San giovanni Introduzione Ai Data Bases Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San giovanni I Limiti Degli Archivi E Il Loro Superamento Le tecniche di gestione delle basi di dati nascono

Dettagli

Sistemi Informativi e WWW

Sistemi Informativi e WWW Premesse Sistemi Informativi e WWW WWW: introduce un nuovo paradigma di diffusione (per i fornitori) e acquisizione (per gli utilizzatori) delle informazioni, con facilità d uso, flessibilità ed economicità

Dettagli

APPLICAZIONI DELLE BASI DI DATI

APPLICAZIONI DELLE BASI DI DATI APPLICAZIONI DELLE BASI DI DATI APPLICAZIONI TRADIZIONALI APPLICAZIONI INTERNET SQL EMBEDDED SQL nel codice applicativo! I comandi SQL possono essere chiamati dall interno di un programma in un linguaggio

Dettagli

JDBC: SQL NEI LINGUAGGI DI PROGRAMMAZIONE

JDBC: SQL NEI LINGUAGGI DI PROGRAMMAZIONE JDBC: SQL NEI LINGUAGGI DI PROGRAMMAZIONE Disheng Qiu disheng.qiu@gmail.com SQL e Applicazioni In applicazioni complesse, l utente non vuole eseguire comandi SQL, ma programmi, con poche scelte SQL non

Dettagli

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

Siti web centrati sui dati Architettura MVC-2: i JavaBeans Siti web centrati sui dati Architettura MVC-2: i JavaBeans 1 ALBERTO BELUSSI ANNO ACCADEMICO 2009/2010 Limiti dell approccio SEVLET UNICA La servlet svolge tre tipi di funzioni distinte: Interazione con

Dettagli

Programmazione a Oggetti Modulo B

Programmazione a Oggetti Modulo B Programmazione a Oggetti Modulo B Lezione 5 Dott. Alessandro Roncato 08/11/2011 Riassunto Pattern Singleton Pattern Plolimorfismo Classi e Interfacce 2 Ereditarietà multipla In Java una classe può estendere

Dettagli

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

Lezione V. Aula Multimediale - sabato 29/03/2008 Lezione V Aula Multimediale - sabato 29/03/2008 LAB utilizzo di MS Access Definire gli archivi utilizzando le regole di derivazione e descrivere le caratteristiche di ciascun archivio ASSOCIAZIONE (1:1)

Dettagli

Interfaccia JDBC. Sistemi Informativi L-A. Home Page del corso: http://www-db.deis.unibo.it/courses/sil-a/ Versione elettronica: JDBC.

Interfaccia JDBC. Sistemi Informativi L-A. Home Page del corso: http://www-db.deis.unibo.it/courses/sil-a/ Versione elettronica: JDBC. Interfaccia JDBC Sistemi Informativi L-A Home Page del corso: http://www-db.deis.unibo.it/courses/sil-a/ Versione elettronica: JDBC.pdf Sistemi Informativi L-A come usare SQL (1) Le istruzioni SQL possono

Dettagli

Introduzione al linguaggio SQL

Introduzione al linguaggio SQL Introduzione al linguaggio SQL Structured Query Language (Linguaggio Strutturato di Interrogazione di Database) prof. Cleto Azzani IPSIA MORETTO BRESCIA (2004) Che cos è un Data Base (Base di dati) Insieme

Dettagli

Università degli Studi di Bologna Facoltà di Ingegneria. Tecnologie Web L-A A.A. 2014 2015. Esercitazione 08 DAO e Hibernate

Università degli Studi di Bologna Facoltà di Ingegneria. Tecnologie Web L-A A.A. 2014 2015. Esercitazione 08 DAO e Hibernate Università degli Studi di Bologna Facoltà di Ingegneria Tecnologie Web L-A A.A. 2014 2015 Esercitazione 08 DAO e Hibernate Agenda Pattern DAO e framework Hibernate progetto d'esempio relativo alla gestione

Dettagli

UNIVERSITÀ DEGLI STUDI DI FIRENZE FACOLTA DI INGEGNERIA DIPARTIMENTO DI SISTEMI E INFORMATICA. Elaborato di Tecnologie del Software per Internet

UNIVERSITÀ DEGLI STUDI DI FIRENZE FACOLTA DI INGEGNERIA DIPARTIMENTO DI SISTEMI E INFORMATICA. Elaborato di Tecnologie del Software per Internet UNIVERSITÀ DEGLI STUDI DI FIRENZE FACOLTA DI INGEGNERIA DIPARTIMENTO DI SISTEMI E INFORMATICA Elaborato di Tecnologie del Software per Internet JMSWEB 2 SISTEMA PER LO SCAMBIO DI MESSAGGI TRA APPLICAZIONI

Dettagli

INTRODUZIONE. Data Base Management Systems evoluzione tecniche gestione dati

INTRODUZIONE. Data Base Management Systems evoluzione tecniche gestione dati INTRODUZIONE Accesso ai dati tramite DBMS Livelli di astrazione Modello dei dati: schema / istanza / metadati Alcuni modelli dei dati Linguaggi per DBMS Architettura di base di un DBMS cesarini - BDSI

Dettagli

The ultimate guide of: Mac OS X Snow Leopard, Informix, PHP 5.3 & PDO

The ultimate guide of: Mac OS X Snow Leopard, Informix, PHP 5.3 & PDO The ultimate guide of: Mac OS X Snow Leopard, Informix, PHP 5.3 & PDO 1. Introduzione Nel mio ultimo articolo Mac OS X Snow Leopard: Informix IDS 11.5 + PHP 5.3 (Musarra, 2009) è stato spiegato come installare

Dettagli

Linguaggio Java. Robusto. Orientato agli oggetti. Protegge e gestisce dagli errori. Non permette costrutti pericolosi

Linguaggio Java. Robusto. Orientato agli oggetti. Protegge e gestisce dagli errori. Non permette costrutti pericolosi Linguaggio Java Robusto Non permette costrutti pericolosi Eredità Multipla Gestione della Memoria Orientato agli oggetti Ogni cosa ha un tipo Ogni tipo è un oggetto (quasi) Protegge e gestisce dagli errori

Dettagli

Algoritmi di Ricerca. Esempi di programmi Java

Algoritmi di Ricerca. Esempi di programmi Java Fondamenti di Informatica Algoritmi di Ricerca Esempi di programmi Java Fondamenti di Informatica - D. Talia - UNICAL 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare

Dettagli

Approfondimento: i sistemi di gestione delle basi di dati (DBMS)

Approfondimento: i sistemi di gestione delle basi di dati (DBMS) Approfondimento: i sistemi di gestione delle basi di dati (DBMS) Prerequisito essenziale della funzionalità delle basi di dati è il controllo e la fruibilità dell informazione in esse contenuta: a tale

Dettagli

TEORIA sulle BASI DI DATI

TEORIA sulle BASI DI DATI TEORIA sulle BASI DI DATI A cura del Prof. Enea Ferri Cos è un DATA BASE E un insieme di archivi legati tra loro da relazioni. Vengono memorizzati su memorie di massa come un unico insieme, e possono essere

Dettagli

Vincoli di Integrità Approccio dichiarativo alla loro implementazione

Vincoli di Integrità Approccio dichiarativo alla loro implementazione Vincoli di Integrità Approccio dichiarativo alla loro implementazione Antonella Poggi Dipartimento di informatica e Sistemistica SAPIENZA Università di Roma Progetto di Applicazioni Software Anno accademico

Dettagli

Sistemi Informativi e Basi di Dati

Sistemi Informativi e Basi di Dati Sistemi Informativi e Basi di Dati Laurea Specialistica in Tecnologie di Analisi degli Impatti Ecotossicologici Docente: Francesco Geri Dipartimento di Scienze Ambientali G. Sarfatti Via P.A. Mattioli

Dettagli

Corso di Web Programming

Corso di Web Programming Corso di Web Programming 11. PHP - Complementi Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso di Laurea in Informatica Applicata

Dettagli

Informatica (Basi di Dati)

Informatica (Basi di Dati) Corso di Laurea in Biotecnologie Informatica (Basi di Dati) Introduzione alle Basi di Dati Anno Accademico 2009/2010 Da: Atzeni, Ceri, Paraboschi, Torlone - Basi di Dati Lucidi del Corso di Basi di Dati

Dettagli

CORSO DI PROGRAMMAZIONE JAVA

CORSO DI PROGRAMMAZIONE JAVA CORSO DI PROGRAMMAZIONE JAVA Corso di Programmazione Java Standard Edition ( MODULO A) OBIETTIVI ll corso ha come obiettivo quello di introdurre la programmazione a oggetti (OOP) e di fornire solide basi

Dettagli