Scheda 15 Accedere ai DataBase con JDBC



Documenti analoghi
Panoramica: che cosa è necessario

JDBC. A. Bechini Accesso a DataD con Java

CORSO DI ALGORITMI E PROGRAMMAZIONE. JDBC Java DataBase Connectivity

Introduzione JDBC interfaccia java.sql driver caricare i driver

Lezione 9. Applicazioni tradizionali

Esercitazione 4 JDBC

Database e reti. Piero Gallo Pasquale Sirsi

JDBC versione base. Le classi/interfacce principali di JDBC

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

Corso di Informatica Modulo T3 B2 - Database in rete

JDBC di base. Le classi/interfacce principali di JDBC

Programmazione Java Avanzata Spring - JDBC

GHPPEditor è un software realizzato per produrre in modo rapido e guidato un part program per controlli numerici Heidenhain.

COME CREARE E COLLEGARSI AD UN DATABASE MICROSOFT SQL SERVER O SUN MYSQL

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

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

Architettura MVC-2: i JavaBeans

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

Guida all Installazione del ProxyFatturaPA

Istruzioni di installazione di IBM SPSS Modeler Text Analytics (licenza per sito)

Configurazione di Outlook Express

Approfondimento: Migrazione dei database e backup della posta

Tutorial per l installazione del J2SE 6 e configurazione del sistema operativo

Capitolo 4 Pianificazione e Sviluppo di Web Part

SPSS Inc. Data Access Pack - Istruzioni di installazione per Windows

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

Esercitazione su JDBC

COSTER. Import/Export su SWC701. SwcImportExport

VMware. Gestione dello shutdown con UPS MetaSystem

Dispensa di database Access

Il sofware è inoltre completato da una funzione di calendario che consente di impostare in modo semplice ed intuitivo i vari appuntamenti.

Client - Server. Client Web: il BROWSER

2010 Ing. Punzenberger COPA-DATA Srl. Tutti i diritti riservati.

19. LA PROGRAMMAZIONE LATO SERVER

