Università degli Studi di Bologna Facoltà di Ingegneria. Tecnologie Web T A.A
|
|
- Silvestro Gallo
- 5 anni fa
- Visualizzazioni
Transcript
1 Università degli Studi di Bologna Facoltà di Ingegneria Tecnologie Web T A.A Accesso Diretto alle Basi di Dati: JDBC con approccio forza bruta JDBC test pratico su SQL injection Agenda esemplificazione uso API JDBC mediante un esercizio guidato proposta esercizio da svolgere in autonomia gestione persistenza di un ordine rappresentato dal carrello prima senza utilizzo di componenti Web poi integrando anche la componente Web esercizio guidato tratto dall appello d esame del 17 gennaio 2018: gestione persistenza basata su metodologia «forza bruta» 2
2 Metodologia forza bruta Ci ricordiamo i passi implementativi della metodologia «forza bruta» vero? Per ogni classe MyC che rappresenta una entità del dominio, si definiscono: un metodo doretrievebykey(x key) che restituisce un oggetto istanza di MyC i cui dati sono letti dal database (tipicamente da una tabella che è stata derivata dalla stessa classe del modello di dominio che ha dato origine a MyC) recupera i dati per chiave un metodo saveorupdate( ) che salva i dati dell'oggetto corrente nel database il metodo esegue una istruzione SQL update o insert a seconda che l'oggetto corrente esista già o meno nel database uno o più metodi doretrievebycond( ) che restituiscono una collezione di oggetti istanza della classe MyC che soddisfano una qualche condizione (basata sui parametri del metodo) un metodo dodelete( ) che cancella dal database i dati dell'oggetto corrente Esercizio guidato Obiettivo: esemplificare l API JDBC scriviamo codice che ha unicamente lo scopo di evidenziare l'uso della API JDBC non ci preoccupiamo della qualità del codice Java Operazioni inserimento di una tupla nel DB cancellazione di una tupla ricerca di un tupla per chiave primaria ricerca di un insieme di tuple (per qualche proprietà) 4
3 Consideriamo la classe Student: package model; import java.util.date; Lato Java public class Student { private int code; private String firstname; private String lastname; private Date birthdate; public Student(){ public String getfirstname() { return firstname; public void setfirstname(string firstname) { this.firstname = firstname; // seguono tutti gli altri metodi getter e setter 5 Lato database e il DB tw_stud: CREATE TABLE students ( code INT NOT NULL PRIMARY KEY, firstname CHAR(40), lastname CHAR (40), birthdate DATE ) 6
4 Ambiente DBMS a scelta tra DB2 (consigliato), HSQLDB e MySQL Driver JDBC per il DBMS scelto per DB2: driver com.ibm.db2.jcc.db2driver, contenuto nel file db2jcc.jar (direttorio C:\Programmi\IBM\SQLLIB\java della macchina client del LAB4) per HSQLDB: driver org.hsqldb.jdbcdriver, contenuto nel file hsqldb.jar (scaricabile da o dal sito del corso) per MySQL: driver com.mysql.jdbc.driver, contenuto nel file mysqlconnector-java-5.1.x-bin.jar (scaricabile da o dal sito del corso) Ambiente Java standard:.jar/.zip del driver deve essere nel CLASSPATH, ad esempio: Eclipse Project Properties Java Build Path Libraries Add JARs 7 HSQLDB e MySQL L'ambiente DB2 è già configurato in LAB4; per i DBMS aggiuntivi, occorre operare un breve setup HSQLDB il file hsqldb.jar presente nella directory lib del progetto contiene già tutto il necessario per avviare il server, si consiglia di utilizzare l'apposito target ANT 97.database.start, oppure java -cp../lib/hsqldb.jar org.hsqldb.server -database.0 file:tw_stud.txt -dbname.0 tw_stud per arrestare il server, avviare il target ANT 98.database.frontend, inserire in URL la stringa jdbc:hsqldb:hsql://localhost/tw_stud, eseguire SHUTDOWN se si vuole si possono scaricare server e connector tramite download hsqldb hsqldb_2_2 hsqldb zip (il connector si trova nella directory lib) MySQL in LAB4 copiare la directory di MySQL da \\pdc4\public\tecnologieweb a C:\temp il connector si trova nella directory lib del progetto Eclipse per avviare il server bin/mysqld.exe, root user di default senza password per creare il database, bin/mysql.exe -u root CREATE DATABASE tw_stud; per arrestare il server bin/mysqladmin.exe -u root shutdown visualizzare database esistenti, bin/mysql.exe -u root SHOW DATABASES; da casa scaricare il server tramite MySQL Community Server mysql-5.5.x-win32.zip e il scaricare il connector tramite Connector/J ZIP Archive e all'interno del file zip si trova il file jar mysql-connector-java-5.1.x-bin.jar 8
5 Le classi fondamentali di JDBC Package java.sql (va importato) Classe DriverManager Interfaccia Driver Interfaccia Connection Interfaccia PreparedStatement Interfaccia ResultSet Eccezione SQLException 9 Primo passo Importare il progetto Eclipse ANT-based presente nel file 07_TecWeb.zip come visto nelle precedenti esercitazioni, senza esploderne l'archivio su file system (lo farà Eclipse) File Import General Existing Projects into Workspace Next Select archive file Confiniamo nella classe DataSource le operazioni necessarie per ottenere la connessione il suo compito è fornire connessioni alle altre classi che ne hanno bisogno metodo Connection getconnection() che restituisce una nuova connessione ad ogni richiesta È una soluzione artigianale usata solo a fini didattici; verrà raffinata successivamente! 10
6 La classe DataSource import java.sql.*; public class DataSource { private String dburi = "jdbc:db2://diva.disi.unibo.it:50000/tw_stud"; private String username = "*******"; private String password = "*******"; public Connection getconnection() throws PersistenceException { Connection connection; try { Class.forName("com.ibm.db2.jcc.DB2Driver"); connection = DriverManager.getConnection(dbURI,userName, password); catch (ClassNotFoundException e) { throw new PersistenceException(e.getMessage()); catch(sqlexception e) { throw new PersistenceException(e.getMessage()); return connection;! Nel progetto Eclipse classe DataSource gestisce DB2, HSQLDB e MySQL 11 Definiamo istruzioni SQL Vediamo ora il codice JDBC che esegue istruzioni SQL per: salvare (rendere persistenti) oggetti nel DB cancellare oggetti dal DB trovare oggetti dal DB Si faccia riferimento alla classe StudentRepository (concentriamoci in particolare sul codice dei singoli metodi, piuttosto che del progetto di tale classe) 12
7 Istruzione SQL: uso di PreparedStatement Per eseguire una istruzione SQL è necessario creare un oggetto della classe che implementa PreparedStatement creato dall'oggetto Connection invocando il metodo: PreparedStatement preparestatement(string s); la stringa s è una istruzione SQL parametrica: i parametri sono indicati con il simbolo? Esempio 1 String insert = "insert into students (code, firstname, lastname, birthdate) values (?,?,?,?)"; statement = connection.preparestatement(insert); Esempio 2 String delete = "delete from students where code=?"; statement = connection.preparestatement(delete); 13 Istruzione SQL: uso di PreparedStatement I parametri sono assegnati mediante opportuni metodi della classe che implementa PreparedStatement metodi setxxx (<numpar>, <valore>) un metodo per ogni tipo, il primo argomento corrisponde all'indice del parametro nella query, il secondo al valore da assegnare al parametro Esempio 1 (cont.) PreparedStatement statement; String insert = "insert into students (code, firstname, lastname, birthdate) values (?,?,?,?)"; statement = connection.preparestatement(insert); statement.setint(1, student.getcode()); statement.setstring(2, student.getfirstname()); statement.setstring(3, student.getlastname()); long secs = student.getbirthdate().gettime()); statement.setdate(4, new java.sql.date(secs)); 14
8 Osservazioni JDBC usa java.sql.date, mentre la classe Student usa java.util.date Le istruzioni long secs = student.getbirthdate().gettime()); statement.setdate(4, new java.sql.date(secs)); servono a "convertire" una data da una rappresentazione all'altra (per tutti i dettagli si consulti la documentazione) 15 Esecuzione istruzioni SQL Una volta assegnati i valori ai parametri, l'istruzione può essere eseguita Distinguiamo due tipi di operazioni: aggiornamenti (insert, update, delete): modificano lo stato del database vengono eseguiti invocando il metodo executeupdate() sull'oggetto PrepareStatement interrogazioni (select): non modificano lo stato del database e restituiscono una sequenza di tuple vengono eseguite invocando il metodo executequery() che restituisce il risultato in un oggetto ResultSet 16
9 Aggiornamenti (insert, delete, update) Esempio 1 (cont.) PreparedStatement statement; String insert = "insert into students(code, firstname, lastname, birthdate) values (?,?,?,?)"; statement = connection.preparestatement(insert); statement.setstring(1, student.getcode()); statement.setstring(2, student.getfirstname()); statement.setstring(3, student.getlastname()); long secs = student.getbirthdate().gettime()); statement.setdate(4, new java.sql.date(secs)); statement.executeupdate(); 17 Esempio 2 (cont.) Interrogazioni (select) PreparedStatement statement; String query = "select * from students where code=?"; statement = connection.preparestatement(query); statement.setint(1,code); ResultSet result = statement.executequery(); 18
10 Esempio 2 (cont.) Gestire il risultato di una query String retrieve = "select * from students where code=?"; statement = connection.preparestatement(retrieve); statement.setint(1, code); ResultSet result = statement.executequery(); if (result.next()) { student = new Student(); student.setcode(result.getint("code")); student.setfirtsname(result.getstring("firstname")); student.setlastname(result.getstring("lastname")); long secs = result.getdate("birthdate").gettime(); birthdate = new java.util.date(secs); student.setbirthdate(birthdate); 19 Un altro esempio Gestire il risultato di una query List<Student> students = null; Student student = null; Connection connection = this.datasource.getconnection(); PreparedStatement statement; String query = "select * from students"; statement = connection.preparestatement(query); ResultSet result = statement.executequery(); if(result.next()) { students = new LinkedList<Student>(); student = new Student(); student.setcode(result.getint("code")); student.setfirstname(result.getstring("firstname")); 20
11 Gestire il risultato di una query student.setlastname(result.getstring("lastname")); student.setbirthdate( new java.util.date(result.getdate("birthdate").gettime())); students.add(student); while(result.next()) { student = new Student(); student.setcode(result.getint("code")); student.setfirstname(result.getstring("firstname")); student.setlastname(result.getstring("lastname")); student.setbirthdate( new java.util.date(result.getdate("birthdate").gettime())); students.add(student); 21 Gestire le eccezioni Tutti i metodi delle classi dell'api JDBC visti fino ad ora lanciano una eccezione SQLException Connection, statement, ResultSet devono essere sempre "chiusi" dopo essere stati usati l'operazione di chiusura corrisponde al rilascio di risorse Effettuiamo queste operazioni nella clausola finally abbiamo così la garanzia che vengano comunque effettuate Se vengono sollevate eccezioni, le rilanciamo con una eccezione di livello logico opportuno Il codice che segue è un po' verboso, ma didatticamente ci aiuta a ragionare ancora sulla gestione delle eccezioni 22
12 Clausola finally finally { try { if (statement!= null) statement.close(); if (connection!= null) connection.close(); catch (SQLException e) { throw new PersistenceException(e.getMessage()); 23 Ora a voi (1) Prendete spunto dall'esercizio guidato appena mostrato e dall Esercitazione 04 su JSP (nel dettaglio, esercizio «Negozio online» - slides 11-14) 1) Creare un classe ShopRepository che a) renda persistente un ordine, costituito non solo dall'elenco degli item selezionati nel carrello (Java Bean Cart), ma anche dall' dell'acquirente b) offra la possibilità di ottenere l'ordine relativo ad una c) offra la possibilità di recuperare tutti gli ordini suddivisi per quali problematiche insorgono su questo ultimo punto ragionando sullo schema DB corrispondente? Come possiamo superarle? Nota 1: testare senza componenti Web e utilizzando DB2 e almeno uno tra HSQLDB e MySQL 2) Una volta testato il punto precedente, integrare le classi realizzate all'interno del progetto JSP (rif. file zip Esercitazione 04), creando a) checkout.jsp: offre la possibilità di a) rendere persistente un ordine, b) data un' recuperare l'ordine relativo, c) recuperare tutti gli ordini, suddivisi per ) CheckoutServlet: riceve le richieste di checkout.jsp e accede al database tramite ShopRepository Nota 2: focalizzarsi unicamente sulla gestione dell'ordine di un utente (non modificare la gestione del carrello) 24
13 Ora a voi (2) L'obiettivo dell'esercitazione è quello di rendere persistente l'ordine rappresentato dal carrello per semplicità la soluzione proposta non decrementa il numero di oggetti presenti nel catalogo La JSP checkout.jsp accede al carrello degli articoli scelti dall'utente dovrà avere accesso al Java Bean Cart (con scope di sessione) al contrario non avrà bisogno di accedere al Java Bean Catalogue Si ricorda che il Java Bean Cart è realizzato mediante un oggetto di tipo Map<Item, Integer>, che associa ad un Item la quantità di tale Item inserita dall'utente nel suo carrello 25 APPENDICE (esercizio guidato tratto dall appello d esame del 17 gennaio 2018: gestione persistenza basata su metodologia «forza bruta»)
14 Agenda Esercizio tratto dall appello d esame del 17 gennaio 2018: presentazione esercizio Passi principali: Dall UML ai JavaBean Mapping delle relazioni e dei vincoli Implementazione delle query Tricky elements 27 Esame 17/01/2018: Esercizio 3 28
15 Dall Uml ai JavaBean La prima cosa da fare negli esercizi relativi alla gestione della persistenza è trasformare il diagramma UML nelle corrispondenti classi Java Ogni classe del diagramma corrisponde ad una classe java Ad ogni proprietà della classe UML corrisponde una proprietà della classe Java Quindi, basta contare le classi e le proprietà UML per sapere quante classi e proprietà Java modellare? No, come vedremo non proprio è così 29 Mapping delle relazioni La seconda cosa che può influire sul numero delle classi e sul numero di attributi in Java sono le relazioni tra le classi UML: Relazione 1-n/n-1: non comportano classi java aggiuntive, ma solo l aggiunta di attributi; la cardinalità n è mappata con una collezione di oggetti lato java, mentre la cardinalità 1 con un semplice id intero Relazione n-m: comporta la creazione di una tabella aggiuntiva nel DB, detta tabella di mapping La tabella di mapping potrebbe avere una sua corrispondente classe java (si parla in questo casi di «materializzazione» degli ID), oppure no (si gestisce esplicitamente la relazione n-m rappresentata nel diagramma UML). La scelta dipende anche da eventuali vincoli esplicitati nel testo dell esercizio! Il numero di attributi nelle classi java dipende anche dalla eventuale richiesta nel testo d esame di utilizzo di «ID surrogati» Sono attributi solitamente di tipo intero che fungono da identificatori univoci degli oggetti JavaBean e da primary key (PK) nelle tabelle corrispondenti! Anche se la traccia d esame non lo richiede, per completezza presentiamo una soluzione basata su id surrogati (ipotesi extra traccia) 30
16 Il caso concreto del nostro esercizio Come sarà il mapping di questo diagramma? Due classi Java, una per classe UML Tutti gli attributi esplicitati nel diagramma Un id surrogato (int) per classe Una Collezione di oggetti PrenotazioneRistorante nella classe Tavolo Un campo contente la chiave materializzata (l ID tavolo) della tabella Tavolo nella casse PrenotazioneRistorante 31 Mapping dei vincoli (1) Il mapping dei vincoli viene fatto nelle classi java che si occupano dell interfacciamento con il DB, dette «Repository» C è una classe Repository per ogni JavaBean Queste classi implementano tutti i metodi CRUD In più ci sono ulteriori due classi strettamente relative al DB fisico Una per la gestione della connessione al DB denominata DataSource() Una per la gestione personalizzata delle eccezioni denominata PersistenceException() Vincoli esplicitati nell UML: La coppia Cognome-Data in PrenotazioneRistorante è univoca (UNIQUE) Il Numero tavolo in Tavolo è univoco (UNIQUE) Vincoli impliciti o espressi nel testo, tipo:! Per date diverse si intende «giorni diversi» 32
17 Mapping dei vincoli (2) Vediamo come si implementano i vincoli individuati L implementazione dei vincoli viene demandata al metodo della classe Repository che si occupa della creazione della tabella, ovvero alla query Create Table Es. Classe «PrenotazioneRistoranteRepository()»:! La definizione completa dell id surrogato ID la vediamo tra qualche minuto 33 Implementazione query Le query richieste dall esercizio vengono implementate dai seguenti metodi: boolean RichiestaPrenotazione(String cognome, Date data, int numeropersone, String cellulare) String DisponibilitaTavolo(Date data, int numeropersone) Il primo metodo, tramite l utilizzo del secondo, verifica la disponibilità di un tavolo (ovvero, capienza >= numero di persone); se è disponibile un tavolo, il secondo metodo restituisce il suo codice numerico, altrimenti null; Se un tavolo è disponibile, il primo metodo usa il numero di tavolo restituito per inserire persistentemente nel DB la prenotazione 34
18 Query: DisponibilitàTavolo (1) Il metodo deve restituire il numero di un tavolo, qualora ci fosse, con capienza >= al numero di persone richiesto ad una certa data Questo risultato può essere ottenuto in due modi differenti: 1. Effettuando due query distinte, una che seleziona tutti i tavoli e l altra tutte le prenotazioni per la data richiesta, per poi fare un controllo incrociato delle due collezioni con Java Metodo complicato, laborioso e molto poco efficiente 2. Oppure con un unica query innestata Metodo pulito, efficiente ed elegante La query viene implementata dal metodo dedicato nella classe «TavoloRepository()» 35 Query: DisponibilitàTavolo (2) 36
19 Query: DisponibilitàTavolo (3) Di seguito la query innestata read_available_table : L inner query seleziona tutti gli ID dei tavoli prenotati nella data richiesta L outer query seleziona tutti I tavoli con capienza >= al numero di persone con ID diverso da tutti quelli restituiti dall inner query 37 Query: RichiestaPrenotazione (1) Questa query prende il codice del tavolo restituito dal primo metodo e va a fare un operazione di insert sulla tabella delle prenotazioni del ristorante Il metodo restituisce TRUE se l operazione è andata a buon fine, FALSE altrimenti 38
20 Query: RichiestaPrenotazione (2) 39 Tricky Elements In questo esercizio d esame c era un elemento più o meno esplicito il metodo che rende persistente una prenotazione, non accetta tra i parametri l ID surrogato della prenotazione presente nel rispettivo oggetto PrenotazioneRistorante Ovviamente non è possibile aggiungere il parametro ID alla signature del metodo perché in questo modo non verrebbe rispettata la specifica del testo occorre trovare un altro modo 40
21 Tricky Elements: ID auto-incrementale Come possiamo inserire una nuova tupla senza preoccuparci di esplicitarne il valore? Attraverso l uso di ID auto-incrementali Come si implementa un ID auto-incrementale? È un ID generato automaticamente dal DB all inserimento di una nuova tupla, incrementando di 1 il valore dell ultima tupla inserita REERENCES TAVOLO, +! Una volta inserita la tupla nella tabella, occorre allineare il valore dell ID generato con quello del corrispondente oggetto JavaBean 41
Università degli Studi di Bologna Facoltà di Ingegneria. Tecnologie Web T A.A
Università degli Studi di Bologna Facoltà di Ingegneria Tecnologie Web T A.A. 2016 2017 Esercitazione 07 Accesso Diretto alle Basi di Dati: JDBC con approccio forza bruta JDBC Agenda test pratico su SQL
Università degli Studi di Bologna Facoltà di Ingegneria. Tecnologie Web T A.A
Università degli Studi di Bologna Facoltà di Ingegneria Tecnologie Web T A.A. 2017 2018 Esercitazione 07 Accesso Diretto alle Basi di Dati: JDBC con approccio forza bruta JDBC test pratico su SQL injection
Tecnologie di Sviluppo per il Web
Tecnologie di Sviluppo per il Web Programmazione su Basi di Dati: JDBC Concetti Fondamentali versione 1.0 G. Mecca mecca@unibas.it Università della Basilicata JDBC >> Sommario Concetti Fondamentali Introduzione
Università degli Studi di Bologna Facoltà di Ingegneria. Tecnologie Web L-A A.A Esercitazione 08 DAO e Hibernate
Università degli Studi di Bologna Facoltà di Ingegneria Tecnologie Web L-A A.A. 2017 2018 Esercitazione 08 DAO e Hibernate Agenda Pattern DAO e libreria Hibernate progetto d'esempio relativo alla «gestione
ESERCITAZIONE: AZIENDA
ESERCITAZIONE: AZIENDA Homework 24 ottobre 2002 Emanuel Weitschek emanuel@dia.uniroma3.it Prerequisiti (software) PostgreSQL pgadmin Driver JDBC Ambito Si consideri una base di dati che contiene informazioni
JDBC. Marco Tessarotto Programmazione dei Web Server Anno Accademico
JDBC Marco Tessarotto Programmazione dei Web Server Anno Accademico 2004-2005 JDBC JDBC (Java Database Connectivity) è una API Java per accedere ed elaborare dati in una sorgente dati (di solito un db
Introduzione a JDBC. si inviano comandi SQL; si recuperano i risultati dei comandi.
Introduzione a JDBC JDBC (Java Database Connectivity) è la parte delle API di J2SE che fornisce le primitive per la connessione a basi di dati relazionali: si inviano comandi SQL; si recuperano i risultati
Verso l architettura MVC-2 i JavaBeans
Verso l architettura MVC-2 i JavaBeans 1 A L B E R T O B E L U S S I A N N O A C C A D E M I C O 2 0 1 2 / 2 0 1 3 Limiti dell approccio PROGRAMMA UNICO Il programma unico (servlet) svolge tre tipi di
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
JDBC. Paolo Atzeni. 11 marzo Progettazione di applicazioni, una premessa
JDBC Paolo Atzeni 11 marzo 2002 Progettazione di applicazioni, una premessa Il paradigma a tre livelli (three-tier) JDBC: la API per far interagire applicazioni Java con basi di dati marzo 2002 P. Atzeni,
Ogni ufficio è formato da 100 dipendenti, i quali hanno a loro volta 3 clienti ciascuno. Inoltre, ad ogni ufficio sono stati assegnati 4 fornitori.
Tecnologia delle Basi Dati Analisi del dbms Postgresql. Luigi Cestoni Prima Parte Descrizione del Database Abbiamo realizzato un database costituito da quattro tabelle: 1. dipendente( id,nome,cognome,eta,telefono,idufficio)
Basi di Dati. Esercitazione JDBC 28/05/2007
Basi di Dati Esercitazione JDBC 28/05/2007 Sorgente di dati ODBC Andare su: Avvio Pannello di Controllo Strumenti di Amministrazione Origine dati (ODBC). 2 Sorgente di dati ODBC DSN a.utente: disponibile
La connessione ai database MySQL tramite script PHP versione 5.5
La connessione ai database MySQL tramite script PHP versione 5.5 Php è un linguaggio di scripting che estende le funzionalità del server Web, mentre MySQL è un programma server che si occupa della gestione
Servlet & JDBC A L B E R T O B E L U S S I A N N O A C C A D E M I C O /
Servlet & JDBC 1 A L B E R T O B E L U S S I A N N O A C C A D E M I C O 2 0 1 2 / 2 0 1 3 Servlet: interazione con un DBMS In Java è possibile interagire con un DBMS attraverso l uso della libreria JDBC
Servlet & JDBC A L B E R T O B E L U S S I A N N O A C C A D E M I C O / Servlet: interazione con un DBMS
Servlet & JDBC 1 A L B E R T O B E L U S S I A N N O A C C A D E M I C O 2 0 1 0 / 2 0 1 1 Servlet: interazione con un DBMS In Java è possibile interagire con un DBMS attraverso l uso della libreria JDBC
Laboratorio di Basi di Dati
Laboratorio di Basi di Dati Esercitazione PostgreSQL Dopo aver lanciato il client grafico pgadmin III di PostgreSQL svolgere le operazioni descritte nel seguito, tenendo presenti i suggerimenti forniti
Introduzione a JDBC. si inviano comandi SQL; si recuperano i risultati dei comandi.
Introduzione a JDBC JDBC (Java Database Connectivity) è la parte delle API di J2SE che fornisce le primitive per la connessione a basi di dati relazionali: si inviano comandi SQL; si recuperano i risultati
Hibernate. Tool per Object Relational Mapping
Hibernate Tool per Object Relational Mapping Introduzione Standard JDBC Utilizzo di SQL Non portabilità tra DB Dialetti differenti Scrittura di codice ripetitivo per CRUD Paradigm mismatch Paradigm mismatch
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
Introduzione a JDBC. si inviano comandi SQL; si recuperano i risultati dei comandi.
Introduzione a JDBC JDBC (Java Database Connectivity) è la parte delle API di J2SE che fornisce le primitive per la connessione a basi di dati relazionali: si inviano comandi SQL; si recuperano i risultati
Domande utili alla preparazione dell orale di Informatica all Esame di Stato
Domande utili alla preparazione dell orale di Informatica all Esame di Stato 1.Al livello fisico un database si appoggia ai files per contenere i suoi dati? 2.Esistono altri modelli di organizzazione oltre
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
Tecnologie di Sviluppo per il Web
Tecnologie di Sviluppo per il Web Programmazione su Basi di Dati: JDBC versione 3.1 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina) G. Mecca mecca@unibas.it
Esempio di architettura software
Esempio di architettura software Corso di Principi di Progettazione del Software, a.a. 2012/13 29 novembre 2016 Ing. Roberto Vergallo 1 Esempio di architettura software View (GUI) Action Listener Business
Utilizzando per la connessione al database un driver di Tipo 1:
Basi di Dati Esercitazione JDBC 25 maggio 2005 Paolo Cappellari Esercizi Considerando il seguente schema: Fornitori (CodiceFornitore, Nome, Indirizzo, Citta) Prodotti (CodiceProdotto, Tipo, Marca, Modello)
Servlet & JDBC. Alberto Belussi. anno accademico 2008/2009
Servlet & JDBC Alberto Belussi anno accademico 2008/2009 Servlet: interazione con un DBMS In Java è possibile interagire con un DBMS attraverso l uso della libreria JDBC (Java Database Connectivity). http://java.sun.com/javase/technologies/database
Servlet & JDBC ALBERTO BELUSSI ANNO ACCADEMICO 2009/2010. Servlet: interazione con un DBMS. In Java è possibile interagire con un DBMS attraverso
Servlet & JDBC 1 ALBERTO BELUSSI ANNO ACCADEMICO 2009/2010 Servlet: interazione con un DBMS In Java è possibile interagire con un DBMS attraverso l uso della libreria JDBC (Java Database Connectivity).
Corso di. Basi di Dati I. 7. Esercitazioni in SQL: Definizione e manipolazione dei dati
Corso di Basi di Dati 7. Esercitazioni in SQL: Definizione e manipolazione dei dati A.A. 2016 2017 Collegarsi a MySQL, caricare e salvare basi di dati Per collegarsi a mysql, aprire un terminale e inserire
Basi di Dati. JDBC - Esercitazione n. 4 Quaderno n. 4. Passi preliminari per lo svolgimento delle esercitazioni
Basi di Dati JDBC - Esercitazione n. 4 Quaderno n. 4 La finalità di questa esercitazione è scrivere le parti mancanti di una semplice applicazione Java che utilizza JDBC per accedere ad una base di dati.
Corso di. Basi di Dati I. 7. Esercitazioni in SQL: Definizione e manipolazione dei dati
Corso di Basi di Dati 7. Esercitazioni in SQL: Definizione e manipolazione dei dati A.A. 2016 2017 Collegarsi a MySQL, caricare e salvare basi di dati Per collegarsi a mysql, aprire un terminale e inserire
DDL (Data Definition Language) schemi DML (Data Manipulation Language) DQL (Data Query Language) DCL (Data Control Language)
o o o o o DDL (Data Definition Language): consente di creare e modificare schemi di database; DML (Data Manipulation Language): consente di inserire, modificare e gestire i dati memorizzati; DQL (Data
Università di Bologna CdS Laurea Magistrale in Ingegneria Informatica I Ciclo - A.A. 2010/2011
Università di Bologna CdS Laurea Magistrale in Ingegneria Informatica I Ciclo - A.A. 2010/2011 Sistemi Distribuiti M Proposte di Esercizio- Introduzione Generale A cura di: Stefano Monti stefano.monti6@unibo.it
ESERCITAZIONE: Fornitore-Fornisce-Articolo
ESERCITAZIONE: Fornitore--Articolo PROGETTAZIONE CONCETTUALE Sia dato il diagramma ER rappresentativo di una certa realtà di interesse Cognome CodF Nome DataN CodA Descrizione Prezzo Fornitore N N E Fornito
Basi di Dati Esercitazione JDBC
Basi di Dati Esercitazione JDBC 30 Maggio 2006 Ing. Paolo Papotti Esercizi Considerando il seguente schema: Fornitori (CodiceFornitore, Nome, Indirizzo, Citta) Prodotti (CodiceProdotto, Tipo, Marca, Modello)
Accesso alle Basi di Dati
Accesso alle Basi di Dati I Sistemi Informativi hanno il compito di gestire in modo efficiente ed affidabile i dati, mantenuti in una forma strutturata e possibilmente normale. La struttura dei dati viene
JDBC JDBC. Driver di accesso. Autore: Roberto Fabbrica Diapo 1. Diapo 2. Diapo 3
1 JDBC JDBC è il nome della tecnologia di accesso a database di Java. Il grosso pregio di questa tecnologia è la pressoché completa indipendenza del codice dal tipo di database o di DBMS a cui si intende
MODULO 2. Query normali e parametriche Query di:
MODULO 2 TITOLO DBMS e SQL In questo Modulo si affronta lo studio dei DBMS Access e MySQL. In particolare per Access, si descrive come progettare, impostare e modificare gli strumenti di lavoro (tabelle,
Basi di Dati CREAZIONE E POPOLAMENTO DI UNA BASE DI DATI
Basi di Dati CREAZIONE E POPOLAMENTO DI UNA BASE DI DATI La finalità di questa esercitazione è quella di creare, date delle specifiche progettuale, appositi script di creazione e popolamento di una base
PRODOTTO CARTESIANO Caso Generale
PRODOTTO CARTESIANO Caso Generale Vincoli di integrità dei dati Un database non deve solamente memorizzare i dati, ma garantire che i dati memorizzati siano corretti; se i dati sono imprecisi o incoerenti,
Basi di Dati. Esercitazione JDBC. Ing. Paolo Cappellari
Basi di Dati Esercitazione JDBC Ing. Paolo Cappellari Sorgente di dati ODBC Andare su: Avvio Pannello di Controllo Strumenti di Amministrazione Origine dati (ODBC). 2 Sorgente di dati ODBC DSN a.utente:
JDBC: SQL nei linguaggi di programmazione
JDBC: SQL nei linguaggi di programmazione Matteo Cannaviccio mcannaviccio@gmail.com Basi di Dati I 2016/17 Panoramica 1. Dialogare con un DBMS Applicazioni software DBMS 2. Introduzione a JDBC Scopo
Sistemi Distribuiti M Proposte di Esercizio- Introduzione Generale
Alma Mater Studiorum - Università di Bologna CdS Laurea Magistrale in Ingegneria Informatica I Ciclo - A.A. 2016/2017 Sistemi Distribuiti M Proposte di Esercizio- Introduzione Generale A cura di: Stefano
I.I.S. G. COSSALI - ORZINUOVI DATABASE. Marzo 2017 Prof. Dario Tomasoni 1
I.I.S. G. COSSALI - ORZINUOVI DATABASE Marzo 2017 Prof. Dario Tomasoni 1 IMPOSTAZIONE 60 min = Database concetti + Esercizi; 10 min = pausa; 30 min = Linguaggio SQL; 30 min = Database prove LibreOffice
Corso di Basi di Dati Prime nozioni relative all utilizzo del DBMS MySQL
Corso di Basi di Dati Prime nozioni relative all utilizzo del DBMS MySQL Francesco Leotta Ultimo aggiornamento : 03/04/2013 Il DBMS che utilizzeremo: MySQL MySQL è un RDBMS open-source disponibile gratuitamente
Connessione con MySQL
Connessione con MySQL Architettura Server-Side Eventuali parametri cookie sessioni Elaborazione SELECT... DATABASE Quando i dati sono molti e la persistenza deve andare altre la sessione o la durata
Introduzione alle JSP
Introduzione alle JSP Corso di Sistemi Web e Basi Dati Prof. Antonio d Acierno Java Server Page JSP Riferimenti http://java.sun.com/products/jsp http://www.coreservlets.com http://www.html.it/jsp Le JSPs
Tecnologie di Sviluppo per il Web
Tecnologie di Sviluppo per il Web Programmazione su Basi di Dati: Aspetti Metodologici Parte a versione 3.1 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima
Il sistema informativo deve essere di tipo centralizzato e accessibile mediante un computer server installato nella rete locale dell albergo.
PROBLEMA. Un albergo di una grande città intende gestire in modo automatizzato sia le prenotazioni sia i soggiorni e realizzare un database. Ogni cliente viene individuato, tra l altro, con i dati anagrafici,
Corso di Basi di Dati A.A. 2016/2017
Corso di Laurea in Ingegneria Gestionale Sapienza Università di Roma Corso di Basi di Dati A.A. 2016/2017 MySQL: Creazione di Schemi ed Interrogazioni Francesco Leotta Ultimo aggiornamento : 16/03/2017
Visualizzazione ordini in MyShopDB
Visualizzazione ordini in MyShopDB Risolviamo gli esercizi della lezione scorsa, scrivendo una pagina ordini.jsp che visualizzi le intestazioni di ogni ordine (numero d ordine, data, nome, cognome, indirizzo,
Alessandra Lumini. Concetti Fondamentali
Tinyurl.com/jdbc14 Client 1 Driver 1 Driver Manager Driver 2 DBMS 1 Client n Driver k DBMS m API API Driver Alessandra Lumini Alessandra.lumini@unibo.it Concetti Fondamentali Riferimenti Introduzione Architettura
Corso di Basi di Dati A.A. 2015/2016
Corso di Laurea in Ingegneria Gestionale Sapienza Università di Roma Corso di Basi di Dati A.A. 2015/2016 E3 - MySQL: Creazione di Schemi ed Interrogazioni Tiziana Catarci, Andrea Marrella Ultimo aggiornamento
Laboratorio di Basi di Dati
Laboratorio di Basi di Dati Docente: Alberto Belussi Lezione 2 Vincoli di integrità Proprietà che devono essere soddisfatte da ogni istanza della base di dati. Il soddisfacimento è definito rispetto al
TUTORIAL IMPORTAZIONE DATI DA FOGLIO EXCELL WINKHOUSE
TUTORIAL IMPORTAZIONE DATI DA FOGLIO EXCELL A WINKHOUSE 1. introduzione In questo tutorial illustreremo l'importazione di dati contenuti in foglio excell nelle tabelle di winkhouse. Tutte le operazioni
Microsoft Access. Nozioni di base. Contatti: Dott.ssa Silvia Bonfanti
Microsoft Access Nozioni di base Contatti: Dott.ssa Silvia Bonfanti silvia.bonfanti@unibg.it Introduzione In questa lezione vedremo lo strumento Microsoft Access ed impareremo come realizzare con esso
DATABASE PER IL WEB. Programmazione Web 1
DATABASE PER IL WEB Programmazione Web 1 Archite3ura web con database Client Tier Web/App Tier DB Tier Client Web / App Server Database Il server web comunica con un altro server che con8ene il la banca
Corso di Sviluppo di applicazioni Web
Corso di Sviluppo di applicazioni Web Docente: Giovanni Grasso - Dao in Spring Un po di terminologia I componenti della persistenza sono detti Data Access Object (DAO) hanno il compito di effettuare tutti
Prova scritta del 13 luglio 2010
Matricola: Cognome: Nome: Insegnamento: LAB Basi di dati LAB Basi di dati e web Basi di dati e web 4 CFU Laboratorio di Basi di dati (Laboratorio di Basi di dati e Web) Prova scritta del 13 luglio 2010
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
Connessione con MySQL
Connessione con MySQL Architettura Server-Side Eventuali parametri cookie sessioni Elaborazione SELECT... DATABASE Quando i dati sono molti e la persistenza deve andare altre la sessione o la durata
Tipi numerici esatti Valori interi o con parte decimale di lunghezza prefissata
Domini Tipi numerici esatti Valori interi o con parte decimale di lunghezza prefissata numeric [(Precisione [,Scala])] decimal [(Precisione [,Scala])] integer smallint Precisione specifica il numero di
IL MODELLO RELAZIONALE
Basi di dati 1 IL MODELLO RELAZIONALE (CAPITOLO 2) Codd 1970 Indipendenza dei dati Distinzione nella descrizione dei dati tra livello fisico e livello logico Vendors IBM,Informix,Microsoft,Oracle,Sybase
Capitolo 5. Soluzione: Soluzione in C:
Capitolo 5 Esercizio 5.1 Realizzare una procedura in un linguaggio di programmazione di alto livello che tramite SQL Embedded elimina dalla tabella DIPARTIMENTO l'elemento che ha il nome che viene fornito
Laboratorio di Basi di Dati e Multimedia
Laboratorio di Basi di Dati e Multimedia Laurea in Informatica Multimediale - A.A. 2006/07 Docente: Alessandra Di Pierro Email: dipierro@sci.univr.it Lezione 2 Vincoli intrarelazionali Proprietà che devono
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.
Metodi per la Gestione dei Dati (lezioni di laboratorio)
Università degli Studi di Modena e Reggio Emilia Facoltà di Scienze della Comunicazione e dell Economia Corso di Laurea in Comunicazione e Marketing Anno Accademico 2005/06 Metodi per la Gestione dei Dati
MyShopDB = MyShop + MySQL
MyShopDB = MyShop + MySQL Adattiamo l applicazione MyShop in modo da poter utilizzare un database come fonte di dati, invece dei soliti file testuali. I nuovi sorgenti si trovano nel file MyShopDB.zip
Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, JDBC e applicazioni 31/05/2004
Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1996-2002 Approfondimenti dal capitolo 5: JDBC e applicazioni 31/05/2004 Un esempio: package catenanegozi (Piccola parte di) sistema informativo
SQL per le applicazioni D B M G
SQL per le applicazioni Call Level Interface Le richieste sono inviate al DBMS per mezzo di funzioni del linguaggio ospite soluzione basata su interfacce predefinite API, Application Programming Interface
L'ambiente DB2 in LAB (e come collegarsi da remoto)
L'ambiente DB2 in LAB (e come collegarsi da remoto) Sistemi Informativi T Versione elettronica: L00.DB2inLAB.pdf Il server IBM DB2 Il server DB2, edizione Express-C, è installato su una macchina Linux
Alma Mater Studiorum Università di Bologna. Scuola di Ingegneria. Tecnologie Web T. Esercitazione opzionale Spring MVC
Alma Mater Studiorum Università di Bologna Scuola di Ingegneria Tecnologie Web T Esercitazione opzionale Spring MVC Home Page del corso: http://www-db.disi.unibo.it/courses/tw/ Versione elettronica: L.10.opt.SpringMVC.pdf
Gestione delle informazioni. Tot. h 10. Base di Dati. Tot. h 56. Grafica in C# - Laboratorio- Tot. h 40. Dipartimento Informatica Materia Informatica
Dipartimento Informatica Materia Informatica Classe 5 Tec Ore/anno 198 A.S. 2018-2019 MODULI COMPETENZE UNITA di APPRENDIMENTO Gestione delle informazioni Tot. h 10 Base di Dati Tot. h 56 Grafica in C#
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
A.A. 2018/2019. Esercitazione 11. Strutturazione di Istruzioni in Linguaggio SQL. [ Possibili Soluzioni ] FONDAMENTI DI INFORMATICA E PROGRAMMAZIONE
A.A. 2018/2019 Esercitazione 11 Strutturazione di Istruzioni in Linguaggio SQL [ Possibili Soluzioni ] Docente Prof. Raffaele Pizzolante FONDAMENTI DI INFORMATICA E PROGRAMMAZIONE Esercizio 1 Scrivere
Esercitazione: Il DBMS MySQL. Insegnamento di Basi di Dati. Laurea in Ingegneria Informatica SAPIENZA Università di Roma
Laurea in Ingegneria Informatica SAPIENZA Università di Roma Insegnamento di Basi di Dati Esercitazione: Domenico Fabio Savo www.dis.uniroma1.it/~savo/ Il DBMS MySQL 1 Cosa vedremo 1. Presentazione del
2011 Politecnico di Torino 1
SQL per le applicazioni Call Level Interface Le richieste sono inviate al DBMS per mezzo di funzioni del linguaggio ospite soluzione basata su interfacce predefinite API, Application Programming Interface
SQL per le applicazioni D B M G
SQL per le applicazioni Call Level Interface Le richieste sono inviate al DBMS per mezzo di funzioni del linguaggio ospite soluzione basata su interfacce predefinite API, Application Programming Interface
Fondamenti di Informatica A. A / 1 9
Fondamenti di Informatica Prof. Marco Lombardi A. A. 2 0 1 8 / 1 9 Concetti Introduttivi 1/2 SQL (Structured Query Language) permette di manipolare i dati, interrogare un database relazionale e modellarne
Alma Mater Studiorum Università di Bologna. Scuola di Ingegneria e Architettura. Tecnologie Web T. Esercitazione opzionale Spring MVC
Alma Mater Studiorum Università di Bologna Scuola di Ingegneria e Architettura Tecnologie Web T Esercitazione opzionale Spring MVC Home Page del corso: http://www-db.disi.unibo.it/courses/tw/ Versione
Universita di Milano Bicocca Corso di Basi di dati 1 in elearning C. Batini 6. SQL DDL 6.2 Data Description Language - 2
Universita di Milano Bicocca Corso di Basi di dati 1 in elearning C. Batini 6. SQL DDL 6.2 Data Description Language - 2 Vincoli di integrita 2 Cosa e un vincolo di integrita E una proprieta sempre valida
PROGRAMMAZIONE DIDATTICA DI DIPARTIMENTO A.S. 2017/2018
ISTITUTO ISTRUZIONE SUPERIORE EINAUDI - SCARPA TECNOLOGICO - ECONOMICO PROFESSIONALE Via J. Sansovino, 6-31044 MONTEBELLUNA (TV) 0423 23587 - Fax 0423 602717 web: www.iiseinaudiscarpa.gov.itemail: info@iiseinaudiscarpa.gov.it
Esercitazione TIGA: JDBC Soluzione proposta
Esercitazione TIGA: JDBC Soluzione proposta JAVA/JDBC è un framework sviluppato da Sun per facilitare la connessione di applicazioni JAVA con i più svariati database SQL. La connessione con una base di
Vincoli. Chiavi esterne Vincoli locali e globali Triggers Leggere Cap 2 Riguzzi et al. Sistemi Informativi
Vincoli Chiavi esterne Vincoli locali e globali Triggers Leggere Cap 2 Riguzzi et al. Sistemi Informativi Lucidi derivati da quelli di Jeffrey D. Ullman 1 Vincoli e Triggers Un vincolo e una relazione
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
2011 Politecnico di Torino 1
SQL per le applicazioni Call Level Interface Le richieste sono inviate al DBMS per mezzo di funzioni del linguaggio ospite soluzione basata su interfacce predefinite API, Application Programming Interface
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
Corso di PHP. Prerequisiti. 8.1 PHP e MySQL. Conoscenza MySQL Tecnica della programmazione
Corso di PHP 8.1 PHP e MySQL 1 Prerequisiti Conoscenza MySQL Tecnica della programmazione procedurale ad oggetti Principi di programmazione web Programmazione elementare in PHP 2 1 Introduzione In questa
Alberi Binario in Java
Alberi Binario in Java Realizzare un albero binario di ricerca. L albero binario è di ricerca se esiste una relazione di ordinamento tra i valori dei nodi (valori comparabili). In particolare, dato un
Corso di Basi di Dati A.A. 2015/2016
Corso di Laurea in Ingegneria Gestionale Sapienza Università di Roma Corso di Basi di Dati A.A. 2015/2016 - Esercizi Tiziana Catarci, Andrea Marrella Ultimo aggiornamento : 06/04/2016 Esercizio 1 Dare
SQL. Università degli Studi di Salerno. Corso di Laurea in Scienze della Comunicazione Informatica generale (matr. Dispari) Docente: Angela Peduto
SQL Università degli Studi di Salerno Corso di Laurea in Scienze della Comunicazione Informatica generale (matr. Dispari) Docente: Angela Peduto A.A. 2005/2006 Select La forma di select cui siamo arrivati
Programmazione Java. Davide Di Ruscio Dipartimento di Informatica Università degli Studi dell Aquila.
Programmazione Java Davide Di Ruscio Dipartimento di Informatica Università degli Studi dell Aquila diruscio@di.univaq.it. Sommario 2 2» Introduzione» Risorse» Driver» Contesto Applicativo» SQL» Classi
Laboratorio Progettazione Web PHP e MySQL. Andrea Marchetti IIT-CNR 2016/2017
Laboratorio Progettazione Web PHP e MySQL Andrea Marchetti IIT-CNR 2016/2017 Architettura di una applicazione Web Browser Web HTTP Server Web Dati Presentation Application Storage PHP e DataBase Quando
A livello fisico, un istanza di base di dati Oracle è composta. Gubiani & Montanari Oracle Database 3
Oracle Database Express Edition Donatella Gubiani e Angelo Montanari Gubiani & Montanari Oracle Database 1 (Oracle XE) è una versione gratuita della base di dati È facile da installare e gestire Può essere
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
Sistemi di Elaborazione delle Informazioni
SCUOLA DI MEDICINA E CHIRURGIA Università degli Studi di Napoli Federico II Corso di Sistemi di Elaborazione delle Informazioni Dott. Francesco Rossi a.a. 2017/2018 1 Settima parte Interrogazione di una
Corso di Basi di Dati
Corso di Basi di Dati Il Linguaggio SQL Home page del corso: http://www.cs.unibo.it/~difelice/dbsi/ 1 Linguaggi per DBMS Il modello relazionale definisce i concetti generali ed i vincoli per modellare
Laboratorio di Basi di Dati
Laboratorio di Basi di Dati Docente: Alberto Belussi Lezione 1 SQL Structured Query Language SQL è stato definito nel 1973 ed è oggi il linguaggio più diffuso per i DBMS relazionali Il linguaggio SQL è