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



Documenti analoghi
JDBC. Paolo Atzeni. 11 marzo Progettazione di applicazioni, una premessa

SQL e linguaggi di programmazione Applicazioni ed SQL: architettura

JDBC: SQL NEI LINGUAGGI DI PROGRAMMAZIONE

Basi di Dati Esercitazione JDBC. Giugno 2007

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

Basi di dati. SQL nei linguaggi di programmazione

Introduzione JDBC interfaccia java.sql driver caricare i driver

Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, SQL nei linguaggi di programmazione 12/05/2004. SQL e applicazioni

Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, Capitolo 6:

SQL Embedded. Basi di Dati. Prof. Alfredo Cuzzocrea Università degli Studi di Trieste

SQL e linguaggi di programmazione Applicazioni ed SQL: architettura

Non si deve fare ALCUN riferimento alla parte specifica di JDBC.

JDBC. A. Bechini Accesso a DataD con Java

Esercitazione su JDBC

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

CORSO DI ALGORITMI E PROGRAMMAZIONE. JDBC Java DataBase Connectivity

Caricamento della classe driver. Apertura della connessione. DriverManager.getConnection() Creazione di uno statement

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

JDBC versione base. Le classi/interfacce principali di JDBC

Introduzione. 8- Programmazione di una base di dati attraverso JDBC ESEMPIO

JDBC di base. Le classi/interfacce principali di JDBC

Basi di Dati. Esercitazione JDBC 28/05/2007

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

SQL e applicazioni. Capitolo 8. SQL e linguaggi di programmazione. Applicazioni ed SQL: architettura. Una difficoltà importante.

Java: la libreria delle classi

Utilizzando per la connessione al database un driver di Tipo 1:

DBMS ed Applicazioni Motivazioni

Basi di Dati. Esercitazione JDBC. Ing. Paolo Cappellari

Basi di Dati Esercitazione JDBC

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

JDBC. Dispense per il corso di Ingegneria del Web

Esercitazione 4 JDBC

Scheda 15 Accedere ai DataBase con JDBC

Applicazioni tradizionali

Programmazione Java Avanzata Spring - JDBC

Accesso Web a Data Base

Indice. Java. JDBC è l interfaccia di base standard di Java ai database relaionali

Lezione 9. Applicazioni tradizionali

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

Basi di Dati: Corso di laboratorio

Tecnologie di Sviluppo per il Web

Sviluppo di applicazioni per basi di dati

SQL nei linguaggi di programmazione

Corso di Informatica Modulo T3 B2 - Database in rete

JDBC Driver Manager. JDBC Architettura generale. JDBC - Tipi di dato. JDBC - Flusso applicativo. JDBC - Tipi di dato. ODBC Driver. Livello di gestione

Laboratorio di Sistemi Fondamenti di JDBC (parte1) Java. Fondamenti di JDBC

PROVA FINALE Ingegneria del software

Tecnologia e Applicazioni Internet 2011/12

Servlet & JDBC ALBERTO BELUSSI ANNO ACCADEMICO 2009/2010. Servlet: interazione con un DBMS. In Java è possibile interagire con un DBMS attraverso

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

Accesso a Database con JDBC

ESERCITAZIONE: AZIENDA

Architettura MVC-2: i JavaBeans

Servlet & JDBC A L B E R T O B E L U S S I A N N O A C C A D E M I C O / Servlet: interazione con un DBMS

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

Servlet & JDBC. Alberto Belussi. anno accademico 2008/2009

Università degli Studi di Bologna Facoltà di Ingegneria. Tecnologie Web L-A A.A Esercitazione 08 DAO e Hibernate

Servlet & JDBC A L B E R T O B E L U S S I A N N O A C C A D E M I C O /

Funzioni scalari in SQL. Capitolo 5. coalesce. nullif. Altre funzioni scalari. case

JDBC. Marco Tessarotto Programmazione dei Web Server Anno Accademico

Dominio applicativo. Progettazione. v SQL incluso in codice applicativo v Embedded SQL v Cursori v Dynamic SQL v JDBC v Stored procedures

