




Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Dispense di Informatica. Basi di Dati, SQL, Java
Tipologia: Appunti
1 / 8
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!





In generale, per creare delle applicazioni che permettano ad un utente di interagire con la base dei dati, si sceglie di programmare le applicazioni stesse, con i linguaggi di programmazione tradizionali quali C,Java, creando in qualche modo un canale di comunicazione tra il linguaggio di programmazione scelto e l’SQL. Per mescolare l’SQL con un certo linguaggio di programmazione, si seguono due tecniche:
SQL Embedded: Le istruzioni SQL sono immerse nel programma, e un precompilatore legato al DBMS viene usato per analizzare e tradurre il programma, in un programma scritto nel linguaggio ospite, cioè quello che si è scelto per programmare. Se da un lato c’è il vantaggio che errori di sintassi vengono segnalati a tempo di compilazione, il codice finale risulta difficile da manutenere. SQL/CLI: Sono messe a disposizione del programmatore, delle librerie che permettono l’interazione con il DBMS (connessione,interrogazioni,etc..). Non richiede l’uso di un preprocessore, è possibile connettersi a diversi database anche su DBMS diversi, è possibile connettersi anche a database remoti.
Si segue il principio generale di separazione dell’applicazione in 3 livelli logici, quali:
Il già più volte citato sistema di comunicazione,è un insieme di API (Application Programming Intarface), cioè un insieme di funzioni richiamabili nel linguaggio di programmazione usato, che seguono lo standard CLI, e che permettono l’interazione coi i databases. L’evoluzione e la nascita di differenti DBMS, ha portato a creare dei driver specifici per ogni DBMS, modificando di conseguenza il ruolo del sistema di comunicazione, che di fatto diventa quello strato software che si interpone tra l’applicazione e i driver specifici del DBMS usato. Il vantaggio è dato dalla possibilità di interfacciarsi a qualsiasi database , ovviamente con il proprio driver specifico.
Le API più famose sono ODBC (by Microsoft) e JDBC (by Sun).
Architettura di ODBC : Open Database Connectivity, è un’API che permette l’interazione tra i dati e l’applicazione, permettendo ai programmatori di formulare query SQL senza conoscere l’interfaccia proprietaria del dbms, traducendo proprio le query in un formato interpretabile dal dbms. Usa interfacce scritte in linguaggio C. E’ uno standard per l’accesso a database relazionali che offre un insieme di funzioni/procedure astratte invocabili da diversi linguaggi di programmazione.
Application : richiama le funzioni SQL per eseguire interrogazioni e per acquisirne i risultati. Garantisce una certa indipendenza rispetto alla scelta del protocollo di comunicazione, del server DBMS e del sistema operativo.
Driver Manager : è responsabile di caricare e gestire i driver del DBMS su richiesta dell’applicazione.
Driver : sono responsabili di eseguire funzioni ODBC. Sono in grado di eseguire interrogazioni in SQL traducendole in modo da adattarsi alla sintassi dello specifico DBMS.
Data Source : origine delle informazioni, è un nome che definisce un riferimento ad un database file o a un database gestito con DBMS, richiede che almeno venga specificato, quale driver ODBC di quale db/DBMS deve essere usato, dove si trova il database (e.g. in locale, o in rete per i DBMS). Nota: E’ per questo motivo che bisogna caricare il driver ODBC attraverso Risorse del Computer di Windows.
Interfaccia Driver : rappresenta il punto di partenza per ottenere una connessione a un DBMS. Ogni produttore di driver JDBC implementa l’interfaccia Driver (mediante opportuna classe) affinché possa funzionare con un tipo particolare di DBMS.
Classe DriverManage r : è la classe che contiene tutti i driver di database registrati e permette di associarli ai database stessi. Tramite la suddetta classe è possibile registrare un nuovo driver, deregistrare uno esistente, etc. Nel momento in cui un oggetto Driver viene istanziato viene automaticamente registrato nella classe DriverManager come disponibile. Essa contiene il metodo getConnection(database) , che restituisce un oggetto di tipo Connection e apre il canale di comunicazione con il database.
Interfaccia Connection : un oggetto di tipo Connection rappresenta una connessione attiva a un database. L’interfaccia mette a disposizione dei metodi che permettono di “creare” degli oggetti (Statement e PreparedStatement )che serviranno poi, per inviare query SQL al DBMS. I metodi da citare sono:
Interfaccia ResultSet : un oggetto ResultSet è il risultato di una query di selezione (di fatto una tabella composta da righe e colonne). Esso è simile ad un iteratore, e i metodi da evidenziare sono:
Al termine delle operazioni, l’oggetto di tipo ResultSet deve essere chiuso con il metodo close() , in quanto prende comunque delle risorse che devono essere rilasciate appena possibile.
Interfaccia Statement : un oggetto di tipo Statement viene utilizzato per inviare query SQL che non fanno uso di parametri. L'istruzione viene inviata al database di volta in volta.
Metodi importanti di Statement:
Al termine delle operazioni, l’oggetto di tipo Statement deve essere chiuso con il metodo close() , in quanto prende comunque delle risorse che devono essere rilasciate appena possibile.
Interfaccia PreparedStatement : a differenza di Statement, l'istruzione viene compilata una sola volta, in modo che le chiamate successive siano più efficienti; inoltre, un oggetto di tipo PreparedStatement viene utilizzato per inviare query con parametri. I parametri presi in input, possono andare a comporre una query, che ricordiamo è formulata attraverso una stringa. Proprio per quest’ultimo motivo, può essere complicato gestire la stringa che potrebbe contenere dei parametri di input, con l’occorrenza di delimitatori e caratteri vari speciali. Per ovviare a questo inconveniente, si utilizza un oggetto di tipo PreparedStatement invece di Statement, che come abbiamo visto viene istanziato con il metodo prepareStatement(String sql) dell’interfaccia Connection; la stringa sql presa in input, se presenta parametri variabili, sono identificati con il punto interrogativo?. Il risultato sarà quindi una normale stringa senza la complicazione dei caratteri speciali. L’interfaccia PreparedStatement è estesa dall’interfaccia Statement, ereditandone tutte le funzionalità. In più sono presenti metodi per la gestione dei parametri.
String database = "jdbc:odbc:traccia01"; String driver = "sun.jdbc.odbc.JdbcOdbcDriver"; Connection connnessione; public ConnessioneDB(){ try { Class. forName (driver); //caricamento/registrazione del driver connessione = DriverManager. getConnection (database); //apertura della connessione } catch (ClassNotFoundException ex) { ex.printStackTrace(); } catch (SQLException ex) { ex.printStackTrace(); } }
public void esecuzioneQueryPrepared(String input) { try { String sql = "SELECT colonna FROM tabella WHERE campo=?;"; //sql con parametri PreparedStatement p = connessione.prepareStatement(sql);//creazione del commando con prepared statement p.setString(1, input); //settaggio dei parametri ResultSet rs = p.executeQuery(); //esecuzione della query rs.next(); //avanzamento alla prima riga della tabella ottenutta { //eventuali istruzioni per utilizzo del result set } rs.close(); p.close(); connessione.close(); } catch (SQLException e) { e.printStackTrace(); } }
public void esecuzioneQueryStatement() { try { String sql = "SELECT colonna FROM tabella;"; //query da eseguire Statement st = connessione.createStatement();//creazione dello statement ResultSet rs = p.executeQuery(sql); //esecuzione della query rs.next(); //avanzamento alla prima riga della tabella ottenutta { //eventuali istruzioni per utilizzo del result set } rs.close(); st.close(); connessione.close(); } catch (SQLException e) { e.printStackTrace(); } }