Il problema. SQL da programma. Il problema - Esempio. Il problema. Estensioni imperative di SQL. Approcci
|
|
|
- Anna Contini
- 10 anni fa
- Просмотров:
Транскрипт
1 Il problema Come abbiamo visto, SQL permette in modo dichiarativo di accedere i dati memorizzati in una base di dati il suo potere espressivo è però limitato questo significa che non tutte le elaborazioni che possiamo volere applicare ai dati possono essere espresse in SQL 1 Il problema - Esempio Il problema Supponiamo di avere una base di dati avente il seguente schema: Impiegati(#Imp,Nome,Stipendio,#Manager) supponiamo adesso di volere determinare tutti i manager diretti o indiretti dell impiegato Rossi questa computazione non è esprimibile in SQL Nasce quindi l esigenza di estendere il potere espressivo di SQL idea: combinare SQL con linguaggi di programmazione SQL: utilizzato per l accesso ai dati linguaggio di programmazione: utilizzato per manipolare i dati 3 4 Approcci Estensioni imperative di SQL Tre possibili approcci: estensioni imperative di SQL: si estende SQL con tipici costrutti dei linguaggi di programmazione interfacce verso il DBMS: si utilizza un interfaccia per utilizzare le funzionalità del DBMS da linguaggio di programmazione embedded SQL: si utilizza SQL all interno di un linguaggio di programmazione Combinazione di statement SQL e costrutti imperativi possibilità di definire funzioni e procedure ogni procedura viene compilata e può essere direttamente eseguita o chiamata da programmi applicativi, utilizzando SQL embedded o interfacce per DBMS 5 6 1
2 Interfacce per DBMS Embedded SQL 7 Libreria di funzioni del DBMS che possono essere chiamate dai programmi applicativi Anche chiamate Call Level Interface (CLI) simile alle tipiche librerie C Funzioni tipiche: Connessione Invio statement per esecuzione Analisi risultato Disconnessione Esempio: la CLI di Oracle si chiama OCI (Oracle Call Interface) librerie standard: ODBC, JDBC 8 Possibilità di utilizzare statement SQL in programmi scritti con tipici linguaggi di programmazione (C, Java) Gli statement SQL vengono processati da uno speciale precompilatore che invia lo statement al DBMS per l esecuzione e recupera il risultato Necessità di gestire la comunicazione tra programma applicativo e DBMS Flusso Flusso - Connessione Qualunque sia l approccio scelto, il programma deve eseguire i seguenti passi fondamentali: connessione alla base di dati dichiarazione variabili di comunicazione con il DBMS esecuzione statement SQL analisi risultato disconnessione dalla base di dati Le procedure scritte con estensioni imperative di SQL possono venire eseguite direttamente dal DBMS,quindi non richiedono una connessione esplicita negli altri due casi è necessario specificare a quale base di dati ci si vuole connettere, con quale utente e quale password 9 10 Flusso - Variabili di comunicazione Flusso - Esecuzione statement SQL Il linguaggio di programmazione e gli statement SQL possono in genere comunicare utilizzando opportune variabili tali variabili possono essere utilizzate per definire gli statement SQL o per inserire valori ottenuti come risultato di interrogazioni SQL Tutti e tre gli approcci devono dare la possibilità di eseguire statement SQL interrogazioni: restituiscono in generale un insieme di tuple insert, delete, update: restituiscono in genere il numero di tuple inserite, cancellate, aggiornate statement DDL: restituiscono valore predefinito 11 1
3 Flusso - Analisi del risultato FLusso - Cursore Problema relativo all esecuzione di interrogazioni SQL se l interrogazione restituisce solo una tupla: Il numero di informazioni da analizzare è noto a tempo di compilazione e pari al numero degli attributi della relazione è possibile definire variabili di comunicazione da utilizzare per inserire i valori degli attributi della tupla restituita se l interrogazione restituisce più tuple: è necessario un meccanismo che permetta di muoversi sulle tuple del risultato, una ad una, e manipolarle questo è possibile utilizzando un cursore Un cursore si può definire in astratto come un puntatore alle tuple ottenute come risultato di un interrogazione SQL Operazioni sui cursori: dichiarazione: associa un cursore ad un interrogazione apertura: esegue l interrogazione associata al cursore e lo inizializza avanzamento: sposta il cursore sulla tupla successiva del risultato chiusura: disabilita il cursore Flusso - Cursore Flusso - Disconnessione Chiude la connessione tra il programma applicativo e la base di dati nel caso di procedure scritte con estensioni imperative di SQL, quando vengono eseguite direttamente dal DBMS, questa operazione non è necessaria SQL statico e dinamico Estensioni imperative di SQL SQL statico: Uso di statement SQL noti a tempo di compilazione SQL dinamico: uso di statement SQL noti solo a tempo di esecuzione tipico esempio: clausola WHERE in uno statement SELECT cambia in relazione al fatto che una certa condizione sia vera o falsa se siamo in maggio, determina gli impiegati con stipendio > 1000, altrimenti con stipendio > 000;
4 Estensioni imperative di SQL Estensioni imperative di SQL Ogni DBMS in genere supporta un estensione di SQL che supporta concetti tipici dei linguaggi di programmazione Tale linguaggio può essere usato per scrivere programmi che coinvolgano statement SQL Tali programmi possono essere: scritti ed eseguiti direttamente da una shell In questo caso chiamiamo batch l insieme dei comandi da eseguire memorizzati e richiamati quando necessario procedure, package Non esiste uno standard per le estensioni imperative di SQL Oracle: PL/SQL SQL Server: T-SQL ogni variante può differire dalle altre per la specifica sintassi ogni estensione deve permettere di specificare Dichiarazioni assegnamenti strutture di controllo istruzioni per cursori modularità (transazioni) 19 0 Estensioni imperative di SQL in Oracle: PL /SQL PL/SQL É un linguaggio con struttura a blocchi ogni blocco è composto da tre parti: parte dichiarativa parte di esecuzione parte di gestione delle eccezioni nel seguito vedremo solo alcuni aspetti di base di PL/SQL 1 PL/SQL Dichiarazioni Nel seguito vedremo: Dichiarazioni statement SQL Istruzioni Cursori Procedure, funzioni Package Le dichiarazioni devono essere precedute dalla parola chiave DECLARE è possibile dichiarare sia costanti che variabili ed usarle ovunque possa comparire un espressione le variabili possono avere un qualunque tipo SQL è possibile assegnare un valore di default alle variabili al momento della dichiarazione è possibile specificare vincoli di NOT NULL 3 4 4
5 Dichiarazioni - Esempio Dichiarazioni - Uso di attributi in dichiarazioni DECLARE stipendio NUMBER(4) NOT NULL; limite_di_credito CONSTANT NUMBER(7) := ; data_nascita DATE; num_impiegati INTEGER := 0; manager BOOLEAN; Possibilità di specificare che il tipo di una variabile coincide con il tipo di un altra variabile o di un campo di una tabella impiegato impiegati.nome%type; il tipo della variabile impiegato coincide con il tipo del campo nome della tabella impiegati credit REAL(7,); debit credit%type; il tipo della variabile debit coincide con il tipo della variabile credit 5 6 Dichiarazioni - Uso di attributi in dichiarazioni Statement SQL Possibilità di specificare che una variabile rappresenta un record, corrispondente ad una tupla di una tabella dept_rec dept%rowtype; la variabile dept_rec è dichiarata come un record, i cui elementi hanno gli stessi nomi e tipi dei campi della tabella dept Possibilità di eseguire statement DML gli statement DDL devono essere eseguiti come SQL dinamico si veda oltre 7 8 Istruzioni - Assegnamenti Istruzioni - Esempio Assegnamenti di base stipendio := ; manager := TRUE; bonus := stipendio * 0.5; assegnamenti con valori estratti dal database si esegue una select che restituisce un unica tupla si assegnano i campi della tupla ad opportune variabili operatori per ogni tipo supportato, come in SQL possibilità di effettuare assegnamenti tra variabili record basate sulla stessa tabella! "#$ % &' ( ) $ * +!, -. ' /0.1- +! 3 - ' 54 # !
6 b b b b Istruzioni - Strutture di controllo Istruzioni - Esempio Costrutti di scelta: IF THEN, IF THEN ELSE, IF THEN ELSIF come in C ! - 1--,+ 41- ( 7! (, - 1--! + 4 $ * +! + 4 / 7! 8,+ 4 / 5 7! 8, 8! + 4 +!, +! - / / ",% - ' ' )! 31 3 Istruzioni - Strutture di controllo Istruzioni - Esempio cicli LOOP: LOOP sequence_of_statements EXIT WHEN boolean_expression; END LOOP; WHILE LOOP: WHILE condition LOOP sequence_of_statements END LOOP; FOR LOOP:FOR counter IN [REVERSE] lower_bound..higher_bound LOOP sequence_of_statements END LOOP;! "$#&%('*) +,&,$, --(. / / / 01& &$34 "&# 513-*4 "&# "$6 78&91-(:<;&=>?$91! "$#$@ 'A! "$#$B4 "$# "&6 7$C $5?D --(.&C / / / Istruzioni - Strutture di controllo Cursori GOTO è necessario associare label a determinati punti del programma con l istruzione GOTO è possibile modificare il flusso, portandolo ad eseguire l istruzione associata allalabel specificata EF G H I G K LKM J J J N O P Q R SQ T U V J J J W W M N O PQ R SQ T U$X X H I YF Z L1H ILK?P[$\&] ^ _ ` F Y F I a V J J J Dichiarazione: CURSOR cursor_name [(parameter[, parameter]...)] IS select_statement; apertura: OPEN cursor_name; avanzamento: FETCH cursor_name INTO record_name FETCH cursor_name INTO lista_variabili il cursore viene associato ad una variabile booleana NOT FOUND che diventa vera quando non ci sono più tuple da analizzare chiusura: CLOSE cursor_name
7 37 Cursori - Esempio!" # $ &% '&( definizione ) * +, -+/.01,,3 4 3) 5& : ; < 7 =>+-?A@B/CDFEG3 + 3H 9 I/JKB/LM H 9 IN O $ " # -P3 Q&.0 R R >3 5 ) E&.01 Q5-KBL M< 7 = S " /T&U #. 0 VWQG- 5> -* QGXG Y #K R R Z[\]G^/_ ` a b cgd a apertura avanzamento chiusura 38 Cursori - Esempio: uso di parametri egfh ijklh mgnfopqrgnkmfmgnfogs mgqrgnkm tvugwx h y izlg{g &lw}~f vƒf ˆ/ / & &ŠG Œ ŽG Ž G v A G & G FšK œžg ŽF GžŸG K W žÿg K K G K Gž F G G ŸGšG ªG Ÿ«ŽG v ±² ³ µ Eccezioni Eccezioni di sistema L ultima sezione di un programma PL/SQL permette di gestire gli errori le eccezioni possono essere: definite dal sistema definite dall utente Eccezioni definite dall utente Eccezioni Esempio (eccezione di sistema) 41 Dichiarazione: DECLARE my_exception EXCEPTION; sollevamento eccezione: RAISE my_exception; definizione eccezione: EXCEPTION WHEN my_exception codice PL/SQL 4 ¹º» ¼ ½ ¾º À ÁÂ Ã Ä Å ÆÇ È ÉGÊ º¾Ë Ì Í Î Ï Ð Ê º ÑÒ Ç Óº¼ º» Ô Â Å Õ ÀÖ À Ã Â Å Ø Ù Ò Ç ÔÚ À ÁÂ Ã Ä Å ÆÛ ¾Ú É Ù Ä Æ Õ Ü Ù Ý&Þº¾ º Ù ß àá Æ âãkäåæ çä Ð è è àå Øé ÄÕ Ã ê Ù Àë Åì Å Ù Å Æ è á ß è í À  ÆÀ Â Â Æ Â Ò Ç Ó º ¾ Ô&Ò Ç ÔÚ Ù Ä Ã Ä Ù Ë Ù ß àá Æ â Í Â Ã Ä Å Æ Ï î ½¼ È º Ó/Ë äåæ ç ä Í À ÁÂ Ã Ä Å Æ Ï Ð»Ú ÉGÉ Ò Ô Ð º å» º ï ÔÒ Ú Ç Ý&Þº Ç/ç º¾ Ú Á ¹ Ò î Ò ¹ºÔ Þº Ç è è é à ë â À ÙGäëÅì Å Ù Å Æ á ß í À Â Æ ä À Â Â Æ Â Ò Ç Ó º ¾ Ô&Ò Ç ÔÚ Ù Ä Ã Ä Ù Ë Ù ß àá Æ â Í Â Ã Ä Å Æ Ï î ½¼ È º Ó/Ë äåæ ç ä Í ÇÈ ¼ ¼ Ï Ð»Ú ÉGÉ Ò Ô Ð Ý&Þº ð ð ð Ç ÚÔ Þº¾ÓGÔ Þº Ç è è é à ëâ À ÙGà â â ÆÄ é À ÂÀ Â Â Æ Â Ù ¾ÚG¼ ¼ Ê ½»ñÐ º Ç ¹ Ð è è À ò Õ À Ä Å Æ /é à ëâ À  ÙGà ëáâ Æ Õ ÜÀ ë/é À  À 7
8 Eccezioni Esempio (eccezione definita dall utente) Modularità 43 DECLARE... comm_missing EXCEPTION; -- declare exception BEGIN... IF commission IS NULL THEN RAISE comm_missing; -- raise exception END IF; bonus := (salary * 0.10) + (commission * 0.15); EXCEPTION WHEN comm_missing THEN process the exception END; 44 Il codice PL/SQL può essere organizzato in unità programmative: procedure, funzioni: concetto analogo a quello visto per C e Java package: insieme di dichiarazioni di variabili, costanti, procedure e funzioni che possono essere memorizzate nel database e utilizzate dalle applicazioni Procedure e funzioni Procedure 45 Possono essere create come oggetti di database con construtti DDL CREATE PROCEDURE CREATE FUNCTION possono essere dichiarate nella sezione di dichiarazione di un programma PL/SQL tutto uguale a prima si toglie la parola chiave CREATE 46»  À à í Å Æ À Â Æ Õ À ë êâ û ¾ º ½Ô º Ú ¾/¾ ºï ¼ ½»º ï ¾Ú» º¹ È ¾ º Â Æ Õ À ëê  À Á à àà Ë Ã Â Ã àà Ä À Â Í Ã Â Ã àà Ä À  ð ð ð Ï Ò Ó ½ Ó â Æ Õ Ã â ë À Õ â Ã Â Ã Ä Å Æ Ù Ê º ÑÒ Ç À ò À Õ ê Ä Ã áâ ÀÙ Ä Ã Ä À àà Ä Ù º å» ºï ÔÒ Ú Ç À ò Õ À Ä Å Æ éã ë â À  ٠º Ç ¹ à àà Ð!#" $&%'("!($&% '*)+, -./"10&34&%65 ' ) :;< ; = A+@ B C Procedure - Esempio Esempio (continua) PROCEDURE raise_salary (emp_id INTEGER, amount REAL) IS current_salary REAL; salary_missing EXCEPTION; BEGIN SELECT sal INTO current_salary FROM emp WHERE empno = emp_id; IF current_salary IS NULL THEN RAISE salary_missing; ELSE UPDATE emp SET sal = sal + amount WHERE empno = emp_id; END IF; EXCEPTION WHEN NO_DATA_FOUND THEN INSERT INTO emp_audit VALUES (emp_id, No such number ); WHEN salary_missing THEN INSERT INTO emp_audit VALUES (emp_id, Salary is null ); END raise_salary;
9 Funzioni Funzioni - Esempio 14 '6 $ ) ) 3 %1! '1 $+! = ; ) B ) 1 '6%1!, 7-6" 4 7 ; ; 9 ) 1! 8 ; = '6 $+! 8 ; < 9 )!60 ) C 3 %1! '1 $+! 9 +> 9, 4 4 B '6%! $&$+546! 9 4&5C C 1! 5 ' 9! '1$( 9 3 $( C '&%! > 9,6.* 9 B146!60 > 9, &.*8 9 B C!60 9 C Package Package Un package è un oggetto contenuto nello schema di una base di dati che contiene definizioni di variabili, costanti, procedure, funzioni, eccezioni, ecc. L interfaccia del package è accessibile alle applicazioni 51 5 Creazione interfaccia package Interfaccia package - Esempio 53 4 '6 $ ) 4 4& ;! - *"4 7 ; 9 ; ) 8 ; ; ) ; ; ) " ; ) ; = 9 9 ;# ) = ; 9 ; ) ; = 9 ; ) ; 9 ; )!60 ;! ) C 54 C ; 9 ; C C 4 '6$ &+ ; 9&4 $ $69 ; '% ; '1, # $0>! '1@19, 465B 1% $ 9 19, '6%!# ; '1, C $ 1 06%1<, > 4 4 @!1% B $ 1 06%1, > 1!6% 1B!60 ; 9C 9
10 Creazione body package Body package - Esempio 55! "# " $ % % % &' ( ( ) * + (, & % % % - (, & ) * + (, & % % % + &+ ) ) * + (, & % % %. +, / * ) * + (, & % % % 0+ ' &+ /&) 1 % % % 0 (, & ' % % % + & )0 + ' % % % * * ' % % %! 3 ' 40 & ' ( ( ( ' (, &' "9 9/&)1 : "87)' ' * + 17 : 3; 17! " " ; &< ' * =8>? 8 ' * "6 + * &1 A 8B C D < E &/ B C D< + 3 : >8 < ' * 3 :>8 < & F3 :>8 < ) ( &3 :>8 G! "! 3! 3 " ;! 3? B : " A & ' 4 + < " " < ' * < & < )( &G 6 3 ;@, + * & H B < < % E &/ < Body package - Esempio (continua) SQL dinamico :, + * & 1 A, )73 : >8 G8! "! 3 = 8>? I;C &7J;, ) 6 3 ;, + * & ; (, & ' 6 Statement SQL non noti a tempo di compilazione possono essere eseguiti con il comando EXECUTE IMMEDIATE EXECUTE IMMEDIATE dynamic_string [INTO {define_variable[, define_variable]... record}] [USING [IN OUT IN OUT] bind_argument [, [IN OUT IN OUT] bind_argument]...] [{RETURNING RETURN} INTO bind_argument[, bind_argument]...]; SQL dinamico - EXECUTE IMMEDIATE SQL dinamico - Esempi Il comando è composto da tre parti principali: stringa costruita dinamicamente (statement SQL o blocco PL/SQL) INTO: variabili nelle quali inserire valori tupla risultato (se viene restituita una singola tupla) USING: parametri da utilizzare nella stringa dinamica RETURNING: variabili nelle quali inserire alcuni valori di risultato DECLARE sql_stmt VARCHAR(00); plsql_block VARCHAR(500); emp_id NUMBER(4) := 7566; salary NUMBER(7,); dept_id NUMBER() := 50; dept_name VARCHAR(14) := PERSONNEL ; location VARCHAR(13) := DALLAS ; emp_rec emp%rowtype;
11 SQL dinamico - Esempio (continua) SQL dinamico - Esempio (continua) BEGIN EXECUTE IMMEDIATE CREATE TABLE bonus (id NUMBER, amt NUMBER) ; sql_stmt := UPDATE emp SET sal = 000 WHERE empno = :1 RETURNING sal INTO : ; EXECUTE IMMEDIATE sql_stmt USING emp_id RETURNING INTO salary; sql_stmt := INSERT INTO dept VALUES (:1, :, :3) ; EXECUTE IMMEDIATE sql_stmt USING dept_id, dept_name, location; sql_stmt := SELECT * FROM emp WHERE empno = :id ; EXECUTE IMMEDIATE sql_stmt INTO emp_rec USING emp_id; EXECUTE IMMEDIATE DELETE FROM dept WHERE deptno = :num USING dept_id; END; plsql_block := BEGIN emp_pkg.raise_salary(:id, :amt); END; ; EXECUTE IMMEDIATE plsql_block USING 7788, 500; 61 6 SQL dinamico - Esempio SQL dinamico - Cursori CREATE PROCEDURE delete_rows ( table_name IN VARCHAR, condition IN VARCHAR DEFAULT NULL) AS where_clause VARCHAR(100) := WHERE condition; BEGIN IF condition IS NULL THEN where_clause := NULL; END IF; EXECUTE IMMEDIATE DELETE FROM table_name where_clause; EXCEPTION... END; Se un interrogazione SQL restituisce più di una tupla, è necessario analizzare il risultato utilizzando un cursore per i cursori, vale tutto quanto detto per i cursori per SQL statico unica differenza: dichiarazione e apertura vengono unificate in un unica operazione SQL dinamico - Cursori OPEN {cursor_variable :host_cursor_variable} FOR dynamic_string [USING bind_argument[, bind_argument]...]; Estensioni imperative di SQL in SQL Server: T-SQL Esempio: OPEN emp_cv FOR -- open cursor variable SELECT ename, sal FROM emp WHERE sal > :s USING my_sal;
12 T-SQL Dichiarazioni T-SQL è un estensione imperativa di SQL supportata da Microsoft SQL Server Ogni programma T-SQL è composto da una parte di definizione e una parte di esecuzione Nel seguito vedremo: Dichiarazioni Istruzioni Cursori Procedure, funzioni In T-SQL è possibile dichiarare variabili per ogni tipo supportato da T-SQL Le variabili vengono dichiarate con la clausola DECLARE I nomi di variabili devono essere preceduti Esempio: int Istruzioni - Assegnazioni Istruzioni - Strutture di controllo Alle variabili è possibile assegnare valori con il comando SET = 134 Classici costrutti imperativi per alterare il flusso sequenziale di esecuzione degli statement specificati BEGIN END stesso ruolo {} in Java IF ELSE classico costrutto di scelta WAITFOR WAITFOR DELAY 00:00:0 aspetta due secondi WAITFOR TIME :00 riparte alle WHILE come in Java CASE Istruzioni - Esempio Cursori 71 SELECT name, CASE state WHEN ' CA' THEN ' California' WHEN ' KS' THEN ' Kansas' WHEN ' TN' THEN ' Tennessee' WHEN ' OR' THEN ' Oregon' WHEN ' MI' THEN ' Michigan' WHEN ' IN' THEN ' Indiana WHEN ' MD' THEN ' Maryland' WHEN ' UT' THEN ' Utah' END AS StateName FROM Authors 7 Gli statement SQL restituiscono un insieme di tuple può capitare di dovere analizzare le tuple una per una in questo caso è necessario associare al risultato un cursore, cioè un puntatore che permette di muoversi all interno di un insieme di tuple risultato un cursore deve: essere dichiarato aperto utilizzato per muoversi sulle tuple chiuso è possibile dichiarare una variabile di tipo cursore 1
13 Cursori Cursori 73 Dichiarazione DECLARE <nome cursore> CURSOR FOR <select statement> Apertura OPEN <nome cursore> Avanzamento FETCH NEXT FROM <nome cursore> INTO <lista variabili> Chiusura CLOSE <nome cursore> Deallocazione DEALLOCATE <nome cursore> 74 Variabile di sistema è uguale a 0 se la tupla è stata letta è < 0 se si è verificato qualche problema (ad esempio la tupla non esiste, siamo arrivati alla fine del result set) Cursori - Esempio Organizzazione codice T-SQL 75 DECLARE ImpCursor CURSOR FOR SELECT Nome FROM Impiegati OPEN ImpCursor VARCHAR(10) FETCH NEXT FROM ImpCursor WHILE (@@FETCH_STATUS = 0) BEGIN FETCH NEXT FROM ImpCursor END CLOSE ImpCursor DEALLOCATE ImpCursor 76 I programmi scritti in T-SQL possono essere organizzati ed eseguiti in tre modi distinti: inviati all SQL engine interattivamente (batch) organizzati in procedure (stored procedure) script: sequenza di statement T-SQL memorizzati in un file e quindi eseguiti, utilizzando una funzionalità particolare di SQL Server possono essere eseguiti dalla shell del DOS mediante il comando: osql osql -U <nome utente> -i <nome file input> -o <nome file risultato> Batch Batch - Esempio 77 Gruppi di statement T-SQL inviati interattivamente all SQL Engine ed eseguiti contemporanemante vengono compilati in un singolo piano di esecuzione se si verifica errore di compilazione il piano non viene generato se si verifica un errore in esecuzione gli statement seguenti non vengono eseguiti per speficare un batch da SQL Query Analyzer: GO le variabili dichiarate in un batch sono locali a tale batch 78 CREATE TABLE Impiegati (Imp# numeric(4) PRIMARY KEY, Nome VarChar(0), Mansione VarChar(0), Data_A Datetime, Stipendio Numeric(7,), Premio_P Numeric(7,), Dip# Numeric()); SELECT Nome, Dip# FROM Impiegati WHERE Stipendio>000 AND Mansione = ' ingegnere' ; GO 13
14 Procedure (stored procedures) Procedure 79 Le stored procedure sono simili al concetto di procedura (o funzione) presente nei linguaggi di programmazione come vedremo le applicazioni possono poi utilizzare le stored procedure per interagire con il DBMS funzionamento di base: accettano parametri di input usano un estensione di SQL per elaborare I dati contenuti nel DB settano parametri di output restituiscono valori di stato per indicare se l esecuzione ha avuto successo 80 Le stored procedure sono un particolare tipo di oggetto per la base di dati, quindi il linguaggio dovrà permettere di: Crearle, tramite il DDL Eseguirle, tramite comandi specifici La creazione di una procedura deve essere l unica operazione contenuta in un batch Procedure - Creazione ed esecuzione Procedure - Esempio CREATE PROCEDURE <nome> <parametri> AS <codice> CREATE PROCEDURE Stipendi AS SELECT Stipendio FROM Impiegati; EXECUTE <nome> EXECUTE Stipendi; EXEC Stipendi; 81 8 Procedure - Parametri Procedure - Parametri di input I parametri sono utilizzati per scambiare valori tra la procedura e l applicazioni o il tool che la richiama Tipi di parametri: input output valore di ritorno (se non specificato si assume 0) CREATE PROCEDURE INT AS SELECT * FROM Impiegati Where Imp#
15 Procedure -Parametri di input Procedure - Esempio 85 Al momento dell esecuzione della procedura, vengono specificati i parametri attuali: EXEC = 134 è inoltre possibile specificare un valore di default in questo caso, non sarà necessario passare un valore per il parametro 86 CREATE PROCEDURE INT = 134 AS SELECT * FROM Impiegati Where Imp# GO EXEC ImpSelect GO Procedure - Parametri di Output Procedure - Valori di ritorno Per restituire valori all ambiente chiamante, è possibile utilizzare parametri di output CREATE PROCEDURE int OUTPUT AS = avg(stipendio) FROM Impiegati WHERE Dip# GO int EXEC = OUTPUT GO L istruzione RETURN permette di restituire un valore all ambiente chiamanete Per default 0 indica che l esecuzione è andata a buon fine 1 indica che l esecuzione ha generato errori Procedure - Esempio SQL dinamico 89 CREATE PROCEDURE int OUTPUT AS INT! " # $ = 0 %'& ( " #! )* + * +,,- SELECT avg(stipendio).!! /. & FROM Impiegati + WHERE Dip# ) IF (@@ERROR <>0) GO 90 Statement dinamici possono essere eseguiti utilizzando una particolare stored procedure, definita dal sistema: sp_executesql parametri: stringa dinamico, che può contenere parametri (variabili non dichiarate) stringa che rappresenta la dichiarazione dei tipi dei parametri una assegnazione per ogni parametro 15
16 SQL dinamico - Esempio INT NVARCHAR(500) NVARCHAR(500) Interfacce per DBMS = N SELECT * FROM pubs.dbo.employee WHERE job_lvl = int = 35 @level = Interfacce per DBMS Interfacce per DBMS L idea è quella di standardizzare l accesso ad una base di dati definendo una libreria di funzioni che possono essere utilizzate dai programmi applicativi per interagire con la base di dati esistono librerie proprietarie per i vari DBMS Oracle: OCI (Oracle Call Interface) recentemente, si è cercato di standardizzare queste librerie in modo da rendere le applicazioni indipendenti dal DBMS al quale l applicazione ha accesso questo permette di non dovere riscrivere completamente l applicazione nel caso in cui il DBMS cambi interoperabilità Sono state quindi definite interfacce standard: ODBC: Scritta in C JDBC: scritta in Java le operazioni supportate sono sostanzialmente le stesse, anche se in JDBC la sintassi è più semplice Architettura di riferimento Applicazione API API Un applicazione è un programma che chiama specifiche funzioni API per accedere ai dati gestiti da un DBMS Flusso tipico: selezione sorgente dati (DBMS e specifico database) e connessione sottomissione statement SQL per l esecuzione recupero risultati e processamento errori disconnessione
17 Driver Manager Driver È una libreria che gestisce la comunicazione tra applicazione e driver risolve problematiche comuni a tutte le applicazioni quale driver caricare, basandosi sulle informazione fornite dall applicazione caricamento driver chiamate alle funzioni dei driver l applicazione interagisce solo con il driver manager Sono librerie dinamicamente connesse alle applicazioni che implementano le funzioni API ciascuna libreria è specifica per un particolare DBMS driver Oracle è diverso dal driver Informix traducono le varie funzioni API nel dialetto SQL utilizzato dal DBMS considerato (o nell API supportata dal DBMS) il driver maschera le differenze di interazione dovute al DBMS usato, il sistema operativo e il protocollo di rete DBMS JDBC (Java Database Connectivity) Il DBMS sostanzialmente rimane inalterato nel suo funzionamento riceve sempre e solo richieste nel linguaggio supportato esegue lo statement SQL ricevuto dal driver e invia i risultati JDBC (che non è solo un acronimo ma un trademark della SUN) è stato sviluppato nel 1996 dalla Sun per superare questi problemi Rappresenta una API standard per interagire con basi di dati da Java cerca di essere il più semplice possibile rimanendo al contempo flessibile permette di ottenere una soluzione pure Java per l interazione con DBMS indipendenza dalla piattaforma JDBC - Architettura generale JDBC - Tipi di driver Java Applications JDBC API API JDBC Driver Manager API JDBC Driver JDBC Driver Esistono quattro tipi di driver: JDBC-ODBC Bridge + ODBC Driver A native-api partly Java technology-enabled driver Pure Java Driver for Database Middleware Direct-to-Database Pure Java Driver. 101 DBMS DBMS 10 17
18 JDBC - Tipi di driver JDBC - Driver di tipo JDBC-ODBC Bridge A native-api partly Java Direct-to-Database Pure Java Driver for plus ODBC Driver technology-enabled driver Pure Java Driver Database Middleware 1 SQL da programma Accesso a JDBC tramite un driver ODBC Uso di JDBC-ODBC bridge il codice ODBC binario e il codice del DBMS client, deve essere caricato su ogni macchina client che usa JDBC-ODBC bridge si consiglia di utilizzare questa strategia quando non esistono soluzioni alternative è necessario installare le librerie sul client perché non sono trasportabili su HTTP compromette write once, run anywhere JDBC - Driver di tipo JDBC - Driver di tipo 3 Le chiamate a JDBC vengono tradotte in chiamate all API del DBMS prescelto (es. OCI Oracle) Il driver contiene codice Java che chiama metodi scritti in C/C++ Problemi per connessione via Web anche in questo caso, codice binario deve essere caricato sul client compromette write once, run anywhere Basato completamente su Java converte le chiamate JDBC nel protocollo di una applicazione middleware che traduce quindi la richiesta del client nel protocollo proprietario del DBMS l applicazione middleware può garantire l accesso a diversi DBMS il protocollo middleware dipende dal DBMS sottostante JDBC - Driver di tipo 4 JDBC - Tipi di dato Basato completamente su Java converte le chiamate JDBC nel protocollo di rete usato direttamente dal DBMS permette quindi un accesso diretto dalla macchina client alla macchina server è la soluzione più pura in termini Java JDBC definisce un insieme di tipi SQL, che vengono poi mappati in tipi Java Gli identificatori sono definiti nella classe java.sql.types
19 JDBC - Tipi di dato JDBC - Interfaccia (semplificata) 109 JDBC Types Mapped to Java Types JDBC Type Java Type CHAR String VARCHAR String LONGVARCHAR String Driver NUMERIC java.math.bigdecimal DECIMAL java.math.bigdecimal BIT boolean TINYINT byte SMALLINT short Connection INTEGER int BIGINT long interfacce REAL float FLOAT double DOUBLE double BINARY byte[] Statement VARBINARY byte[] LONGVARBINARY byte[] DATE java.sql.date TIME java.sql.time TIMESTAMP java.sql.timestamp SQL ResultSet da programma 110 classe DriverManager Java.sql.* JDBC - Flusso applicativo JDBC - Passo 1: caricamento driver Caricamento driver Connessione Esecuzione statement Disconnessione Il primo passo in un applicazione JDBC consiste nel caricare il driver che si intende utilizzare Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Nel seguito, per semplicità di notazione, negli esempi non sempre inseriremo la gestione delle eccezioni La gestione delle eccezioni è però necessaria (si veda avanti) Il nome della classe da usare viene fornito con la documentazione relativa al driver JDBC - Caricamento driver: esempio JDBC - Passo : Connessione import java.sql.*; class JdbcTest { public static void main (String args []) { Class.forName ("oracle.jdbc.oracledriver"); } } Per realizzare la connessione vengono utilizzate le seguenti classi ed interfaccie: classe java.sql.drivermanager: gestisce la registrazione dei driver interfaccia java.sql.driver: non viene esplicitamente utilizzata a livello applicativo interfaccia java.sql.connection: permette di inviare una serie di richieste SQL al DBMS È possibile connettersi a qualunque database, locale e remoto, specificandone l URL
20 JDBC Connessione JDBC - Connessione: esempi 115 In JDBC, l URL è formato da tre parti: jdbc: <subprotocol>: <subname> <subprotocol> identifica il driver o il meccanismo di connessione al database <subname> dipende da subprotocol ed identifica lo specifico database 116 jdbc:oracle:thin:@everest:151:gen: subprotocol: Oracle subname: thin specifica che deve essere utilizzato Oracle ODBC Thin driver Everest specifica il nome della macchina 151: numero porta GEN: nome database Oracle jdbc:mysql://cannings.org:3306/test subprotocol: MySQL subname: cannings.org specifica il nome della macchina 3306 : numero porta test : nome database MySQL se si usa JDBC-ODBC driver: jdbc:odbc:subname JDBC - Connessione JDBC Connessione: esempio 117 La connessione avviene chiamando il metodo getconnection della classe DriverManager, che restituisce un oggetto di tipo Connection Connection con = DriverManager.getConnection( jdbc:mysql://cannings.org:3306 /test, "mylogin", "mypassword"); Se uno dei driver caricati riconosce l URL fornito dal metodo, il driver stabilisce la connessione 118 import java.sql.*; class JdbcTest { static String ARS_URL = "jdbc:oracle:@putdatabasenamehere"; public static void main (String args []) { Class.forName ("oracle.jdbc.oracledriver"); Connection ARS; ARS =DriverManager.getConnection(ARS_URL, " whitney", "secret"); } } JDBC - Passo 3: creazione ed esecuzione statement JDBC - Creazione statement non preparati Creazione: Statement non preparati: il piano di accesso viene generato immediatamente prima dell esecuzione Statement preparati: la generazione del piano di accesso e l esecuzione sono due fasi distinte Il piano può essere generato una sola volta ed eseguito più volte Utile quando la stessa operazione deve essere eseguita con parametri diversi Esecuzione: Interrogazioni: restituisce un insieme di tuple (Result Set) Aggiornamenti: restituisce il numero di tuple modificate statement DDL: restituisce 0 Un oggetto di tipo Statement viene creato a partire da un oggetto di tipo Connection e permette di inviare comandi SQL al DBMS: Connection con; Statement stmt = con.createstatement(); Si noti che l oggetto statement non è ancora associato all istruzione SQL da eseguire Tale istruzione verrà specificata al momento dell esecuzione
21 JDBC - Creazione prepared Statement JDBC - Esecuzione statement non preparati Un oggetto di tipo PreparedStatement viene creato a partire da un oggetto di tipo Connection e permette di inviare comandi SQL al DBMS: PreparedStatement queryimp = con.preparestatement( SELECT * FROM IMPIEGATI"); La creazione di uno statement preparato richiede la specifica dello statement che dovrà poi essere eseguito É necessario distinguere tra statement che rappresentano query e statement di aggiornamento Per eseguire una query: stmt.executequery( SELECT * FROM IMPIEGATI"); Per eseguire una operazione di aggiornamento, inclusi gli statement DDL: stmt.executeupdate( INSERT INTO IMPIEGATI VALUES AB34, Gianni, Rossi, GT67,1500"); stmt.executeupdate("create TABLE PROVA (CAMPO1 NUMBER) ); 11 1 JDBC - Esecuzione statement preparati JDBC - Esecuzione statement É necessario distinguere tra statement che rappresentano query e statement di aggiornamento Per eseguire una query: queryimp.executequery(); Il terminatore dello statement (es. ; ) viene inserito direttamente dal driver prima di sottomettere lo statement al DBMS per l esecuzione Per eseguire una operazione di aggiornamento, inclusi gli statement DDL: queryimp.executeupdate(); JDBC - Uso di parametri in statement preparati JDBC - Passo 4: Elaborazione risultato È possibile specificare che la stringa che rappresenta lo statement SQL da preparare verrà completata con parametri al momento dell esecuzione I parametri sono identificati da? PreparedStatement queryimp = con.preparestatement( SELECT * FROM IMPIEGATI WHERE Nome =?"); I parametri possono poi essere associati allo statement preparato quando diventano noti È possibile associare valori ai parametri usando il metodo setxxx, dove XXX rappresenta un tipo Java queryimp.setstring(1, Rossi ); queryimp.executequery(): JDBC restituisce i risultati di esecuzione di una query in un result set String query = " SELECT * FROM IMPIEGATI "; ResultSet rs = stmt.executequery(query); Il result set è costruito solo per query e non per statement di aggiornamento In questo caso viene restituito un intero, che rappresenta il numero di tuple modificate (0 in caso di statement DDL)
22 JDBC - Elaborazione risultato JDBC - Metodi per accedere i valori associati agli attributi 17 Il metodo next() permette di spostarsi nel result set (cursore): while (rs.next()) {/* get current row */} inizialmente il cursore è posizionato prima della prima tupla il metodo diventa falso quando non ci sono più tuple da analizzare 18 Il metodo getxxx, di un ResultSet, permette di recuperare il valore associato ad un certo attributo, puntato correntemente dal cursore XXX è il tipo Java nel quale il valore deve essere convertito String s = rs.getstring( Cognome"); Gli attributi possono anche essere acceduti tramite la notazione posizionali: String s = rs.getstring(); int n = rs.getint(5); Usare getint per valori numerici, getstring per char, varchar JDBC - Esempio esecuzione diretta JDBC - Esempio prepared statement Statement selimp = ARS.createStatement (); String stmt = "SELECT * FROM Impiegati WHERE Cognome = Rossi "; ResultSet improssi = selimp.executequery (stmt); while ( improssi.next() ) { System.out.println (improssi.getstring ( Stipendio")); } String stmt = "SELECT * FROM Impiegati WHERE Cognome = Rossi "; PreparedStatement prepstmt = ARS.preparedStatement (stmt); ResultSet improssi = prepstmt.executequery (); while ( improssi.next() ) { System.out.println (improssi.getstring ( Stipendio")); }... JDBC - Passo 5: Disconnessione JDBC - Eccezioni Per risparmiare risorse, può essere utile chiudere gli oggetti di classe Connection, Statement, ResultSet quando non vengono più utilizzati metodo close() la chiusura di un oggetto di tipo Connection chiude tutti gli Statement associati mentre la chiusura di uno Statement chiude ResultSet associati La classe java.sql.sqlexception estende la classe java.lang.exception in modo da fornire informazioni ulteriori in caso di errore di accesso al database, tra cui: la stringa SQLState che rappresenta la codifica dell errore in base allo standard X/Open getsqlstate() il codice di errore specifico al DBMS geterrorcode() una descrizione dell errore getmessage()
23 import java.sql.*; import java.io.*; class JdbcTest Esempio { static String ARS_URL = "jdbc:oracle:@putdatabasenamehere"; JDBC - Warning public static void main (String args []) { try{ Class.forName ("oracle.jdbc.oracledriver"); Connection ARS; ARS =DriverManager.getConnection(ARS_URL, "whitney", "secret"); } catch (SQLException e) { while( e!=null){ System.out.println( SQLState: + e.getsqlstate()); System.out.println( Code: + e.geterrorcode()); System.out.println( Message: + e.getmessage()); e = e.getnextexception(); }}}} Sottoclasse di SQLException la classe java.sql.sqlwarning fornisce informazioni su warning relativi all accesso al database i warning vengono collegati agli oggetti i cui metodi hanno generato l eccezione connection statement resultset recuperabii con il metodo getwarnings() non bloccano l esecuzione del programma JDBc Warning: esempio JDBC - SQL dinamico 135 Statement selimp = ARS.createStatement (); String stmt = "SELECT * FROM Impiegati WHERE Cognome = Rossi "; ResultSet improssi = selimp.executequery (stmt); while ( improssi.next() ) { System.out.println (improssi.getstring ( Stipendio")); SQLWarning warning_stmt = selimp.getwarnings(); while (warning_stmt!= null) { System.out.println( Message: + warning_stmt.getmessage()); System.out.println( SQLState: + warning_stmt.getsqlstate()); System.out.println( Vendor error code: + warning_stmt.geterrorcode()); warning_stmt = warning_stmt.getnextwarning(); } } 136 I metodi executequery() e preparestatement() vogliono una stringa come argomento questa stringa non necessariamente deve essere nota a tempo di compilazione questo permette di eseguire facilmente statement SQL dinamici JDBC - SQL dinamico: esempio JDBC in Oracle 137 Supponiamo che la condizione WHERE di uno statement SQL sia noto solo a tempo di esecuzione String query = SELECT nome FROM Impiegati ; if (condition) query += WHERE stipendio > 1000 ; else query += WHERE stipendio > 000 ; Quattro tipi di JDBC drivers: uguali dal punto di vista dell API supportata diversi dal punto di vista della connessione al database JDBC Thin driver: 100% pure Java driver di tipo IV usato in applet non richiede software Oracle addizionale sul client JDBC OCI driver: driver di tipo II Oracle client deve essere installato sul client non adatti ad applet perché dipendono dalla piattaforma Oracle combinazione di Java e C convertono chiamate JDBC in chiamate OCI 3
24 JDBC in Oracle JDBC in Oracle JDBC Server-side Thin Driver: stesse funzionalità di JDBC Thin driver ma viene eseguito in un database Oracle e può accedere un database remoto utile per accedere un server Oracle remoto da un server Oracle JDBC Server-side Internal Driver: comunicazione diretta con il motore SQL del server sul quale è installato no accesso remoto Embedded SQL Concetti di base Il linguaggio SQL può essere usato come linguaggio "ospitato" in un linguaggio di programmazione (detto linguaggio ospite) per poter usare SQL da un linguaggio di programmazione sono necessarie alcune funzionalità aggiuntive ad SQL,ad esempio per trasferire risultati di interrogazioni in variabili di programma questa variante di SQL e' detta SQL ospitato (embedded SQL) Concetti di base Concetti di base Fasi nella compilazione di un programma P scritto in SQL ospitato e linguaggio ospite: precompilazione di P: il programma viene passato ad un precompilatore (specifico del linguaggio ospite) il precompilatore elimina gli statements di SQL sostituendoli con chiamate di procedura (al DBMS) espresse nella sintassi del linguaggio ospite Il risultato e' un programma scritto completamente nel linguaggio ospite compilazione del programma risultato della fase precedente Ogni istruzione di SQL ospitato deve essere preceduta da una stringa che permette al precompilatore di distinguere un' istruzione SQL dalle istruzioni del linguaggio ospite EXEC SQL: ad esempio in C #sql: in SQLJ un' istruzione SQL eseguibile può comparire dovunque possa comparire uno statement del linguaggio ospite
25 SQLJ Permette di utilizzare statement SQL statici all interno di codice Java linguaggio semplice e conciso per inserire statement SQL in programmi Java standard per assemblare componenti binarie prodotte da tool differenti standard per garantire portabilità di codice binario tra diversi DBMS SQLJ - La tecnologia Part 0: SQLJ Embedded SQL (lo vediamo) quasi completamente implementata Integrata con JDBC API Part 1: SQLJ Stored Procedures and UDFs (cenni) uso di metodi statici Java come SQL stored procedures & funzioni Part : SQLJ Data Types (non lovediamo) classi Java come SQL ADTs Alternativa ad SQL99 Abstract Data Types 145 SQLJ e JDBC SQLJ - Componenti SQLJ int n; #sql { INSERT INTO emp VALUES (:n)}; JDBC int n; Statement stmt = conn.preparestatement ( INSERT INTO emp VALUES (?) ); stmt.setint(1,n); stmt.execute (); stmt.close(); SQLJ translator: precompilatore prende in input un file.sqlj (Java + chiamate SQL) e restituisce un file.java e uno o più profili, che contengono informazioni circa le operazioni SQL da eseguire SQLJ customizer: specializza i profili in relazione al DBMS prescelto SQLJ runtime viene invocato ogni volta che viene eseguito il programma SQLJ - Translator: passi SQLJ - Translator: passi Un file SQLJ è un file Java che contiene dichiarazioni e istruzioni SQL (si veda in seguito), con estensione. sqlj (es. MyClass.sqlj) il comando sqlj MyClass.sqlj invoca la JVM, che invoca a sua volta SQLJ Translator SQLJ Translator parserizza il codice, verificando la sintassi SQLJ SQLJ Translator invoca il semantic checker, per verificare la correttezza semantica (si connette al database per verificare, ad esempio, se le tabelle considerate esistono) e per effettuare il controllo dei tipi tra tipi di oggetti SQL e variabili Java SQLJ Translator converte le operazioni SQL in chiamate a SQLJ runtime (ad esempio in Oracle, le operazioni SQL vengono convertite in chiamate a JDBC) SQLJ translator genera un file MyClass.java e uno o più profili un profilo per ogni connessione (MyClass_SJProfile0.ser, MyClass_SJProfile1.ser) ogni profilo contiene informazioni circa gli statement SQL contenuti nel codice (datatype, tabelle da accedere, ecc) i profili vengono utilizzati da SQLJ runtime per recuperare le operazioni SQL ed eseguirle, utilizzando un driver JDBC ogni profilo: un file *.ser JVM invoca il compilatore Java per compilare il file MyClass.java ottenuto, generando un insieme di file *.class JVM invoca l SQLJ customizer per il sistema considerato, che specializza i profili generati al contento del DBMS che si intende utilizzare
26 SQLJ - Runtime processing SQLJ - Traduzione: schema Quando si lancia l applicazione, SQLJ runtime legge i profili e crea i profili connessi, che tengono conto della connessione alla base di dati durante l esecuzione, ogni operazione SQL nel codice generato rappresenta una chiamata a SQLJ runtime che legge l operazione da eseguire dal profilo corrispondente SQLJ runtime esegue l operazione SQL tramite un driver JDBC SQLJ program SQLChecker Java Frontend SQLJ Translator Java Class Files SQLJ Profiles Profile Customizer Utility SQLJ JAR FILE SQLJ Customizations SQLJ - Traduzione: schema SQLJ - inclusioni Foo.sqlj [Ctx0] {SQL0} [Ctx0] {SQL1} [Ctx1] {SQL} Foo.java Profile0: Entry0 Profile0: Entry1 Profile1: Entry0 Foo.jar Foo.class Profile0: Entry0 Profile0: Entry1 Profile1: Entry0 Profile0.ser Entry0 Entry1 Un programma SQLJ deve includere: libreria JDBC librerie per SQLJ runtime import sqlj.runtime.*; import sqlj.runtime.ref.*; import java.sql.*; Profile1.ser Entry0 154 SQLJ - Connessione SQLJ - Connessione Il primo passo in un programma SQLJ è la connessione al DBMS è possibile gestire nella stessa applicazioni connessioni diverse, anche a basi di dati distinte ogni connessione viene chiamata contesto non vedremo questo aspetto ma ipotizzeremo di eseguire una singola connessione contesto di default Due passi: si genera una connessione JDBC si usa la connessione per definire il contesto di default Class.forName(driver_name); Connection con = DriverManager.getConnection(url,user,pwd); DefaultContext.setDefaultContext(new DefaultContext(con);
27 SQLJ - Costrutti di base SQLJ - Statement eseguibili 157 Dichiarazioni permettono di dichiarare particolari tipi nell applicazione iterator: cursori tipati connection context: permettono di specificare connessioni che agiscono su un particolare insieme di entità (tabelle, viste, stored procedures, ecc.) non li vediamo istruzioni (statement SQL eseguibili) permettono di eseguire particolari operazioni SQL e manipolarne il risultato 158 Statement eseguibili iniziano con #sql e terminano con ; il testo SQL è racchiuso tra {..} può essere inserito ovunque possa essere inserito uno statement Java Due possibilità: statement: #sql {sql operation}; assegnamento: #sql result = {sql operation}; se sql operation ritorna un singolo risultato: result è una variabile semplice se sql operation restituisce un insieme di tuple: result deve essere un iterator (si veda oltre) SQLJ - esempio di statement SQLJ - espressioni Java #sql { INSERT INTO emp (ename, sal) VALUES ( Joe, 43000) }; #sql { DECLARE n NUMBER; BEGIN n := 1; END }; WHILE n <= 100 LOOP INSERT INTO emp (empno) VALUES(000 + n); n := n + 1; END LOOP; Esistono tre tipi di espressioni Java che possono essere utilizzate nel codice SQLJ: espressioni host: permettono di passare argomenti tra il codice Java e le operazioni SQLJ espressioni context: specificano il contesto nel quale deve essere eseguito un certo statement (non le vediamo) espressioni result: variabile di output per il risultato di una query o di una chiamata di funzione SQLJ - Espressioni host SQLJ: espressioni host Ogni espressione Java può essere utilizzata come espressione host vengono precedute da : e opzionalmente seguite dal modo di comunicazione (IN, OUT, INOUT) default: OUT se l espressione rappresenta un risultato altrimenti IN Esempi: :hostvar :INOUT hostvar : IN (hostvar1 + hostvar) Le espressioni host possono essere usate in istruzioni SQL in accordo a quanto segue: nella clausola INTO del comando di SELECT (in questo caso le variabili conterranno il risultato della query) nella clausola SELECT nella clausola WHERE dei comandi di SELECT, UPDATE, DELETE (in questo caso le espressioni rappresentano costanti da confrontare con gli attributi delle tuple) nella clausola SET del comando di UPDATE (in questo caso le espressioni rappresentano i valori da assegnare alle tuple modificate) nella clausola VALUES del comando di INSERT (in questo caso le espressioni rappresentano i valori da assegnare alle nuove tuple) nelle espressioni aritmetiche, di stringa e temporali
28 SQLJ - Espressioni host: esempi SQLJ - Espressioni host: esempi String empname = "SMITH"; double salary = ;... #sql { UPDATE emp SET sal = :salary WHERE ename = :empname }; String empname;... #sql { SELECT ename INTO :empname FROM emp WHERE empno = 8959 }; equivalente a: equivalente a: #sql { UPDATE emp SET sal = :IN salary WHERE ename = :IN empname }; #sql { SELECT ename INTO :OUT empname FROM emp WHERE empno = 8959 }; SQLJ - Espressioni host: esempi SQLJ - Espressioni host: esempi float balance = ; float minpmtratio = 0.05;... #sql { UPDATE creditacct SET minpayment = :(balance * minpmtratio) WHERE acctnum = }; String empname = "SMITH"; double raise = 0.1;... #sql {UPDATE emp SET sal = :(getnewsal(raise, empname)) WHERE ename = :empname}; equivalente a #sql { UPDATE creditacct SET minpayment = :IN (balance * minpmtratio) WHERE acctnum = }; SQLJ - Analisi del risultato SQLJ - Analisi: una singola tupla É necessario distinguere tra query che restituiscono solo una tupla e query che ne restituiscono un insieme Ogni campo del risultato della query viene inserito in una variabile host SELECT expr1, exprn INTO :host1,..,:hostn FROM T1,,Tn WHERE cond le espressioni host possono anche comparire in expr1,,exprn
29 SQLJ - Analisi: una singola tupla SQLJ - Analisi: più tuple String empname; #sql { SELECT ename INTO :enpname FROM emp WHERE empno=8959 }; String empname; Date hdate; #sql { SELECT ename, hiredate INTO :empname, :hdate FROM emp WHERE empno=8959 }; #sql { SELECT sal + :raise INTO :newsal FROM emp WHERE empno=8959 }; Se la query restituisce un insieme di tuple, le stesse possono essere analizzate utilizzando un iterator l iterator corrisponde al concetto di cursore ma è anche tipato si specifica il tipo delle tuple sulle quali deve essere utilizzato un iterator è un istanza di una classe iterator che deve essere definita dall applicazione, specificando la struttura delle tuple che dovranno essere analizzate (tipo dell iterator) SQLJ - Analisi: più tuple SQLJ - Passi generali per l utilizzo di un iterator Dichiarazione iterator: #sql <modifiers> iterator <iterator_name> (type declarations) modifiers: public, static, ecc. Due tipi di iterator: iterator nominali: #sql public iterator ByPos (String, int); iterator posizionali: #sql public iterator ByName (int year, String name); quando i dati SQL vengono inseriti in un iterator, i tipi SQL vengono convertiti nei corrispondenti tipi Java specificati nella dichiarazione dell iterator Dichiaro l iterator class dichiaro una variable come istanza dell iterator class popolo la variabile iterator con il risultato di una query SQL, usando uno statement SELECT accedo il risultato SQLJ - iterator nominali SQLJ - iterator posizionali Dichiarazione: #sql iterator SalNamedIter (int empno, String ename, float raise); Dichiarazione: #sql iterator SalNamedIter (int, String, float); 173 Codice class MyClass { void func() throws SQLException { SalNamedIter niter = null; #sql niter = { SELECT ename, empno, raise FROM empsal };... process niter... } } 174 Codice class MyClass { void func() throws SQLException { SalNamedIter piter = null; #sql piter = { SELECT ename, empno, raise FROM empsal };... process piter... } } 9
30 SQLJ - dichiarazioni: differenze SQLJ - Accesso nominale La notazione nominale è più flessibile l ordine con cui vengono selezionati gli elementi nella clausola SELECT è ininfluente in quanto l assegnazione ai campi dell iterator viene fatta tramite il nome accesso più semplice la notazione posizionale richiede maggiore attenzione l ordine con cui vengono selezionati gli elementi nella clausola SELECT deve corrispondente all ordine con cui i campi corrispondenti sono stati dichiarati nell iterator class accesso meno conciso Per gli iterator nominali è sufficiente usare il metodo next(), predefinito per gli iterator tale metodo permette di muoversi dalla tupla correntemente analizzata alla successiva next() restituisce true se la tupla esiste, false altrimenti ogni iterator con campi c1,,cn supporta i metodi c1(),,cn() per recuperare il valore associato ai campi c1,,cn della tupla correntemente considerata SQLJ - Accesso nominale: esempio SQLJ - Accesso posizionale // Declare the iterator variable ProjIter projsiter = null; // Instantiate and populate iterator; order of SELECT doesn t matter #sql projsiter = { SELECT start_date + duration AS deadline, projname, id FROM projects WHERE start_date + duration >= sysdate }; // Process the results while (projsiter.next()) { System.out.println("Project name is " + projsiter.projname()); System.out.println("Project ID is " + projsiter.id()); System.out.println("Project deadline is " + projsiter.deadline()); } // Close the iterator projsiter.close(); Per gli iterator posizionali, è necessario utilizzare l istruzione fetch per posizionarsi sulla tupla da analizzare e memorizzare i valori associati ai campi della tupla in variabili Java il metodo endfetch() restituisce vero quando sono state analizzate tutte le tuple SQLJ - Accesso posizionale: esempio SQLJ - Accesso posizionale: esempio // Declare and initialize host variables int empnum=0; String empname=null; float salary=0.0f; // Declare an iterator instance EmpIter empsiter; #sql empsiter = { SELECT ename, empno, sal FROM emp }; while (true) { #sql { FETCH :empsiter INTO :empnum, :empname, :salary }; if (empsiter.endfetch()) break; // This test must be AFTER fetch, // but before results are processed. System.out.println("Name is " + empname); System.out.println("Employee number is " + empnum); System.out.println("Salary is " + salary); } // Close the iterator empsiter.close();
31 SQLJ - Procedure e funzioni SQLJ - Esempio É possibile richiamare procedure attraverso l istruzione: #sql {CALL nome_proc(parametri)}; é possibile richiamare funzioni attraverso l istruzione: #sql result = {VALUES nome_proc(parametri)}; // Import SQLJ classes: import sqlj.runtime.*; import sqlj.runtime.ref.*; import oracle.sqlj.runtime.*; // Import standard java.sql package: import java.sql.*; SQLJ - Esempio (continua) SQLJ - Esempio (continua) 183 // Declare a SQLJ iterator. // Use object types (Integer, Float) for mgr, sal, And comm rather // than primitive types to allow for possible null selection. #sql iterator EmpRecs( int empno, // This column cannot be null, so int is OK. // (If null is possible, Integer is required.) String ename, String job, Integer mgr, Date hiredate, Float sal, Float comm, int deptno); 184 // This is the application class. public class EmpDemo1App { public EmpDemo1App() throws SQLException { Class.forName ("oracle.jdbc.oracledriver"); Connection ARS; ARS =DriverManager.getConnection(ARS_URL,"whitney", "secret"); } public static void main(string[] args) { try { EmpDemo1App app = new EmpDemo1App(); app.runexample();} catch( SQLException exception ) { System.err.println( "Error running the example: " + exception );}} finally {try { Oracle.close(); } catch(sqlexception ex) {...}} SQLJ - Esempio (continua) SQLJ - Esempio (continua) void runexample() throws SQLException { System.out.println("\nRunning the example.\n" ); // The query creates a new instance of the iterator and stores it in // the variable employees of type EmpRecs. SQLJ translator has // automatically declared the iterator so that it has methods for // accessing the rows and columns of the result set. EmpRecs employees; #sql employees = { SELECT empno, ename, job, mgr, hiredate, sal, comm, deptno FROM emp }; // Print the result using the iterator. while (employees.next()) { System.out.println( "Name: " + employees.ename() ); System.out.println( "EMPNO: " + employees.empno() ); System.out.println( "Job: " + employees.job() ); System.out.println( "Manager: " + employees.mgr() ); System.out.println( "Date hired: " + employees.hiredate() ); System.out.println( "Salary: " + employees.sal() ); System.out.println( "Commission: " + employees.comm() ); System.out.println( "Department: " + employees.deptno() ); System.out.println();} // You must close the iterator when it s no longer needed. employees.close() ;}}
32 SQLJ - SQL dinamico SQLJ - Part 1 Gli statement eseguibili SQLJ permettono di specificare solo SQL statico è tuttavia possibile utilizzare SQLJ e JDBC nella stessa applicazione SQL dinamico è quindi supportato in SQLJ solo tramite JDBC Possibilità di usare metodi Java statici come procedure e funzioni SQL vantaggio: possibilità di usare direttamente librerie Java esistenti il corpo delle procedure e funzioni contiene computazioni Java e può usare JDBC e/o SQLJ per accedere DBMSto access SQL 187 SQLJ - Part1: esempio SQLJ - Part 1: esempio public class Routines1 { //The region method //An Integer method that will be called as a function public static Integer region(string s) throws SQLException { if (s == "MN" s == "VT" s == "NH" ) return 1; else if (s == "FL" s == "GA" s == "AL" ) return ; else if (s == "CA" s == "AZ" s == "NV") return 3; else return 4; } //The correctstates method //A void method that will be called as a stored procedure public static void correctstates (String oldspelling, String newspelling) throws SQLException { Connection conn = DriverManager.getConnection ("JDBC:DEFAULT:CONNECTION"); PreparedStatement stmt = conn.preparestatement ("UPDATE emps SET state =? WHERE state =?"); stmt.setstring(1, newspelling); stmt.setstring(, oldspelling); stmt.executeupdate(); return; } } 190 Associazione nome SQL alla funzione/procedura create procedure correct_states(old char(0), new char(0)) modifies sql data external name 'routines1_jar:routines1.correctstates' language java parameter style java; create function region_of(state char(0)) returns integer no sql external name 'routines1_jar:routines1.region' language java parameter style java; uso delle funzioni/procedure in statement SQL select name, region_of(state) as region from emps where region_of(state) = 3 call correct_states ('CAL', 'CA'); SQLJ Part : classi Java come tipi SQL Possibilità di usare classi Java come tipi di dato SQL per: definire il tipo delle tabelle SQL e delle viste definire il tipo dei parametri di procedure/funzioni SQL 3
Accesso a Database con JDBC
1 Sommario Accesso a Database con JDBC Introduzione architettura generale di riferimento flusso tipico delle applicazioni ODBC/JDBC ODBC architettura il flusso generale di un applicazione ODBC JDBC architettura
SQL da programma. Il problema
1 Il problema Come abbiamo visto, SQL permette in modo dichiarativo di accedere i dati memorizzati in una base di dati il suo potere espressivo è però limitato questo significa che non tutte le elaborazioni
JDBC Driver Manager. JDBC Architettura generale. JDBC - Tipi di dato. JDBC - Flusso applicativo. JDBC - Tipi di dato. ODBC Driver. Livello di gestione
Interfacce DBMS in breve Corso di BD1 Ripasso comandi applicazione JDBC Manipolazione estensioni OR in JDBC Interfacce per DBMS Problema: Far accedere un applicazione ad una base di dati Soluzione: Librerie
Come trattare il risultato di un comando SQL (relazioni) che
USO DI SQL DA PROGRAMMI: PROBLEMI 1 Come collegarsi alla BD Come trattare gli operatori SQL Come trattare il risultato di un comando SQL (relazioni) che Come scambiare informazioni sull esito delle operazioni.
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
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
Oracle PL/SQL. Motivazioni
Oracle PLSQL Motivazioni Supponiamo che nella gestione del database Azienda ci venga chiesto di apportare le modifiche necessarie a far sì che ad ogni impiegato possa essere assegnato, alla fine di ogni
JDBC di base. Le classi/interfacce principali di JDBC
JDBC di base Java Database Connectivity è il package Java per l accesso a database relazionali il package contiene interfacce e classi astratte completa indipendenza del codice dal tipo di database o di
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
JDBC per l accesso Java a DB. Tito Flagella [email protected]
JDBC per l accesso Java a DB Tito Flagella [email protected] JDBC fornisce una libreria standard per l accesso a database relazionali Non è un acronimo ufficiale ma è comunemente interpretato come Java DataBase
JDBC: Introduzione. Java Database Connectivity (JDBC): parte 1. Schema dei legami tra le classi principali. Principali classi/interfacce di JDBC
JDBC: Introduzione Java Database Connectivity (JDBC): parte 1 Gianluca Moro DEIS - Università di Bologna [email protected] Java Database Connectivity è il package Java per l accesso a database relazionali
Esercitazione su JDBC
Esercitazione su JDBC Basi di Dati L Ingegneria dei Processi Gestionali (Ilaria Bartolini - Roberto Cabras) come usare SQL (1) Le istruzioni SQL possono essere eseguite interattivamente Ese JDBC 2 come
Non si deve fare ALCUN riferimento alla parte specifica di JDBC.
Un applicazione per la quale sia fondamentale l indipendenza dal Database può essere scritta in Java usando le specifiche. (Package java.sql) Non devono essere usate chiamate specifiche del database: Si
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
Architettura MVC-2: i JavaBeans
Siti web centrati sui dati Architettura MVC-2: i JavaBeans Alberto Belussi anno accademico 2008/2009 Limiti dell approccio SEVLET UNICA La servlet svolge tre tipi di funzioni distinte: Interazione con
CORSO DI ALGORITMI E PROGRAMMAZIONE. JDBC Java DataBase Connectivity
CORSO DI ALGORITMI E PROGRAMMAZIONE JDBC Java DataBase Connectivity Anno Accademico 2002-2003 Accesso remoto al DB Istruzioni SQL Rete DataBase Utente Host client Server di DataBase Host server Accesso
Sviluppo Applicazioni Mobile Lezione 12 JDBC. Dr. Paolo Casoto, Ph.D - 2012
+ Sviluppo Applicazioni Mobile Lezione 12 JDBC + Cosa vediamo nella lezione di oggi Oggi analizzeremo insieme una specifica tecnologia Java per l accesso e la manipolazione di basi di dati relazionali
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.
Java: la libreria delle classi
Java: la libreria delle classi Applet anatomia di un applet cenni di html La libreria JDBC per l accesso ai database il package java.sql 213 Applet Un applet è una applicazione Java che ha una forma particolare
Lezione 9. Applicazioni tradizionali
Lezione 9 Applicazioni tradizionali Pag.1 Sommario Concetti trattati in questa lezione: SQL nel codice applicativo Cursori API native ODBC Pag.2 SQL nel codice applicativo I comandi SQL possono essere
Sviluppo di applicazioni per basi di dati
Sviluppo di applicazioni per basi di dati 1 Sviluppo di applicazioni per basi di dati Quattro parti: Gestione dati Business rules (vincoli di integrità e dati derivati) Logica applicativa Interfaccia utente
Scheda 15 Accedere ai DataBase con JDBC
Scheda 15 Accedere ai DataBase con JDBC G IOVANNI PULITI Panoramica: che cosa è JDBC La API JDBC, introdotta per la prima volta con il JDK 1.0, è una API che permette di accedere a database relazionali
Corso di Informatica Modulo T3 B2 - Database in rete
Corso di Informatica Modulo T3 B2 - Database in rete 1 Prerequisiti Programmazione web Applicazione web Modello OSI Architettura client/server Conoscenze generali sui database Tecnologia ADO in Visual
I file di dati. Unità didattica D1 1
I file di dati Unità didattica D1 1 1) I file sequenziali Utili per la memorizzazione di informazioni testuali Si tratta di strutture organizzate per righe e non per record Non sono adatte per grandi quantità
SQL e applicazioni. Capitolo 8. SQL e linguaggi di programmazione. Applicazioni ed SQL: architettura. Una difficoltà importante.
SQL e applicazioni Capitolo 8 Applicazioni tradizionali In applicazioni complesse, l utente non vuole eseguire comandi SQL, ma programmi, con poche scelte SQL non basta, sono necessarie altre funzionalità,
Laboratorio di reti II: Gestione di database lato server
Laboratorio di reti II: Gestione di database lato server Stefano Brocchi [email protected] 23 marzo, 2009 Stefano Brocchi Laboratorio di reti II: Database 23 marzo, 2009 1 / 32 Uso di database lato
PROVA FINALE Ingegneria del software
PROVA FINALE Ingegneria del software Ing. Jody Marca [email protected] Laboratorio N 4 Cos è JDBC 2 JDBC significa Java Database Connectivity Standard definito da Sun MicroSystems per connettere programmi
Capitoli 8 e 9. SQL embedded. Applicazioni tradizionali Applicazioni Internet. Sistemi di basi di dati Raghu Ramakrishnan, Johannes Gehrke
Capitoli 8 e 9 Applicazioni tradizionali Applicazioni Internet SQL embedded SQL nel codice applicativo I comandi SQL possono essere chiamati dall interno di un programma in un linguaggio ospite (ad esempio
Database e reti. Piero Gallo Pasquale Sirsi
Database e reti Piero Gallo Pasquale Sirsi Approcci per l interfacciamento Il nostro obiettivo è, ora, quello di individuare i possibili approcci per integrare una base di dati gestita da un in un ambiente
Introduzione. 8- Programmazione di una base di dati attraverso JDBC ESEMPIO
8- Programmazione di una base di dati attraverso JDBC Introduzione ai differenti approcci - JDBC: Architettura e Programmazione Introduzione Nella pratica gli utenti finali accedono al contenuto di una
Basi di dati. Il Linguaggio SQL. K. Donno - Il Linguaggio SQL
Basi di dati Il Linguaggio SQL Data Definition Language (DDL) Data Definition Language: insieme di istruzioni utilizzate per modificare la struttura della base di dati Ne fanno parte le istruzioni di inserimento,
Insegnamento di Informatica CdS Scienze Giuridiche A.A. 2006/7. Il trattamento dei dati
Insegnamento di Informatica CdS Scienze Giuridiche A.A. 2006/7 Il trattamento dei dati database: il linguaggio SQL seconda parte Prof. Valle D.ssa Folgieri Lez9 15.11.06 Trattamento dati. Database: il
LA REALIZZAZIONE DI APPLICAZIONI ALCUNE ARCHITETTURE
LA REALIZZAZIONE DI APPLICAZIONI ALCUNE ARCHITETTURE Quattro parti: Gestione dati Client-Server Logica + interfaccia Logica + interfaccia Business rules Sistema di comunicazione Logica applicativa DBMS:
Esercitazione 4 JDBC
JDBC Obiettivi dell esercitazione Familiarizzare con l'organizzazione dell'ambiente di lavoro per la realizzazione di applicazioni Java Utilizzare i costrutti di base della libreria JDBC per 1. la gestione
Corso sul linguaggio SQL
Corso sul linguaggio SQL Modulo L2B (SQL) 2.1 Comandi sui database 1 Prerequisiti Introduzione ai DB Linguaggi per database Tipi fondamentali di dati 2 1 Introduzione In questa Unità introduciamo il linguaggio
Programmazione Java Avanzata Spring - JDBC
Programmazione Java Avanzata Spring - JDBC Ing. Gianluca Caminiti Riferimenti Spring http://www.springsource.org/ (scaricate il reference) Beginning Spring 2 - From Novice to Professional. APress. 2008
LA REALIZZAZIONE DI APPLICAZIONI. Quattro parti: Gestione dati. Business rules. Logica applicativa. Interfaccia utente. Molte possibili architetture
LA REALIZZAZIONE DI APPLICAZIONI Quattro parti: Gestione dati Business rules Logica applicativa Interfaccia utente Molte possibili architetture L approccio tradizionale: uso di un linguaggio PLSQL 1.1
La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni
La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Autore: Prof. Agostino Sorbara ITIS "M. M.
Dominio applicativo. Progettazione. v SQL incluso in codice applicativo v Embedded SQL v Cursori v Dynamic SQL v JDBC v Stored procedures
Dominio applicativo (Capitolo 6) v SQL incluso in codice applicativo v Embedded SQL v Cursori v Dynamic SQL v JDBC v Stored procedures Basi di dati 1 Docente Claudia Amari 1 Progettazione PROGETTAZIONE
12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)
12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica,
Volumi di riferimento
Simulazione seconda prova Esame di Stato Gestione di un centro agroalimentare all ingrosso Parte prima) Un nuovo centro agroalimentare all'ingrosso intende realizzare una base di dati per l'attività di
Al giorno d oggi, i sistemi per la gestione di database
Introduzione Al giorno d oggi, i sistemi per la gestione di database implementano un linguaggio standard chiamato SQL (Structured Query Language). Fra le altre cose, il linguaggio SQL consente di prelevare,
19. LA PROGRAMMAZIONE LATO SERVER
19. LA PROGRAMMAZIONE LATO SERVER Introduciamo uno pseudocodice lato server che chiameremo Pserv che utilizzeremo come al solito per introdurre le problematiche da affrontare, indipendentemente dagli specifici
PL/SQL PL/SQL. Ordine degli elementi dei triggers di Oracle. Differenze nei triggers. Versione dei trigger e PSM di Oracle
Versione dei trigger e PSM di Oracle Lucidi derivati da quelli di Jeffrey D Ullman Oracle usa una variante di SQL/PSM che si chiama non consente solo di creare e memorizzare procedure e funzioni, ma puo
Il linguaggio SQL: trigger. Versione elettronica: 04.7.SQL.trigger.pdf
Il linguaggio SQL: trigger Sistemi Informativi T Versione elettronica: 04.7.SQL.trigger.pdf DBMS attivi Un DBMS si dice attivoquando dispone di un sottosistema integrato per definire e gestire regole I
Il linguaggio SQL. è di fatto lo standard tra i linguaggi per la gestione di data base relazionali.
(Structured Query Language) : Il linguaggio è di fatto lo standard tra i linguaggi per la gestione di data base relazionali. prima versione IBM alla fine degli anni '70 per un prototipo di ricerca (System
DBMS ED APPLICAZIONI (CAPITOLO 6) SQL incluso in codice applicativo Embedded SQL Cursori Dynamic SQL JDBC Stored procedures
1 DBMS ED APPLICAZIONI (CAPITOLO 6) SQL incluso in codice applicativo Embedded SQL Cursori Dynamic SQL JDBC Stored procedures Progettazione 2 Dominio Applicativo PROGETTAZIONE CONCETTUALE PROGETTAZIONE
Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:
Tipi primitivi Il linguaggio Java offre alcuni tipi di dato primitivi Una variabile di tipo primitivo può essere utilizzata direttamente. Non è un riferimento e non ha senso tentare di istanziarla mediante
APPENDICE. Procedure in SQL (1)
APPENDICE Procedure in SQL Transazioni in SQL Embedded SQL Remote Procedure Call Appendice 1 Procedure in SQL (1) Standard SQL2 permette di definire procedure, associate a singoli comandi SQL, memorizzate
DBMS (Data Base Management System)
Cos'è un Database I database o banche dati o base dati sono collezioni di dati, tra loro correlati, utilizzati per rappresentare una porzione del mondo reale. Sono strutturati in modo tale da consentire
Nascita di Java. Che cos e Java? Caratteristiche di Java. Java: linguaggio a oggetti
Nascita di Java L uscita di Java, verso la metà degli anni novanta, fu accolta con molto entusiasmo dalla comunità dei programmatori e dei provider di servizi internet perché permetteva agli utenti del
Data Base. Master "Bio Info" Reti e Basi di Dati Lezione 6
Data Base 1 Sommario I concetti fondamentali. Database Relazionale.. Query e SQL MySql, Creazione di un db in MySQL con PHPmyAdmin Creazione database e delle Tabelle Query Inserimento Ricerca Modifica
Laboratorio di Basi di Dati e Web
Laboratorio di Basi di Dati e Web 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
Basi di Dati: Corso di laboratorio
Basi di Dati: Corso di laboratorio Lezione 10 Raffaella Gentilini 1 / 46 Sommario 1 Introduzione: DB e Programmazione 2 3 2 / 46 Approcci alla Programmazione di un DB Meccanismi Disponibili 1 Linguaggi
Introduzione alla programmazione in C
Introduzione alla programmazione in C Testi Consigliati: A. Kelley & I. Pohl C didattica e programmazione B.W. Kernighan & D. M. Ritchie Linguaggio C P. Tosoratti Introduzione all informatica Materiale
Esercitazione query in SQL L esercitazione viene effettuata sul database viaggi e vacanze che prevede il seguente modello E/R:
Esercitazione query in SQL L esercitazione viene effettuata sul database viaggi e vacanze che prevede il seguente modello E/R: Si consiglia di creare il data base, inserire i dati nelle tabelle, provare
Una metodologia di progettazione di applicazioni web centrate sui dati
Una metodologia di progettazione di applicazioni web centrate sui dati 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 1 / 2 0 1 2 Progettazione logica di un sito web centrato sui dati Si
Triggers. Basi dati attive. Trigger. Indipendenza della conoscenza
Basi dati attive Triggers Antonella Poggi Domenico Lembo Dipartimento di informatica e Sistemistica SAPIENZA Università di Roma Progetto di Applicazioni Software Anno accademico 2009-2010 Una base di dati
Riccardo Dutto, Paolo Garza Politecnico di Torino. Riccardo Dutto, Paolo Garza Politecnico di Torino
Integration Services Project SQL Server 2005 Integration Services Permette di gestire tutti i processi di ETL Basato sui progetti di Business Intelligence di tipo Integration services Project SQL Server
User Tools: DataBase Manager
Spazio di lavoro Per usare T-SQL Assistant selezionare il link Simple Query e spostare a piacere la piccola finestra dove un menu a tendina mostra i diversi comandi SQL selezionabili, il pulsante Preview
Java: Compilatore e Interprete
Java: Compilatore e Interprete Java Virtual Machine Il bytecode non è Linguaggio Macchina. Per diventarlo, deve subire un ulteriore trasformazione che viene operata dall interprete Java in modalità JIT
SQL nei linguaggi di programmazione
SQL nei linguaggi di programmazione Atzeni, Ceri, Paraboschi, Torlone Basi Di Dati Modelli e Linguaggi di Interrogazione, McGraw-Hill Italia, Capitolo 6 SQL in Linguaggi di Programmazione L uso diretto
DDL, VINCOLI D INTEGRITÁ, AGGIORNAMENTI E VISTE. SQL è più di un semplice linguaggio di interrogazione
SQL DDL, VINCOLI D INTEGRITÁ, AGGIORNAMENTI E VISTE SQL è più di un semplice linguaggio di interrogazione! Linguaggio di definizione dati (Data-definition language, DDL):! Crea/distrugge/modifica relazioni
Dispensa di database Access
Dispensa di database Access Indice: Database come tabelle; fogli di lavoro e tabelle...2 Database con più tabelle; relazioni tra tabelle...2 Motore di database, complessità di un database; concetto di
Basi di dati (6) Docente: Andrea Bulgarelli. Università di Modena e Reggio Emilia. [email protected] Argomento: T-SQL (1.
Università di Modena e Reggio Emilia Basi di dati (6) Docente: [email protected] Argomento: T-SQL (1.0) 1 Panoramica T-SQL Variabili Controllo di flusso Trattamento errori Print Operatori e funzioni
MDAC. Attualmente la versione disponibile di MDAC è la 2.8 ma faremo riferimento alla 2.6. ADO Active Data Objects ADO OLE DB ODBC
MDAC MDAC è l acronimo di Microsoft Data Access Component e fa parte della tecnologia Microsoft denominata Universal Data Access (UDA). Mette a disposizione una serie di componenti per l accesso a svariate
Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori
Gli array Array e puntatori Laboratorio di Informatica I un array è un insieme di elementi (valori) avente le seguenti caratteristiche: - un array è ordinato: agli elementi dell array è assegnato un ordine
Basi di dati e Web (Moduli: Laboratorio e Siti Web centrati sui Dati) Prova scritta del 14 luglio 2008
Basi di dati e Web (Moduli: Laboratorio e Siti Web centrati sui Dati) Prova scritta del 14 luglio 2008 Avvertenze: e severamente vietato consultare libri e appunti; chiunque verrà trovato in possesso di
SQL SQL. Definizione dei dati. Domini. Esistono 6 domini elementari:
SQL SQL (pronunciato anche come l inglese sequel: acronimo di Structured Query Language (linguaggio di interrogazione strutturato Linguaggio completo che presenta anche proprietà di: DDL (Data Definition
PROGRAMMA CORSO Analista Programmatore JAVA - ORACLE
PROGRAMMA CORSO Analista Programmatore JAVA - ORACLE 1. JAVA 1.1 Introduzione a Java Introduzione Cosa è Java 1.2 Sintassi e programmazione strutturata variabili e metodi tipi di dati, array operatori
SQL. Alcune note sulla definizione dei dati
SQL Alcune note sulla definizione dei dati Domini Domini elementari (predefiniti) Domini definiti dall'utente (riutilizzabili, possono servire per specificare vincoli di dominio propri di una certa applicazione)
Access. P a r t e p r i m a
Access P a r t e p r i m a 1 Esempio di gestione di database con MS Access 2 Cosa è Access? Access e un DBMS che permette di progettare e utilizzare DB relazionali Un DB Access e basato sui concetti di
Lezione 8. Metadati, Viste e Trigger
Lezione 8 Metadati, Viste e Trigger Pag.1 Metadati e catalogo di sistema I metadati sono dati a proposito dei dati (quali tabelle esistono?, quali campi contengono?, quante tuple contengono?, ci sono vincoli
Stored Procedures. Massimo Mecella Dipartimento di Ingegneria informatica automatica e gestionale Antonio Ruberti Sapienza Università di Roma
Stored Procedures Massimo Mecella Dipartimento di Ingegneria informatica automatica e gestionale Antonio Ruberti Sapienza Università di Roma Progetto di Applicazioni Software Stored Procedure e User Defined
Il DBMS Oracle. Express Edition. Donatella Gubiani e Angelo Montanari
Gubiani & Montanari Il DBMS Oracle 1 Il DBMS Oracle Express Edition Donatella Gubiani e Angelo Montanari Il DBMS Oracle Il DBMS Oracle Oracle 10g Express Edition Il DBMS Oracle (nelle sue versioni più
Realizzazione di una classe con un associazione
Realizzazione di una classe con un associazione Nel realizzare una classe che è coinvolta in un associazione, ci dobbiamo chiedere se la classe ha responsabilità sull associazione. Diciamo che una classe
Modulo 4: Ereditarietà, interfacce e clonazione
Modulo 4: Ereditarietà, interfacce e clonazione Argomenti Trattati: Classi, Superclassi e Sottoclassi Ereditarietà Ereditarietà ed Attributi Privati Override super Ereditarietà e Costruttori Polimorfismo
Introduzione ai Sistemi di Gestione di Basi di Dati XML
Introduzione ai Sistemi di Gestione di Basi di Dati Introduzione ai Sistemi di Gestione di Basi di Dati Obiettivi Memorizzare ed estrarre documenti da RDBMS. Trasformare dati tabellari in dati e viceversa.
Arduino: Programmazione
Programmazione formalmente ispirata al linguaggio C da cui deriva. I programmi in ARDUINO sono chiamati Sketch. Un programma è una serie di istruzioni che vengono lette dall alto verso il basso e convertite
Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione
Automatizzare i compiti ripetitivi I file batch Anno accademico 2000-01 1 Spesso capita di dover eseguire ripetutatmente una data sequenza di comandi Introdurli uno a uno da tastiera è un processo lento
JDBC: Java e database.
JDBC: Java e database. Introduzione all architettura e esempi di utilizzo 1.0 INTRODUZIONE ALL ARCHITETTURA JDBC è (anche se non ufficialmente riconosciuto da Sun) l acronimo per Java DataBase Connectivity.
Oggetti Lezione 3. aspetti generali e definizione di classi I
Programmazione a Oggetti Lezione 3 Il linguaggio Java: aspetti generali e definizione di classi I Sommario Storia e Motivazioni Definizione di Classi Campi e Metodi Istanziazione di oggetti Introduzione
Basi di dati. Il Modello Relazionale dei Dati. K. Donno - Il Modello Relazionale dei Dati
Basi di dati Il Modello Relazionale dei Dati Proposto da E. Codd nel 1970 per favorire l indipendenza dei dati Disponibile come modello logico in DBMS reali nel 1981 (non è facile realizzare l indipendenza
Informatica Generale Andrea Corradini. 19 - Sistemi di Gestione delle Basi di Dati
Informatica Generale Andrea Corradini 19 - Sistemi di Gestione delle Basi di Dati Sommario Concetti base di Basi di Dati Il modello relazionale Relazioni e operazioni su relazioni Il linguaggio SQL Integrità
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 [email protected]
Dati relazionali e XML
Dati relazionali e Introduzione (1) Memorizzazione dei dati Utilizzo dei dati Applicazione DBMS relazionale Applicazione Applicazione 2 Introduzione (2) Memorizzazione dei dati Utilizzo dei dati Applicazione
Struttura di un programma Java
Struttura di un programma Java Un programma in Java è un insieme di dichiarazioni di classi. Una classe non può contenere direttamente delle istruzioni, ma può contenere la dichiarazione di metodi, che
Progettaz. e sviluppo Data Base
Progettaz. e sviluppo Data Base! Progettazione Basi Dati: Metodologie e modelli!modello Entita -Relazione Progettazione Base Dati Introduzione alla Progettazione: Il ciclo di vita di un Sist. Informativo
Database. Si ringrazia Marco Bertini per le slides
Database Si ringrazia Marco Bertini per le slides Obiettivo Concetti base dati e informazioni cos è un database terminologia Modelli organizzativi flat file database relazionali Principi e linee guida
3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo
3 - Variabili Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso di
Lezione V. Aula Multimediale - sabato 29/03/2008
Lezione V Aula Multimediale - sabato 29/03/2008 LAB utilizzo di MS Access Definire gli archivi utilizzando le regole di derivazione e descrivere le caratteristiche di ciascun archivio ASSOCIAZIONE (1:1)