Basi di dati e Web (Moduli: Laboratorio e Siti Web centrati sui Dati) Prova scritta del 14 luglio 2008

Laboratorio di reti II: Gestione di database lato server

JAVA JDBC. Andrea BEI

JDBC: SQL nei linguaggi di programmazione

Programmazione Java Avanzata

DBMS ED APPLICAZIONI (CAPITOLO 6) SQL incluso in codice applicativo Embedded SQL Cursori Dynamic SQL JDBC Stored procedures

Lavorare con JDBC L'impiego di JDBC è semplice, e solitamente si articola attraverso quattro passi:

JDBC: Java e database.

Al giorno d oggi, i sistemi per la gestione di database

Capitoli 8 e 9. SQL embedded. Applicazioni tradizionali Applicazioni Internet. Sistemi di basi di dati Raghu Ramakrishnan, Johannes Gehrke

PROGRAMMA CORSO Analista Programmatore JAVA - ORACLE

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

Visualizzazione ordini in MyShopDB

Telematica II 17. Esercitazione/Laboratorio 6

Data Base. Master "Bio Info" Reti e Basi di Dati Lezione 6

Tecnologie di Sviluppo per il Web

Tale attività non è descritta in questa dispensa

Programmazione delle basi di dati attraverso JDBC

JDBC. Di Michele de Nittis Versione 06/08/2008

Volumi di riferimento

Uso delle basi di dati DBMS. Cos è un database. DataBase. Esempi di database

MDAC. Attualmente la versione disponibile di MDAC è la 2.8 ma faremo riferimento alla 2.6. ADO Active Data Objects ADO OLE DB ODBC

Il linguaggio SQL. è di fatto lo standard tra i linguaggi per la gestione di data base relazionali.

19. LA PROGRAMMAZIONE LATO SERVER

Introduzione a JDBC. si inviano comandi SQL; si recuperano i risultati dei comandi.

Riccardo Dutto, Paolo Garza Politecnico di Torino. Riccardo Dutto, Paolo Garza Politecnico di Torino

JDBC: SQL nei linguaggi di programmazione

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

Integrazione InfiniteCRM - MailUp

Abilità Informatiche A.A. 2010/2011 Lezione 9: Query Maschere Report. Facoltà di Lingue e Letterature Straniere

Il DBMS Oracle. Express Edition. Donatella Gubiani e Angelo Montanari

PHP e Structured Query Language

Esercitazione query in SQL L esercitazione viene effettuata sul database viaggi e vacanze che prevede il seguente modello E/R:

Programmazione Java: JDBC

Linguaggio SQL: costrutti avanzati

Metodi per la Gestione dei Dati (lezioni di laboratorio)

APPENDICE. Procedure in SQL (1)

Corso sul linguaggio SQL

Transcript:

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. Lisi francesca.lisi@uniba.it Orario di ricevimento: giovedì ore 10-12

2 Sommario (VI parte) Procedure memorizzate (o stored procedures) SQL immerso (o embedded SQL) Call Level Interface Riferimenti cap. 8 di Pratt cap. 6, in particolare 6.1, 6.3 e 6.4, di Atzeni et al. cap. 9, in particolare 9.4-9.7 di Elmasri & Navathe Dott.ssa Francesca A. Lisi

Call Level Interface Indica genericamente interfacce che permettono di inviare richieste a DBMS per mezzo di parametri trasmessi a funzioni standard SQL/CLI ( 95 e poi parte di SQL-3) ODBC: implementazione proprietaria di SQL/CLI JDBC: una CLI per il mondo Java Dott.ssa Francesca A. Lisi 3

SQL immerso vs CLI SQL immerso permette precompilazione (e quindi efficienza) uso di SQL completo CLI indipendente dal DBMS permette di accedere a più basi di dati, anche eterogenee Dott.ssa Francesca A. Lisi 4