La gestione documentale con il programma Filenet ed il suo utilizzo tramite la tecnologia.net. di Emanuele Mattei (emanuele.mattei[at] .

MODULO 5 Appunti ACCESS - Basi di dati

Porting Su Hostingjava

INSTALLAZIONE PROCEDURA 770/2011

Sistema di gestione Certificato MANUALE PER L'UTENTE

FPf per Windows 3.1. Guida all uso

Domande frequenti su Phoenix FailSafe

Laboratorio di reti II: Gestione di database lato server

Java: la libreria delle classi

LA GESTIONE DELLE VISITE CLIENTI VIA WEB

Che differenza c è tra una richiesta XML ed una domanda XML? (pag. 4)

GERARCHIE RICORSIVE - SQL SERVER 2008

I Codici Documento consentono di classificare le informazioni e di organizzare in modo logico l archiviazione dei file.

Premessa Le indicazioni seguenti sono parzialmente tratte da Wikipedia ( e da un tutorial di Pierlauro Sciarelli su comefare.

Guida all uso delle Web View su ios

NOTE TECNICHE DI CONFIGURAZIONE. Giugno 2009

Gestione Risorse Umane Web

I MODULI Q.A.T. PANORAMICA. La soluzione modulare di gestione del Sistema Qualità Aziendale

MANUALE PARCELLA FACILE PLUS INDICE

2.1 Configurare il Firewall di Windows

Lezione 1 Introduzione

Nelle reti di calcolatori, le porte (traduzione impropria del termine. port inglese, che in realtà significa porto) sono lo strumento

Con.Te Gestione Console Telematici

Software di sistema e software applicativo. I programmi che fanno funzionare il computer e quelli che gli permettono di svolgere attività specifiche

EM3 SoftCom Software di comunicazione fra EM3 e PC Versione 2.019

Istruzioni di installazione di IBM SPSS Modeler Text Analytics (utente singolo)

Progetto di Ingegneria del Software 2. SWIMv2

MODELLO CLIENT/SERVER. Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena

Agent, porte, connettività e reti L agent di Kaseya utilizza la porta 5721 per comunicare con il server, ma che tipo di porta è?...

ATOLLO BACKUP GUIDA INSTALLAZIONE E CONFIGURAZIONE

Fate doppio click sul file con nome postgresql-8.0.msi e impostate le varie voci come riportato nelle immagini seguenti:

GovPay 2.0. Manuale Installazione

Informatica DR KLOE Calcolo

Architetture Applicative

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

Architettura di un sistema operativo

SERVIZIO TELEMATICO ENTRATEL. Applicazione Invia Multifile

Studi di Settore. Nota Operativa 22/4/2013

Lifephone. Introduzione. Database. Sito

PROVA FINALE Ingegneria del software

uadro Soluzioni software per L archiviazione elettronica dei documenti Gestione Aziendale Fa quadrato attorno alla tua azienda

DBMS e Linguaggi di programmazione nell'era di Internet

Installazione MS SQL Express e utilizzo con progetti PHMI

Database. Si ringrazia Marco Bertini per le slides

Istruzioni per l installazione del software per gli esami ICoNExam (Aggiornate al 15/01/2014)

Outlook Plugin per VTECRM

SITI-Reports. Progetto SITI. Manuale Utente. SITI-Reports. ABACO S.r.l.

InfiXor. il programma facile e versatile per preventivi veloci e completi. il software di preventivazione per produttori e rivenditori di infissi

Manuale per la configurazione di AziendaSoft in rete

BMSO1001. Virtual Configurator. Istruzioni d uso 02/10-01 PC

Web Application Libro Firme Autorizzate

SOMMARIO... 3 INTRODUZIONE...

Software per Helpdesk

Visual basic base Lezione 01. L'ambiente di sviluppo

Installazione di GFI WebMonitor

SCARICO DATI ONETOUCH Verio per EuroTouch Home GUIDA ALL USO

e/fiscali - Rel e/fiscali Installazione

Introduzione alla consultazione dei log tramite IceWarp Log Analyzer

Domande e risposte su Avira ProActiv Community

01/05/2013 Istruzioni per l installazione

Easy Access 2.0 Remote Control System

2009. STR S.p.A. u.s. Tutti i diritti riservati

Il web server Apache Lezione n. 3. Introduzione

Direzione Centrale per le Politiche dell Immigrazione e dell Asilo

Installazione e caratteristiche generali 1

Transcript:

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 tramite un driver JDBC compliant, in genere fornito dalla casa produttrice del database stesso. In modo simile alla API JNDI, JDBC funziona come strato di comunicazione verso il database relazionale per inviare istruzioni di tipo SQL. Il punto fondamentale di tutta l architettura JDBC è rappresentata dal driver che esegue materialmente la connessione e inoltra le istruzioni restituendo al contempo i risultati. Il driver in genere viene prodotto direttamente dalla casa produttrice del database engine e attualmente questo consente di utilizzare JDBC per la gestione di archivi basati su tutti i più importanti server di dati. Un driver JDBC può essere di quattro tipi indicati da un numero (driver di tipo 1, 2, 3, 4). Driver di tipo 1 Il driver di tipo 1 è detto bridge driver: in questo caso il driver JDBC si limita a effettuare la connessione verso un altro sistema di connessione che quindi si preoccupa di inoltrare tutte le richieste e restituire i risultati. Il driver bridge più conosciuto è quello che permette di connettersi con una sorgente dati ODBC: è questa che gestisce la comunicazione vera e propria verso

il DB engine. Questo genere di driver non è attualmente molto utilizzato ed è stato rilasciato da Sun, quando ancora non esistevano driver di tipo differente, al fine di permettere la connessione di programmi Java con database su piattaforma Windows. Attualmente è utilizzato prevalentemente in ambito didattico. Driver di tipo 2 Il driver di tipo 2 è misto nativo-java: questo driver offre una interfaccia Java JDBC compliant ma si appoggia a una sua controparte nativa che utilizza le librerie del DB engine per poter gestire la comunicazione. Storicamente i driver di tipo 2 e 3 furono introdotti subito dopo i bridge e rappresentano il primo tentativo di rendere JDBC indipendente dalla piattaforma (ODBC non è disponibile per tutti i sistemi operativi), anche se la parte nativa impone di realizzare un driver tipo 2 per ogni sistema su cui si voglia utilizzare JDBC. Offrono prestazioni migliori rispetto al tipo 1, anche se la presenza dello strato nativo introduce sicuramente delle limitazioni. Driver di tipo 3 I driver di tipo 3 sono i cosiddetti net driver: in questo caso il driver è diviso in due parti come il tipo 2, ma i due strati adesso comunicano tramite un protocollo proprietario (ma a volte anche in TCP o HTTP). L organizzazione client server del driver offre una maggiore flessibilità rispetto al caso precedente, permettendo di installare le due porzioni su macchine differenti. Spesso vengono fornite versioni basate sul protocollo di comunicazione HTTP, in grado per questo di passare attraverso firewall e sistemi di connessione fra reti eterogenee. In genere non è molto utilizzato, a causa delle limitate performance. Driver di tipo 4 Il driver di tipo 4 è il full Java driver: questi driver sono scritti completamente in Java e rappresentano lo stato dell arte in questo settore. Scritti in modo molto efficiente sono in grado di offrire prestazioni di tutto rispetto, anche grazie alla presenza di sistemi integrati di pool e di un uso intelligente delle connessioni. L utilizzo del linguaggio Java li rende del tutto portabili e quindi si integrano perfettamente con lo spirito di indipendenza dalla piattaforma tipico di Java. Attualmente tutti i più importanti DB engine dispongono di un driver di questo tipo che deve essere quindi scaricato dal sito del produttore e aggiunto al classpath locale. Negli esempi che si analizzeranno verrà utilizzato un database di tipo MySQL, con driver nativo prodotto direttamente dal team di sviluppo del server. Driver e database possono essere scaricati direttamente dal sito www.mysql.com (vedi [MySQL] e [MySQLDRV]). Come funziona Una applicazione che voglia connettersi con un database tramite JDBC deve effettuare una serie di operazioni piuttosto semplici. La prima cosa da fare è aggiungere al classpath il driver necessario alla connessione: questa operazione è alquanto semplice. Nel caso in cui il driver sia di tipo 4, è sufficiente aggiungere al classpath il file.jar corrispondente. Ad esempio per MySQL su Windows si deve scrivere: 88 MokaCode

Set CLASSPATH = %CLASSPATH%;mysql-connector-java-3.1.0-stable-bin.jar Su Unix (bash shell), la riga da utilizzare è la seguente: set CLASSPATH = $CLASSPATH;mysql-connector-java-3. 1.0-stable-bin.jar In questo caso il file mysql-connector-java-3.1.0-stable-bin.jar rappresenta la versione 3.1.0 del driver MySQL. Per chi legge questo documento potrebbe essere disponibile una versione più recente: nel caso si usino versioni o driver differenti sarà sufficiente modificare il nome del file.jar sostituendolo con quello effettivamente utilizzato. Dopo averlo reso disponibile alla JVM tramite l aggiunta al classpath è necessario caricare in memoria il driver: questa operazione può essere eseguita in vari modi. In Java il modo esplicito per caricare in memoria una classe fa uso del metodo forname(): Class.forname(<nome-classe-driver>); Nel caso di MySQL si dovrà scrivere: Class.forName("org.gjt.mm.mysql.Driver"); Nel caso in cui il driver non venga trovato verrà generata una ClassNotFoundException. Se si desidera utilizzare il driver bridge JDBC-ODBC, fornito di default con il JDK, si dovrà invece scrivere Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); avendo l accortezza di aggiungere il file jdbcodbc.dll al path di sistema. Eventualmente è possibile effettuare anche il caricamento implicito del driver aggiungendo il nome della classe alle proprietà di esecuzione dell applicazione. Ad esempio, per il driver JDBC ODBC i potrebbe scrivere Properties prop = System.getProperties(); prop.put("jdbc.drivers","sun.jdbc.odbc.jdbcodbcdriver"); System.setProperties(prop); A questo punto il driver è disponibile per l utilizzo da parte del programma. Nel caso in cui vengano caricati in memoria più driver, la scelta su quale utilizzare verrà fatta a runtime al momento della connessione (vedi sotto). Ora si è pronti per aprire una connessione verso l URL su cui è in funzione il database engine: la connessione con il database verrà effettuata dalla classe DriverManger utilizzando come parametro di connessione un URL formalmente corretto. Ad esempio Scheda 15 Accedere ai DataBase con JDBC 89

Connection con = DriverManager.getConnection("jdbc:<db-type>://<indirizzo-host>/<nome-db>"); dove jdbc:<db-type> indica il tipo di database (e forza quindi l utilizzo di un driver che permetta la comunicazione), mentre <indirizzo-host> e <nome-db> sono rispettivamente l indirizzo del server e il nome del database. La classe DriverManager tenterà di utilizzare fra tutti i driver caricati in memoria quello che per primo soddisfa la stringa di connessione. Per una connessione verso MySQL si dovrà scrivere Connection con = DriverManager.getConnection("jdbc:mysql://localhost/mokacode"); dove mokacode è il nome del database utilizzato. Importante notare che l URL di connessione rappresenta il sistema tramite il quale la JVM decide quale driver utilizzare. In questo caso, anche se si fosse caricato un driver per Oracle o per JDBC-ODBC, esso non verrà utilizzato perché non compatibile con la stringa jdbc:mysql. Nel caso in cui vi siano più driver compatibili con il sottotipo (Oracle, ad esempio, fornisce un driver sia di tipo 3 che di tipo 4), verrà utilizzato il primo compatibile: la JVM prova tutti i driver disponibili caricandoli in ordine alfabetico. Una volta ottenuta la connessione si potranno eseguire le varie operazioni SQL tramite l oggetto Statement ricavato dall oggetto Connection. Ad esempio: Statement st = con.createstatement(); Statement a questo punto permette di eseguire delle operazioni SQL tramite i metodi execute() o executequery(). boolean st.execute(<sql-statement>); ResultSetst.executeQuery(<sql-statement>); Il primo esegue la istruzione <sql-statement> restituendo un valore booleano a indicare che sia stato prodotto un risultato (come nel caso di una select) o meno, mentre la seconda restituisce direttamente un oggetto ResultSet che potrà essere navigato per conoscere il valore dei risultati. Ad esempio, se si vuole conoscere il contenuto della tabella scheda del database mokacode, si potrà scrivere ResultSet rs = st.executequery("select * from scheda"); while (rs.next()) { System.out.println("nome scheda: " + rs.getstring(1)); System.out.println("titolo scheda: " + rs.getstring(2)); System.out.println("Autore scheda: " + rs.getstring(3)); System.out.println("Num. caratteri scheda: " + rs.getstring(4)); System.out.println(" "); } 90 MokaCode

Infine al termine delle operazioni si può procedere con la chiusura della connessione tramite il metodo close() della Connection. Da notare che, in questo caso, apertura e chiusura della connessione sono a carico dell applicazione: questo può provocare molti problemi di performance o, peggio ancora, dei blocchi del sistema. Una applicazione che sia scritta bene dovrebbe infatti appoggiarsi a un connection pool e non gestire direttamente le connessioni verso il database. In JDBC 2.0 è stato introdotto appositamente l oggetto DataSource proprio per questo motivo. Le best practice introdotte con la piattaforma J2EE vietano un accesso diretto al DB: l applicazione dovrebbe sempre passare tramite un container per accedere a un oggetto DataSource. Un esempio: la classe TestJDBC L esempio di questa scheda è rappresentato da un unica classe che permette di eseguire le operazioni tipiche di JDBC: dal caricamento del driver, alla connessione, alla esecuzione di statement SQL. La classe TestJDBC contiene per questo motivo alcuni metodi che svolgono singolarmente le varie operazioni. Il loro significato è certamente molto semplice e intuitivo, e ricalca quanto detto nelle pagine precedenti. Il database utilizzato, di tipo MySQL, è molto semplice: esso contiene una sola tabella, denominata scheda. Ecco l istruzione SQL per creare tale tabella # Database: mokacode # Tabella: 'scheda' # CREATE TABLE 'scheda' ( 'id' varchar(10) NOT NULL default '', 'nome' varchar(100) NOT NULL default '', 'titolo' varchar(100) NOT NULL default '', 'autore' varchar(100) NOT NULL default '', Scheda 15 Accedere ai DataBase con JDBC 91 continua