Docente: Gabriele Lombardi

Slides:



Advertisements
Presentazioni simili
UNIVERSITÀ DEGLI STUDI DI MODENA E REGGIO EMILIA
Advertisements

Elaborazione di Franco Grivet Chin
Accesso ai dati su Relational Database Management Systems LSA - Laboratorio di Sistemi Informativi Economico-Aziendali Salvatore Ruggieri Dipartimento.
CREAZIONE UTENTE SU ORACLE1 Pagina delle risorse: crea utente oracle ( Password:… Dora in poi, in questi lucidi,
DBMS (DataBase Management System)
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità B1 Introduzione alle basi di dati.
Database MySql.
Sicurezza e concorrenza nelle basi di dati
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità D3 Sicurezza e concorrenza nelle basi di dati.
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità C1 Il linguaggio SQL.
PHP.
Utilizzare PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006.
Java Enterprise Edition (JEE)
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
Java DataBase Connectivity (JDBC)
Connessione con MySQL.
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
IN QUESTA PRESENTAZIONE…
Database nel Web Modulo Didattico: Francesca Platania
OO.1 Marco Ronchetti - Java Sql package.
Basi di dati. Vantaggi degli archivi digitali Risparmio di spazio: sono facilmente trasferibili e duplicabili Risparmio di tempo: si può accedere ai dati.
Basi di dati Università Degli Studi Parthenope di Napoli
SIMULAZIONE RETE INTERNET INTERNET SERVICE PROVIDER GRUPPO 2 COMMESSA – INFORMATICA GRANATA Corso Sicurezza su Reti II Prof. A. De Santis Anno Accademico.
Docente: Gabriele Lombardi
© CEFRIEL Ricettario dei principali pattern GoF Docente: Gabriele Lombardi
© CEFRIEL Alcune API di base nel JDK J2SE Docente: Gabriele Lombardi
© CEFRIEL Concorrenza (cenni) Docente: Gabriele Lombardi
Modello Relazionale Definisce tipi attraverso il costruttore relazione, che organizza i dati secondo record a struttura fissa, rappresentabili attraverso.
Vincoli di integrità generici Con i costrutti visti sinora, non è sempre possibile definire tutti i possibili vincoli di integrità. Per questo esiste listruzione.
Manipolazione dei dati I comandi SQL che permettono di modificare il contenuto di una base di dati sono insertdeleteupdate insert ha la seguente sintassi:
Il linguaggio ASP Lezione 3 La connessione al database con ASP
JDBC(TM) Database Access
1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... ASP. Net Web Part e controlli di login Elaborazione di Franco Grivet Chin.
Architettura Java/J2EE
Transazioni.
Viste. Cosè una vista? è possibile creare un subset logico di dati o una combinazione di dati una vista è una tabella logica basata su una tabella o su.
SQL basato su ANSI (American National Standards Institute) – standard SQL SQL – Structured Query Language è un linguaggio dichiarativo e permette di comunicare.
DBMS ( Database Management System)
Basi di dati Claudia Raibulet
Corso di INFORMATICA anno scolastico 2009/10 Linguaggio SQL IDENTIFICATORI di tabelle e attributi: stringhe di lunghezza max 18 caratteri, composte da.
Basi di Dati e Sistemi Informativi SQL per Applicazioni Home page del corso:
IMPLEMENTAZIONE TECNOLOGIE:HIBERNATE & JAVA RMI.
IMPLEMENTAZIONE TECNOLOGIE:HIBERNATE & JAVA RMI.
OBIETTIVI: Introduzione ai driver ODBC Creazione di alcune tabelle del database Creazione query Creazione report Lezione del 13/11/2009 Bray Francesco.
CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 4 - Dicembre Utenti e privilegi del database - 1 Root è lutente amministratore predefinito, ma.
Dati e DBMS DBMS relazionali SQL Progettazione di una base di dati Programma del Corso.
ASP – Active Server Pages Introduzione Pagine Web Statiche & Dinamiche(ASP)
Java Enterprise Edition
FUNZIONI Dichiarazione: Definizione:
Pagine ASP parte 3 I data base Stefano Schacherl.
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità D3 Sicurezza e concorrenza nelle basi di dati.
Microsoft Access Maschere (II).
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
Programmazione Web PHP e MySQL 1. 2Programmazione Web - PHP e MySQL Esempio: un blog.
IV D Mercurio DB Lezione 2
Interazione col DB Per interagire con una base dati da una pagina PHP occorre procedere come segue: Eseguire la connessione al DBMS MySQL in ascolto;
Esercizio ODBC. Configurare il driver ODBC Start  Control Panel  Administrative Tools Aprire: Data Source(ODBC) User DSN  Add…. Selezionare il driver.
Sviluppo per Pocket PC con SQL Server CE 2.0 Fabio Santini Silvano Coriani.NET Developer Evangelist Microsoft Corporation.
MySQL Database Management System
TW Asp - Active Server Pages Nicola Gessa. TW Nicola Gessa Introduzione n Con l’acronimo ASP (Active Server Pages) si identifica NON un linguaggio di.
Database Elaborato da: Claudio Ciavarella & Marco Salvati.
Transazioni in MySQL 4 Transazioni in MySQL 4
Joomlahost.it1 Presentato da Fustini Alessandro Myslq DBA e Developer certified Joomlahost.it.
© 2015 Giorgio Porcu - Aggiornamennto 28/03/2015 UdA 1A Database Progettazione Fisica G IORGIO P ORCU
Cloud Tecno V. Percorso didattico per l’apprendimento di Microsoft Access 4 - Le maschere.
Linguaggio SQL prima parte Linguaggio SQL prima parte A. Lorenzi, E. Cavalli INFORMATICA PER SISTEMI INFORMATIVI AZIENDALI Copyright © Istituto Italiano.
Elementi di statistica con R e i database LEZIONE 2 Rocco De Marco rocco.demarco(a)an.ismar.cnr.it Ancona, 12 Aprile 2012.
Linguaggio SQL. Linguaggi per database La diffusione del modello relazionale ha favorito l’uso prevalente di linguaggi non procedurali: in questo modo.
SQLite. Introduzione a SQLite Oltre alla possibilità di memorizzare informazioni persistenti attraverso Preferences e files, Android mette a disposizione.
* R AMAN K AZHAMIAKIN O SCAR Z G IOVANNI D E ITT M. B UONARROTI, T RENTO A NDROID D EVELOPMENT P ERSISTENZA.
Transcript della presentazione:

Docente: Gabriele Lombardi lombardi@dsi.unimi.it DBMS & SQL: java.sql.* Docente: Gabriele Lombardi lombardi@dsi.unimi.it © 2010 - CEFRIEL

The present original document was produced by CEFRIEL and the Teacher for the benefit and internal use of this course, and nobody else may claim any right or paternity on it. No right to use the document for any purpose other than the Intended purpose and no right to distribute, disclose, release, furnish or disseminate it or a part of it in any way or form to anyone without the prior express written consent of CEFRIEL and the Teacher. © copyright Cefriel and the Teacher-Milan-Italy-23/06/2008. All rights reserved in accordance with rule of law and international agreements. © 2010 - CEFRIEL

Sommario Introduzione Un esempio pratico JDBC Query in java.sql.* SLIDE CONTENUTO Introduzione Il problema, le astrazioni Un esempio pratico Creiamo un DB di esempio con Derby JDBC Architettura, accedere a un DBMS, drivers Query in java.sql.* Query native, parametriche, tipi di dato parrticolari Transazioni Classiche, savepoint, … Persistenza con JPA Utilizzo di JPA con J2SE Quering con JPA EJB-QL e query in varie forme © 2010 - CEFRIEL

Introduzione Problema: modalità di connessione/autenticazione; accedere a un DBMS da Java “ignorando” i dettagli comunicativi con il DBMS in questione: modalità di connessione/autenticazione; database a cui ci si sta connettendo; variazioni sulla sintassi SQL standard; tipi di dato, funzionalità, … utilizzare uno strumento OO per accedere a un DB. Soluzione: JDBC, ispirato a ODBC: java.sql.** e javax.sql.**; interfacce descrivono le funzionalità; driver custom per ogni DBMS offre le implementazioni; indirizzo JDBC (stringa) definisce DBMS, DB e autenticazione; DriverManager identifica il driver giusto e ne offre i servizi; tutto in maniera trasparente per l’utilizzatore. © 2010 - CEFRIEL

Derby setup Installazione: lo si trova in “Sun\SDK\javadb”; scaricare ed eseguire il tool di installazione dal sito della Sun se non si ha già derby; installando SJSAS derby è installato ed incluso: lo si trova in “Sun\SDK\javadb”; “javadb\frameworks\NetworkServer\bin” contiene i tools che ci permettono di usarlo. Configurazione: DERBY_HOME: path fino a “javadb”; PATH: aggiungere path fino a bin; CLASSPATH: agginugere: $DERBY_HOME/lib/derby.jar; $DERBY_HOME/lib/derbytools.jar; $DERBY_HOME/lib/derbynet.jar; $DERBY_HOME/lib/derbyclient.jar © 2010 - CEFRIEL

Derby tools A disposizione dalla cartella bin di javadb: setNetworkClientCP setNetworkServerCP impostazione automatica delle variabili d’ambiente (locali); da modificare eliminando il commento e definendo DERBY_INSTALL; ambiente sia per il client che per il server; sysinfo: informazioni sullo stato corrente del server; dblook: consente di mostrare il DDL di un DB; startNetworkServer stopNetworkServer permettono di avviare e fermare il servizio Derby; NetworkServerControl permette di controllare il funzionamento del server, avviarlo, fermarlo, pingare, controllarne o modificarne i parametri; ij: accesso a DB ed esecuzione comandi DDL ed SQL. © 2010 - CEFRIEL

Creazione DB Scegliere la cartella che conterrà i DB; eventualmente crearne una nuova appositamente; solo nei nostri test: useremo “cmd” spostandoci nella cartella dei DB; eseguiremo il comando: NetworkServerControl start la cartella corrente verrà usata come “derby.system.home”; normalmente: creazione di uno script apposito; impostazione della proprietà da comando; esecuzione di: java -Dderby.system.home=<DBhome> <altreProps> -jar %DERBY_HOME%\lib\derbyrun.jar server start creazione DB: con il server in esecuzione: da “cmd” eseguire “ij” ed il comando: connect 'jdbc:derby://localhost:1527/Corsi;create=true'; © 2010 - CEFRIEL

Connessione e manipolazione del DB Connettersi: Usando “ij”; usando il comando: connect 'jdbc:derby://localhost:1527/Corsi'; Creare lo schema del DB: utilizzando i comandi DDL: CREATE TABLE Argomento ( ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, nome VARCHAR(30) NOT NULL UNIQUE, descr CLOB, numOre INTEGER NOT NULL); con un file contenente i comandi DDL e il comando: run ‘nomefile’; si leggano i sorgenti di: corsiCreate.sql corsiDrop.sql li si lanci su un database di esempio; si provi a manipolare ed ispezionare il DB. © 2010 - CEFRIEL

Lo schema SYS Schemi: Diamo un occhio: sorta di “viste” del DB (ad esempio per applicare autorizzazioni diverse, o mostrare solo parte del DB); associati agli utenti; associati a ruoli; SYS è di sistema (del DBMS) APP è il nostro. Diamo un occhio: SET SCHEMA SYS; SELECT TABLENAME FROM SYSTABLES WHERE TABLENAME LIKE 'SYS%'; SELECT CONSTRAINTNAME FROM SYSCONSTRAINTS; SELECT SCHEMANAME FROM SYSSCHEMAS; © 2010 - CEFRIEL

Per informarsi meglio: Riferimenti Era solo un: rinfresco dei vecchi ricordi di basi di dati; un assaggio delle features di JavaDB (Derby); non è Oracle… …però offre quanto serve nella maggior parte dei casi. Per informarsi meglio: Java DB Tools and Utilities Guide Java DB Server and Administration Guide Java DB Developer's Guide Java DB Reference Manual Ricordiamoci: NON SIAMO DBA, non tentiamo di sostituirli! © 2010 - CEFRIEL

Il nostro DB di esempio Contenuto: Noi utilizzeremo: corsi erogabili dal CEFRIEL, corredati dalla descrizione degli argomenti, durata e difficoltà; tabelle “Corso” “Argomento” e relazione n-n tra loro; vedere “corsiCreate.sql” e “corsiDrop.sql”… …e usarli per creare il DB su cui lavorare! Noi utilizzeremo: solo la tabella “Argomento” nell’esempio “preconfezionato”; la tabella corso e la relazione n-n negli esercizi. © 2010 - CEFRIEL

Connettersi al DB tramite JDBC infrastruttura di astrazione dei dettagli di comunicazione con un DBMS (protocollo); simile nello scopo a ODBC (by Microsoft); database identificato da un JDBS path; “comunicatore” nascosto in un java.sql.Driver… …da includere nel classpath; driver automaticamente istanziato dal DriverManager. Esempio (nostro caso): java.sql.Connection conn = DriverManager.getConnection( "jdbc:derby://localhost:1527/Corsi"); solo nel JDBC path è presente la dipendenza dal tipo di DBMS/server/porta/database, il resto del codice è agnostico. © 2010 - CEFRIEL

Eseguire una query Interfacce con cui interagire: java.sql.Statment: rappresenta un comando SQL con possibilità di restituzione di un ResultSet (o di un intero); la connessione contiene i factory-methods; permette di utilizzare i cursori e fare pooling; permette l’esecuzione batch di più comandi. java.sql.PreparedStatment: sotto-interfaccia della precedente; permette di formattare parametri tipizzati; permette di eseguire lo stesso statment più volte con parametri differenti (reimpostati ogni volta); modo migliore per evitare bachi di SQL-injection. © 2010 - CEFRIEL

Esempio in pratica: inserimento In 07_DB&SQL\ClientCorsi: finestra FrameAggiuntaArgomenti; esecuzione di una INSERT con parametri; notare i tipi (stringa, intero… e CLOB); notare che non ci stiamo preoccupando della gestione della transazione… che comunque avviene. // Mi connetto: Connection conn = DriverManager.getConnection("jdbc:derby://localhost:1527/Corsi"); // Creo lo statment preparato (con argomenti) e da eseguire: PreparedStatment st = conn.prepareStatement( "INSERT INTO Argomento (nome, descr, numOre) VALUES (?,?,?)"); // Creo il CLOB contenente la descrizione: Clob desc = conn.createClob(); desc.setString(1, txtDescrizione.getText()); // Imposto i parametri: st.setString(1, txtNome.getText()); st.setClob(2, desc); st.setInt(3, sldNumeroOre.getValue()); // Scrivo nel DB: st.execute(); Connessione al DBMS Preparazione statment Assegnazione parametri Chiusura connessione Reale esecuzione SQL © 2010 - CEFRIEL

Esempio in pratica: ricerca In 07_DB&SQL\ClientCorsi: finestra FrameArgomenti; esecuzione di una SELECT senza parametri; notare i tipi (stringa, intero… e CLOB); non gestiamo la transazione… che avviene. (sicuri?) // Mi connetto: Connection conn = DriverManager.getConnection("jdbc:derby://localhost:1527/Corsi"); // Effettuo la query: ResultSet res = conn.createStatement().executeQuery( "SELECT nome, numOre, descr FROM Argomento"); // Aggiungo le righe: while (res.next()) { // Ottengo i dati: String nome = res.getString(1); int numOre = res.getInt(2); Clob desc = res.getClob(3); // Aggiungo una riga: tbl.addRow(new Object[]{nome, numOre, desc.getSubString(1, (int) desc.length())}); } // Ora posso chiudere il result set e la connessione: res.close(); conn.close(); Connessione al DBMS Esecuzione query Fetch dei dati Chiusura connessione © 2010 - CEFRIEL

Esempio in pratica: cancellazione In 07_DB&SQL\ClientCorsi: finestra FrameArgomenti; esecuzione di una DELETE con parametri; gestiamo noi la transazione: autoCommit disabilitatato; commit e rollback esplicite. Da notare: in realtà la connessione viene sempre chiusa in finally; nel blocco catch viene effettuata la rollback della transazione. Connessione al DBMS con disabilitazione autoCommit // Mi connetto: Connection conn = DriverManager.getConnection("jdbc:derby://localhost:1527/Corsi"); conn.setAutoCommit(false); // Eseguo la cancellazione: pst = conn.prepareStatement("DELETE FROM Argomento WHERE nome=?"); pst.setString(1, nome); pst.execute(); // Ora posso committare e chiudere la connessione: conn.commit(); conn.close(); Cancellazione Chiusura connessione © 2010 - CEFRIEL

Esercizio Modificare l’esempio realizzando: argomenti di un corso; aggiungere l’operazione update in FrameArgomenti; una finestra unica di gestione dei corsi (aggiunta, visualizzazione, aggiornamento e cancellazione direttamente nella stessa finestra); permettere l’accesso alla finestra degli argomenti sia per modificarli che per selezionarne uno; permettere l’associazione di un argomento a un corso tramite selezione in FrameArgomenti e richiesta del numero di giorno in cui inserire l’argomento; aggiungere una serie di strumenti di quering come: argomenti di un corso; argomenti di un corso in un giorno; numero ore di un corso; programma completo di un corso; altro a vostra discrezione. NOTA: in quest’ultimo punto mostrare i risultati in tabella. © 2010 - CEFRIEL

Java Persistence API… scopo: Cenni su JPA Java Persistence API… scopo: fornire un’infrastruttura di gestione dell’ORM; sfruttare sotto le potenzialità di JDBC; permettere di manipolare solamente oggetti. Soluzione proposta: ORM definito tramite: descrittore XML (non lo vedremo); classi annotate (si veda l’esempio). Nel nostro caso: abbiamo di già un DB, quindi “importiamo” lo schema; lasciamo che NetBeans si appoggi a Forte4J. Ma prima… un po’ di teoria! © 2010 - CEFRIEL

Persistence units Unità che mettono assieme tecnologie di peristenza: database accessibili come data sources; un Presistence Provider per la gestione dell’ORM; le entità da gestire nella persistenza e ORM. Supporto per: gli EntityManager, atti alla gestione delle entità; applicazioni enterprise usufruenti dell’EntityManager e delle PU. La PU è il collante che descrive come mettere assieme le varie parti, è un descrittore di deploy in XML. DB Persistence Provider EntityManager Data source EApp DB Entity DB Persistence Unit: persistence.xml glues together persistence pieces and technologies to provide support to the EntityManager Data source Entity DB Persistence Provider Entity DB Data source Entity Entity © 2010 - CEFRIEL

Entity beans JavaBeans: costruttore di default: proprietà: semplici POJO con: costruttore di default: senza parametri affinché possano essere istanziati; proprietà: rappresentate da metodi getter e setter; una proprietà “prop” deve avere: un getter “public type getProp();” se è read; un setter “public void setProp(type val);” se è write; rappresentano: entità reali a cui sono associate proprietà; Entity EJB se annotate come @Entity; sono mappati: su tabelle del DB. © 2010 - CEFRIEL

EntityManager Scopo: persistenza e quering; efact = Persistence.createEntityManagerFactory(PUname); manager = efact.createEntityManager(); Scopo: gestione degli EntityBeans: persistenza e quering; gestione transazioni: utilizzabile per 0..* transazioni (esplicite in JSE); da considerarsi come una connessione al DB. Può essere ottenuto: in JSE tramite una factory: la persistence unit deve essere dichiarata in persistence.xml; in JEE come in JSE o sfruttando l’injection (tramite annotazioni). © 2010 - CEFRIEL

Managed e unmanaged La PU è legata a un DB; l’EntityManager alla PU; un pool di managed entity beans viene mantenuto sincronizzato con il DB: a seconda della flush policy scelta; regole di attach/detach; modifica di proprietà aggiornata sul DB; ciò che non è managed è unmanaged: nessun aggiornamento automatico; bean come normali POJO; possibilità di merge; al di fuori di una transazione: sempre unmanaged; a meno di extended contexts. PU EntityManager managed Entity Entity Entity unmanaged Entity Entity Entity © 2010 - CEFRIEL

Atomiche: come fossero eseguite istantaneamente Transazioni begin … ops commit/ rollback Una o più operazioni correlate su uno o più DB; devono/possono essere: Atomiche: come fossero eseguite istantaneamente Consistenti: con i vincoli imposti dal DB (relazioni) Isolate: se concorrenti non interferiscono Durature: modifiche con successo sono permanenti concetto di transazioni ACID; gli entity beans sono managed: (quasi) solo durante una transazione; le transazioni sono gestite da: JPA in SE; JTA in EE. em.getTransaction().begin(); … em.getTransaction().commit(); in JSE … ops Transaction scope @PersistenceContext(unitName=“PUname”) private EntityManager em; … <transaction-scoped operations> in JEE injection © 2010 - CEFRIEL

Creazione automatica del DB <properties> <property name="toplink.jdbc.url" value="jdbc:derby://localhost:1527/aTest"/> <property name="toplink.jdbc.driver" value="org.apache.derby.jdbc.ClientDriver"/> <property name="toplink.jdbc.user" value="APP"/> <property name="toplink.jdbc.password" value="APP"/> <property name="toplink.ddl-generation" value="drop-and-create-tables"/> <property name="toplink.create-ddl-jdbc-file-name" value="DB_aTest_create.sql"/> <property name="toplink.drop-ddl-jdbc-file-name" value="DB_aTest_drop.sql"/> </properties> Nel container JEE dell’AS… …e da poco anche in JSE fuori dal container: è possibile richiedere la creazione automatica del DB; vengono generati 2 file con DDL di drop e create; sequenza drop-create al deploy (o exe. App. JSE); possibili scelte di toplink.ddl-generation: none (default)  non viene fatto nulla; create-tables  solo le create; drop-and-create-tables  sequenze drop-create. © 2010 - CEFRIEL

JPA: Conclusioni Consente: Di nostro… di accedere a un DB in maniera “nativa” rispetto al paradigma di programmazione Object Oriented; nasconde tutti i dettagli di Object Relational Mapping; è uno strumento utilizzato in ambiente enterprise… … si vedano anche altri strumenti come Hibernate e Spring. Di nostro… … abbiamo solo raschiato la superficie; analizzando “ClientCorsi” si risponda alle domande: Come sono state mappate le tabelle? Come sono stati mappati i campi? Chiavi primarie? Identificativi generati? La chiave primaria composta? Il CLOB? Come sono state mappate le relazioni? Come sono state “nascoste” le query? © 2010 - CEFRIEL