JDBC Una API (Application Programming Interface) di Java (intuitivamente: una libreria) per l'accesso a basi di dati, in modo indipendente dalla specifica tecnologia JDBC è una interfaccia, realizzata da classi chiamate driver: l'interfaccia è standard, mentre i driver contengono le specificità dei singoli DBMS (o di altre fonti informative) Dott.ssa Francesca A. Lisi 5

I driver JDBC Dott.ssa Francesca A. Lisi 7

Il funzionamento di JDBC, in breve Caricamento del driver Apertura della connessione alla base di dati Richiesta di esecuzione di istruzioni SQL Elaborazione dei risultati delle istruzioni SQL Dott.ssa Francesca A. Lisi 8

Un programma con JDBC import java.sql.*; public class PrimoJDBC { public static void main(string[] arg){ Connection con = null ; try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String url = "jdbc:odbc:corsi"; con = DriverManager.getConnection(url); catch(exception e){ System.out.println("Connessione fallita"); try { Statement query = con.createstatement(); ResultSet result = query.executequery("select * from Corsi"); while (result.next()){ String nomecorso = result.getstring("nomecorso"); System.out.println(nomeCorso); catch (Exception e){ System.out.println("Errore nell'interrogazione"); Dott.ssa Francesca A. Lisi 9

Un altro programma con JDBC (1) import java.lang.*; import java.sql.*; class ProvaSelectJDBC { public static void main(string argv[]) { Connection con = null; try { Class.forName("com.ibm.db2.jcc.DB2Driver"); catch (ClassNotFoundException exclass) { System.err.println("Fallita connessione al database. Errore 1"); try { String url = "jdbc:db2:db04"; con = DriverManager.getConnection(url); catch (SQLException exsql) { System.err.println("Fallita connessione al database. "+ exsql.geterrorcode() + " " + exsql.getsqlstate() + exsql.getmessage() ); Dott.ssa Francesca A. Lisi 10

Un altro programma con JDBC (2) try{ String padre = ""; String figlio = "" ; String padreprec = ""; Statement query = con.createstatement(); String querystring = "SELECT Padre, Figlio FROM Paternita ORDER BY Padre"; ResultSet result = query.executequery(querystring); while (result.next()){ padre = result.getstring("padre"); figlio = result.getstring("figlio"); if (!(padre.equals(padreprec))){ System.out.println("Padre: " + padre + "\n Figli: " + figlio); else System.out.println( " " + figlio ) ; padreprec = padre ; catch (SQLException exsql) { System.err.println("Errore nell'interrogazione. "+ exsql.geterrorcode() + " " + exsql.getmessage() ); Dott.ssa Francesca A. Lisi 11

Preliminari L'interfaccia JDBC è contenuta nel package java.sql import java.sql.*; Il driver deve essere caricato (trascuriamo i dettagli) Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connessione: oggetto di tipo Connection che costituisce un collegamento attivo fra programma Java e base di dati; viene creato da String url = "jdbc:odbc:corsi"; con = DriverManager.getConnection(url); Dott.ssa Francesca A. Lisi 12

Preliminari dei preliminari: origine dati ODBC Per utilizzare un driver JDBC-ODBC, la base di dati (o altro) deve essere definita come "origine dati ODBC" In Windows (con YYY, avendo già definito la base di dati xxx.yyy da collegare): Pannello di controllo Strumenti di amministrazione Opzione "Origini dati ODBC" Bottone "Aggiungi" ("Add") Nella finestra di dialogo "Crea Nuova origine dati" selezionare YYY Driver" e nella successiva selezionare il file xxx.yyy attribuirgli un nome (che sarà usato da ODBC e quindi da JDBC) Dott.ssa Francesca A. Lisi 13

Esecuzione dell'interrogazione ed elaborazione del risultato Esecuzione dell'interrogazione Statement query = con.createstatement(); ResultSet result = query.executequery("select * from Corsi"); Elaborazione del risultato while (result.next()){ String nomecorso = result.getstring("nomecorso"); System.out.println(nomeCorso); Dott.ssa Francesca A. Lisi 14

La classe Statement Un'interfaccia i cui oggetti consentono di inviare, tramite una connessione, istruzioni SQL e di ricevere i risultati forniti Un oggetto di tipo Statement viene creato con il metodo createstatement di Connection I metodi dell'interfaccia Statement: executeupdate per specificare aggiornamenti o istruzioni DDL executequery per specificare interrogazioni e ottenere un risultato execute per specificare istruzioni non note a priori executebatch per specificare sequenze di istruzioni Vediamo executequery Dott.ssa Francesca A. Lisi 15

La classe ResultSet I risultati delle interrogazioni sono forniti in oggetti di tipo ResultSet (interfaccia definita in java.sql) In sostanza, un result set è una sequenza di ennuple su cui si può "navigare" (in avanti, indietro e anche con accesso diretto) e dalla cui ennupla "corrente" si possono estrarre i valori degli attributi Metodi principali: next() getxxx(posizione) es: getstring(3); getint(2) getxxx(nomeattributo) es: getstring("cognome"); getint("codice") Dott.ssa Francesca A. Lisi 16

Specializzazioni di Statement PreparedStatement permette di utilizzare codice SQL già compilato, eventualmente parametrizzato rispetto alle costanti in generale più efficiente di Statement permette di distinguere più facilmente istruzioni e costanti (e apici nelle costanti) i metodi setxxx(, )permettono di definire i parametri CallableStatement permette di utilizzare "stored procedure", come quelle di Oracle PL/SQL o anche le query memorizzate (e parametriche) di Access Dott.ssa Francesca A. Lisi 17

import java.sql.*; import javax.swing.joptionpane; public class SecondoJDBCprep { public static void main(string[] arg){ try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String url = "jdbc:odbc:corsi"; Connection con = DriverManager.getConnection(url); PreparedStatement pquery = con.preparestatement( "select * from Corsi where NomeCorso LIKE?"); String param = JOptionPane.showInputDialog( "Nome corso (anche parziale)?"); param = "%" + param + "%"; pquery.setstring(1,param); ResultSet result = pquery.executequery(); while (result.next()){ String nomecorso = result.getstring("nomecorso"); System.out.println(nomeCorso); catch (Exception e){system.out.println("errore"); Dott.ssa Francesca A. Lisi 18

import java.sql.*; import javax.swing.joptionpane; public class TerzoJDBCcall { public static void main(string[] arg){ try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String url = "jdbc:odbc:corsi"; Connection con = DriverManager.getConnection(url); CallableStatement pquery = con.preparecall("{call querycorso(?)"); String param = JOptionPane.showInputDialog( "Nome corso (anche parziale)?"); param = "*" + param + "*"; pquery.setstring(1,param); ResultSet result = pquery.executequery(); while (result.next()){ String nomecorso = result.getstring("nomecorso"); System.out.println(nomeCorso); catch (Exception e){system.out.println("errore"); Dott.ssa Francesca A. Lisi 19

Molte, fra cui Altre funzionalità username e password aggiornamento dei ResultSet richiesta di metadati gestione di transazioni Dott.ssa Francesca A. Lisi 20

Transazioni in JDBC Scelta della modalità delle transazioni: un metodo definito nell'interfaccia Connection: setautocommit(boolean autocommit) con.setautocommit(true) (default) "autocommit": ogni operazione è una transazione con.setautocommit(false) gestione delle transazioni da programma con.commit() con.rollback() non c è begin transaction Dott.ssa Francesca A. Lisi 21

22 Esercitazione con MySQL Driver da utilizzare mysql-connector-java-5.1.7-bin.jar Caricamento del driver: new com.mysql.jdbc.driver() Creazione di una connessione al database con credenziali di accesso appropriate: connessione = DriverManager.getConnection( "jdbc:mysql://localhost/db_name", username, pwd); Dott.ssa Francesca A. Lisi

23 Esercitazione con MySQL Esercizi 1-3 sul database Prodotti Premiere da cap. 8, pag. 188-189 di Pratt (mediante JDBC); Esercizi 6.5-6.13 a pagg. 202-204 di Atzeni et al. (mediante JDBC). Dott.ssa Francesca A. Lisi