際際滷

際際滷Share a Scribd company logo
Tutorial JSP database-seconda parte Silvano Natalizi Apr 11, 2010
Obiettivo della lezione Lobiettivo di questa lezione 竪 quello di insegnare  come si programma una java server page per gestire  una tabella relazionale  con i dati digitati in una form di una pagina HTML.
CRUD CRUD Create Read Update Delete Dovete imparare ad usare i comandi SQL, allinterno delle opportune istruzioni java, per inserire una nuova riga di una tabella (Create), per leggere dalla tabella (Read), per modificare i dati di una tabella (Update), per eliminare le righe di una tabella (Delete)
Risolviamo il problema per approssimazioni successive Nella prima fase del lavoro pensiamo solo a far girare tutto il programma in maniera corretta in modo da ottenere il risultato desiderato, ossia il CRUD per una tabella relazionale. Anzitutto per una sola tabella relazionale priva di chiavi esterne Inoltre  costruiamo le pagine web senza starci a preoccupare n辿 della loro estetica  n辿 della bont del modello di programmazione. Usiamo le java server pages e mescoliamo senza vergognarci, a nostro piacimento, il codice java con il codice HTML.
Usiamo la pala e il piccone  Si. Immergiamo le nostre mani nel codice. Sporchiamoci . Picconiamo la roccia, sgretoliamola Con la pala impastiamo la terra, i frammenti della roccia, facciamoci i mattoni. Muriamo una bella capanna con tutte le funzionalit. Facciamo una stanza per inserire i dati, unaltra per leggerli, unaltra ancora per modificarli, ed una per eliminarli.
Semplice teoria. Per eseguire un comando SQL usiamo due distinte istruzioni java. 1) per leggere  executeQuery(comando SQL) 2) per inserire, modificare, eliminare    executeUpdate(comando SQL) il comando SQL deve essere inserito come stringa ad esempio String leggi=Select * from titolo; Le variabili devono essere inserite tra una coppia di apostrofi e di doppie virgolette e di doppi +, al seguente modo  +codice+
Esempio  ResultSet rs=s.executeQuery(" select * from titolo where id ='"+codice+"' "); String inserisci=" insert into titolo (id,titolo,prezzo) values  ('"+max+"' , '"+titolo+"' , '"+prezzo+"' ) "; s.executeUpdate(inserisci); inserisci=" update  titolo set titolo='"+titolo+"', prezzo= "+prezzo+"  where id= "+chiave+"";
Facciamo una prima pagina menu.html con la scelta dei comandi
Le pagine html Per ogni opzione del men湛, creiamo una nuova pagina con la relativa form Scegliamo i nomi delle pagine html tutti in caratteri minuscoli I nomi delle pagine jsp maiuscoli, come con le classi java Anzitutto  faremo le pagine:  inseriscititolo.html ElencoTitoli.jsp (con lestensione jsp perch辿 c竪 del codice java insieme al codice html.
Pagina html con la form di inserimento di un nuovo titolo
Programma per inserire nella tabella i dati della form
Esame del programma InserisciTitolo.jsp - 1 9) carica in memoria il DriverManager 10-11) crea loggetto  c  di collegamento al nostro database libri 12) crea loggetto  s  della classe Statement per il collegamento  c Loggetto  s  ha i metodi  executeQuery() e  executeUpdate()
Esame del programma InserisciTitolo.jsp - 2 Il programma deve gestire la chiave primaria id. Lutente non sa della sua esistenza e non deve preoccuparsene. 13) cerca il valore pi湛 alto del campo id, ossia della chiave primaria.  14) definizione della variabile max 18-20) copia il valore massimo di id da rs a max 21) incrementa di uno il valore massimo id Infine questo valore 竪 quello da usare per id.
Esame del programma InserisciTitolo.jsp - 3 15-17) definizione delle variabili nelle quali salvare i valori dei dati digitati nella form  16) definizione della variabile della stringa SQL 22-23) lettura dei dati dalla request e loro assegnazione alla variabili opportunamente definite 24) creazione della stringa SQL 25) esecuzione del comando SQL per creare la nuova riga della tabella
Esame del programma InserisciTitolo.jsp - 4 Pagina html restituita al browser  30) assegnazione dei valori delle variabili java alla pagina html
Osservazione importante Tutto funziona, purch竪 non vengano inseriti nei dati digitati nella form degli apostrofi.  Ad esempio, provate a digitare nel titolo una frase con un apostrofo: Luomo migliore Otterrete questo errore
Visualizzazione dellelenco dei titoli
Spiegazione del precedente programma Quali sono gli elementi caratteristici del precedente codice ? E molto semplice:  Al solito c竪 il caricamento in memoria del DriverManager.  Il collegamento con il nostro particolare database. La creazione di un oggetto Statement Luso del metodo executeQuery() con il comando SQL Lutilizzo della iterazione while per ricavare  ogni riga risultato della query dalloggetto rs di ResultSet  La visualizzazione dei dati di ogni riga tramite una tabella HTML
Aggiornamento di una riga esistente Per aggiornare un record esistente in una tabella, occorre anzitutto ricercarlo nella tabella e visualizzarlo per permettere allutente di modificare i dati richiesti.
Ricerca record da modificare La ricerca si pu嘆 fare con diversi criteri: per chiave primaria, per titolo, per parola. Per il momento implementiamo la ricerca per chiave primaria
Programma per la ricerca, con la chiave primaria
Se il record 竪 trovato La chiave primaria non viene visualizzata, perch辿 lutente non deve averne laccesso ed il permesso di modificarla. La gestiona della chiave primaria 竪 affidata al programma.
Esame delle istruzioni di CercaTitolo.jsp Per ogni valore di chiave primaria c竪 uno ed un solo record. Pertanto la ricerca o lo trova o non lo trova. Nel caso in cui lo trova il risultato 竪 una sola riga 15) rs.next()  竪 o true o false se 竪 true 16-30) ricavo i valori dei dati digitati e poi costruisco una form inizializzandola con questi valori, tramite value=<%=titolo%>
Modifica dei dati
Risultato della modifica dei dati
Eliminazione di una riga della tabella Anche in questo caso, prima di eliminare, dobbiamo ritrovare la riga da cancellare. E evidente che la prima parte del lavoro di programmazione 竪 uguale a quella della ricerca precedente. Come si pu嘆 fare? Possiamo avere del codice duplicato, nel senso che duplico con un altro nome RicercaTitolo.jsp e nel caso in cui il record 竪 trovato si costruisce una form con una action che punta ad una nuova jsp: Elimina.jsp Dentro questa jsp metto il codice di eliminazione della riga richiesta.
Poca intelligenza ? Nello spirito della vanga e del piccone, procediamo su questa strada che richiede un grosso sforzo di manovalanza, e poca materia grigia. Ma Il nostro obiettivo 竪 quello di farci i muscoli. E via rotoliamoci nel fango del codice! Limportante 竪 raggiungere infine lobiettivo.
Piano dazione Duplichiamo CercaTitolo.jsp   CercaTitolo1.jsp In CercaTitolo1.jsp modifica   <form action=&quot;ModificaTitolo.jsp&quot; method=&quot;GET&quot;>  <form action=&quot;EliminaTitolo.jsp&quot; method=&quot;GET&quot;> Implementare EliminaTitolo.jsp.  Poich竪 竪 molto simile a ModificaTitolo.jsp conviene duplicarlo, eliminare le istruzioni che non servono e sostituire lUpdate con la Delete. Bisogna duplicare la pagina cercatitolo.html  cercatitolo1.html In essa il valore di action=CercaTitolo1.html Inoltre nella pagina menu.html bisogna mettere il link a cercatitolo1.jsp nellopzione del Elimina un titolo
Il programma EliminaTitolo.jsp
Ok! Siamo arrivati al termine del primo giorno di lavoro Che cosa abbiamo prodotto ?  Abbiamo implementato le quattro operazioni fondamentali del CRUD. Tuttavia abbiamo usato molto codice duplicato. Per ogni tabella dobbiamo ripetere tutto questo lavoro (duplicare tutto il codice), aumentando a dismisura il codice duplicato. Ci嘆 vuol dire che se devo fare una modifica, la devo ripetere dovunque si trova, ossia in tutto il codice duplicato!
The End

More Related Content

Similar to Lezione JSP database Crud (20)

Pycon Jungle
Pycon JunglePycon Jungle
Pycon Jungle
guest6b08a5
Sviluppo di App con Qt Quick: un esempio di model-view-delegate
Sviluppo di App con Qt Quick: un esempio di model-view-delegateSviluppo di App con Qt Quick: un esempio di model-view-delegate
Sviluppo di App con Qt Quick: un esempio di model-view-delegate
Paolo Sereno
Lezione jsp su come gestire una tabella relazionale con chiave esterna
Lezione jsp su come gestire una tabella relazionale con chiave esternaLezione jsp su come gestire una tabella relazionale con chiave esterna
Lezione jsp su come gestire una tabella relazionale con chiave esterna
Silvano Natalizi - ITIS ALESSANDRO VOLTA PERUGIA
Inserting
InsertingInserting
Inserting
Silvano Natalizi - ITIS ALESSANDRO VOLTA PERUGIA
Java lezione 10
Java lezione 10Java lezione 10
Java lezione 10
Sergio Ronchi
Terza lezioneandroid
Terza lezioneandroidTerza lezioneandroid
Terza lezioneandroid
Silvano Natalizi - ITIS ALESSANDRO VOLTA PERUGIA
corso web developer - Introduzione a Javascript
corso web developer - Introduzione a Javascriptcorso web developer - Introduzione a Javascript
corso web developer - Introduzione a Javascript
Riccardo Piccioni
Lezione Guidata Ruby On Rails Show
Lezione Guidata Ruby On Rails ShowLezione Guidata Ruby On Rails Show
Lezione Guidata Ruby On Rails Show
Silvano Natalizi - ITIS ALESSANDRO VOLTA PERUGIA
JSP Tag Library
JSP Tag LibraryJSP Tag Library
JSP Tag Library
jgiudici
JSP Tag Library
JSP Tag LibraryJSP Tag Library
JSP Tag Library
jgiudici
JSP Tag Library
JSP Tag LibraryJSP Tag Library
JSP Tag Library
jgiudici
SQL Server2000
SQL Server2000SQL Server2000
SQL Server2000
Maurizio Farina
Java 04
Java 04Java 04
Java 04
davide ficano
Java lezione 17
Java lezione 17Java lezione 17
Java lezione 17
Sergio Ronchi
Java codestyle & tipstricks
Java codestyle & tipstricksJava codestyle & tipstricks
Java codestyle & tipstricks
Domenico Briganti
04 Tapestry5 In Action Pratica
04   Tapestry5 In Action   Pratica04   Tapestry5 In Action   Pratica
04 Tapestry5 In Action Pratica
bobpuley
What is new in C# 2018
What is new in C# 2018What is new in C# 2018
What is new in C# 2018
Marco Parenzan
Quarta lezioneandroid
Quarta lezioneandroidQuarta lezioneandroid
Quarta lezioneandroid
Silvano Natalizi - ITIS ALESSANDRO VOLTA PERUGIA
Sviluppo di App con Qt Quick: un esempio di model-view-delegate
Sviluppo di App con Qt Quick: un esempio di model-view-delegateSviluppo di App con Qt Quick: un esempio di model-view-delegate
Sviluppo di App con Qt Quick: un esempio di model-view-delegate
Paolo Sereno
corso web developer - Introduzione a Javascript
corso web developer - Introduzione a Javascriptcorso web developer - Introduzione a Javascript
corso web developer - Introduzione a Javascript
Riccardo Piccioni
JSP Tag Library
JSP Tag LibraryJSP Tag Library
JSP Tag Library
jgiudici
JSP Tag Library
JSP Tag LibraryJSP Tag Library
JSP Tag Library
jgiudici
JSP Tag Library
JSP Tag LibraryJSP Tag Library
JSP Tag Library
jgiudici
Java codestyle & tipstricks
Java codestyle & tipstricksJava codestyle & tipstricks
Java codestyle & tipstricks
Domenico Briganti
04 Tapestry5 In Action Pratica
04   Tapestry5 In Action   Pratica04   Tapestry5 In Action   Pratica
04 Tapestry5 In Action Pratica
bobpuley
What is new in C# 2018
What is new in C# 2018What is new in C# 2018
What is new in C# 2018
Marco Parenzan

More from Silvano Natalizi - ITIS ALESSANDRO VOLTA PERUGIA (20)

Interferenza dueonde
Interferenza dueondeInterferenza dueonde
Interferenza dueonde
Silvano Natalizi - ITIS ALESSANDRO VOLTA PERUGIA
Procedimentodisoluzione fisicaparticelle
Procedimentodisoluzione fisicaparticelleProcedimentodisoluzione fisicaparticelle
Procedimentodisoluzione fisicaparticelle
Silvano Natalizi - ITIS ALESSANDRO VOLTA PERUGIA
Proc solescercaparabolastaccasegmentosuassex
Proc solescercaparabolastaccasegmentosuassexProc solescercaparabolastaccasegmentosuassex
Proc solescercaparabolastaccasegmentosuassex
Silvano Natalizi - ITIS ALESSANDRO VOLTA PERUGIA
Problema fisica compito in classe
Problema fisica compito in classeProblema fisica compito in classe
Problema fisica compito in classe
Silvano Natalizi - ITIS ALESSANDRO VOLTA PERUGIA
Esercizi sulla energia meccanica
Esercizi sulla energia meccanicaEsercizi sulla energia meccanica
Esercizi sulla energia meccanica
Silvano Natalizi - ITIS ALESSANDRO VOLTA PERUGIA
Problemi di trigonometria
Problemi di trigonometriaProblemi di trigonometria
Problemi di trigonometria
Silvano Natalizi - ITIS ALESSANDRO VOLTA PERUGIA
Lezione Blog Didattici 27 4 2010
Lezione Blog Didattici 27 4 2010Lezione Blog Didattici 27 4 2010
Lezione Blog Didattici 27 4 2010
Silvano Natalizi - ITIS ALESSANDRO VOLTA PERUGIA
Portale libreria online
Portale libreria onlinePortale libreria online
Portale libreria online
Silvano Natalizi - ITIS ALESSANDRO VOLTA PERUGIA
Lezione android esercizi
Lezione android esercizi Lezione android esercizi
Lezione android esercizi
Silvano Natalizi - ITIS ALESSANDRO VOLTA PERUGIA
Sesta lezione android
Sesta lezione androidSesta lezione android
Sesta lezione android
Silvano Natalizi - ITIS ALESSANDRO VOLTA PERUGIA
Quinta lezione android
Quinta lezione androidQuinta lezione android
Quinta lezione android
Silvano Natalizi - ITIS ALESSANDRO VOLTA PERUGIA
Natalizi thyristors seconda lezione
Natalizi thyristors seconda lezioneNatalizi thyristors seconda lezione
Natalizi thyristors seconda lezione
Silvano Natalizi - ITIS ALESSANDRO VOLTA PERUGIA
Lezione anonymousinnerclass
Lezione anonymousinnerclassLezione anonymousinnerclass
Lezione anonymousinnerclass
Silvano Natalizi - ITIS ALESSANDRO VOLTA PERUGIA
Thyristors
ThyristorsThyristors
Thyristors
Silvano Natalizi - ITIS ALESSANDRO VOLTA PERUGIA
Seconda Lezione Android
Seconda Lezione AndroidSeconda Lezione Android
Seconda Lezione Android
Silvano Natalizi - ITIS ALESSANDRO VOLTA PERUGIA
Lezione Android prima parte
Lezione Android prima parteLezione Android prima parte
Lezione Android prima parte
Silvano Natalizi - ITIS ALESSANDRO VOLTA PERUGIA

Recently uploaded (18)

Customer Satisfaction a.s. 2023-24 - Questionario Autovalutazione
Customer Satisfaction a.s. 2023-24 - Questionario AutovalutazioneCustomer Satisfaction a.s. 2023-24 - Questionario Autovalutazione
Customer Satisfaction a.s. 2023-24 - Questionario Autovalutazione
belodevici
Designing Intelligent Construction Projects Michael Frahm
Designing Intelligent Construction Projects Michael FrahmDesigning Intelligent Construction Projects Michael Frahm
Designing Intelligent Construction Projects Michael Frahm
ewoadetozito
Customer Satisfaction a.s. 2022-23 - Questionario autovalutazione
Customer Satisfaction a.s. 2022-23 - Questionario autovalutazioneCustomer Satisfaction a.s. 2022-23 - Questionario autovalutazione
Customer Satisfaction a.s. 2022-23 - Questionario autovalutazione
belodevici
Test Bank for Marketing Management, 3rd Edition, Greg Marshall, Mark Johnston
Test Bank for Marketing Management, 3rd Edition, Greg Marshall, Mark JohnstonTest Bank for Marketing Management, 3rd Edition, Greg Marshall, Mark Johnston
Test Bank for Marketing Management, 3rd Edition, Greg Marshall, Mark Johnston
pplqadiri
(eBook PDF) Auditing: A Practical Approach with Data Analytics by Raymond N. ...
(eBook PDF) Auditing: A Practical Approach with Data Analytics by Raymond N. ...(eBook PDF) Auditing: A Practical Approach with Data Analytics by Raymond N. ...
(eBook PDF) Auditing: A Practical Approach with Data Analytics by Raymond N. ...
osanoarak
Test Bank for Understanding Abnormal Behavior, 10th Edition : Sue
Test Bank for Understanding Abnormal Behavior, 10th Edition : SueTest Bank for Understanding Abnormal Behavior, 10th Edition : Sue
Test Bank for Understanding Abnormal Behavior, 10th Edition : Sue
dementogge
Essentials of Accounting for Governmental and Not-for-Profit Organizations 12...
Essentials of Accounting for Governmental and Not-for-Profit Organizations 12...Essentials of Accounting for Governmental and Not-for-Profit Organizations 12...
Essentials of Accounting for Governmental and Not-for-Profit Organizations 12...
orakategy
New Methods of Literacy Research 1st Edition Peggy Albers
New Methods of Literacy Research 1st Edition Peggy AlbersNew Methods of Literacy Research 1st Edition Peggy Albers
New Methods of Literacy Research 1st Edition Peggy Albers
uxhcablende
Test Bank for Foundations of Financial Markets and Institutions, 4th Edition:...
Test Bank for Foundations of Financial Markets and Institutions, 4th Edition:...Test Bank for Foundations of Financial Markets and Institutions, 4th Edition:...
Test Bank for Foundations of Financial Markets and Institutions, 4th Edition:...
orrahnaf
La tossicodipendenza pi湛 difficile da trattare.pptx
La tossicodipendenza pi湛 difficile da trattare.pptxLa tossicodipendenza pi湛 difficile da trattare.pptx
La tossicodipendenza pi湛 difficile da trattare.pptx
Fabio Scandurra
Presentazione della Dichiarazione di Dubai sulle OER alla comunit italiana -...
Presentazione della Dichiarazione di Dubai sulle OER alla comunit italiana -...Presentazione della Dichiarazione di Dubai sulle OER alla comunit italiana -...
Presentazione della Dichiarazione di Dubai sulle OER alla comunit italiana -...
Damiano Orru
Essentials of Accounting for Governmental and Not for Profit Organizations 13...
Essentials of Accounting for Governmental and Not for Profit Organizations 13...Essentials of Accounting for Governmental and Not for Profit Organizations 13...
Essentials of Accounting for Governmental and Not for Profit Organizations 13...
orakategy
Learning Swift Building Apps for OSX, iOS, and Beyond Jon Manning
Learning Swift Building Apps for OSX, iOS, and Beyond Jon ManningLearning Swift Building Apps for OSX, iOS, and Beyond Jon Manning
Learning Swift Building Apps for OSX, iOS, and Beyond Jon Manning
jelieltoinks
2 - Presentazione disturbo spettro autismo.pdf
2 - Presentazione disturbo spettro  autismo.pdf2 - Presentazione disturbo spettro  autismo.pdf
2 - Presentazione disturbo spettro autismo.pdf
GiovanniBertoni
Improving Code Quality 1st Edition Yiannis Kanellopoulos & Tim Walker
Improving Code Quality 1st Edition Yiannis Kanellopoulos & Tim WalkerImproving Code Quality 1st Edition Yiannis Kanellopoulos & Tim Walker
Improving Code Quality 1st Edition Yiannis Kanellopoulos & Tim Walker
aokasmaany
Digital Business Networks 1st Edition Dooley Solutions Manual
Digital Business Networks 1st Edition Dooley Solutions ManualDigital Business Networks 1st Edition Dooley Solutions Manual
Digital Business Networks 1st Edition Dooley Solutions Manual
idderkribo
Test Bank for Systems Analysis and Design 8th Edition: Kendall
Test Bank for Systems Analysis and Design 8th Edition: KendallTest Bank for Systems Analysis and Design 8th Edition: Kendall
Test Bank for Systems Analysis and Design 8th Edition: Kendall
alawamajina
Test Bank for Canadian Organizational Behaviour, 10th Edition, Steven McShane...
Test Bank for Canadian Organizational Behaviour, 10th Edition, Steven McShane...Test Bank for Canadian Organizational Behaviour, 10th Edition, Steven McShane...
Test Bank for Canadian Organizational Behaviour, 10th Edition, Steven McShane...
izmarmelum
Customer Satisfaction a.s. 2023-24 - Questionario Autovalutazione
Customer Satisfaction a.s. 2023-24 - Questionario AutovalutazioneCustomer Satisfaction a.s. 2023-24 - Questionario Autovalutazione
Customer Satisfaction a.s. 2023-24 - Questionario Autovalutazione
belodevici
Designing Intelligent Construction Projects Michael Frahm
Designing Intelligent Construction Projects Michael FrahmDesigning Intelligent Construction Projects Michael Frahm
Designing Intelligent Construction Projects Michael Frahm
ewoadetozito
Customer Satisfaction a.s. 2022-23 - Questionario autovalutazione
Customer Satisfaction a.s. 2022-23 - Questionario autovalutazioneCustomer Satisfaction a.s. 2022-23 - Questionario autovalutazione
Customer Satisfaction a.s. 2022-23 - Questionario autovalutazione
belodevici
Test Bank for Marketing Management, 3rd Edition, Greg Marshall, Mark Johnston
Test Bank for Marketing Management, 3rd Edition, Greg Marshall, Mark JohnstonTest Bank for Marketing Management, 3rd Edition, Greg Marshall, Mark Johnston
Test Bank for Marketing Management, 3rd Edition, Greg Marshall, Mark Johnston
pplqadiri
(eBook PDF) Auditing: A Practical Approach with Data Analytics by Raymond N. ...
(eBook PDF) Auditing: A Practical Approach with Data Analytics by Raymond N. ...(eBook PDF) Auditing: A Practical Approach with Data Analytics by Raymond N. ...
(eBook PDF) Auditing: A Practical Approach with Data Analytics by Raymond N. ...
osanoarak
Test Bank for Understanding Abnormal Behavior, 10th Edition : Sue
Test Bank for Understanding Abnormal Behavior, 10th Edition : SueTest Bank for Understanding Abnormal Behavior, 10th Edition : Sue
Test Bank for Understanding Abnormal Behavior, 10th Edition : Sue
dementogge
Essentials of Accounting for Governmental and Not-for-Profit Organizations 12...
Essentials of Accounting for Governmental and Not-for-Profit Organizations 12...Essentials of Accounting for Governmental and Not-for-Profit Organizations 12...
Essentials of Accounting for Governmental and Not-for-Profit Organizations 12...
orakategy
New Methods of Literacy Research 1st Edition Peggy Albers
New Methods of Literacy Research 1st Edition Peggy AlbersNew Methods of Literacy Research 1st Edition Peggy Albers
New Methods of Literacy Research 1st Edition Peggy Albers
uxhcablende
Test Bank for Foundations of Financial Markets and Institutions, 4th Edition:...
Test Bank for Foundations of Financial Markets and Institutions, 4th Edition:...Test Bank for Foundations of Financial Markets and Institutions, 4th Edition:...
Test Bank for Foundations of Financial Markets and Institutions, 4th Edition:...
orrahnaf
La tossicodipendenza pi湛 difficile da trattare.pptx
La tossicodipendenza pi湛 difficile da trattare.pptxLa tossicodipendenza pi湛 difficile da trattare.pptx
La tossicodipendenza pi湛 difficile da trattare.pptx
Fabio Scandurra
Presentazione della Dichiarazione di Dubai sulle OER alla comunit italiana -...
Presentazione della Dichiarazione di Dubai sulle OER alla comunit italiana -...Presentazione della Dichiarazione di Dubai sulle OER alla comunit italiana -...
Presentazione della Dichiarazione di Dubai sulle OER alla comunit italiana -...
Damiano Orru
Essentials of Accounting for Governmental and Not for Profit Organizations 13...
Essentials of Accounting for Governmental and Not for Profit Organizations 13...Essentials of Accounting for Governmental and Not for Profit Organizations 13...
Essentials of Accounting for Governmental and Not for Profit Organizations 13...
orakategy
Learning Swift Building Apps for OSX, iOS, and Beyond Jon Manning
Learning Swift Building Apps for OSX, iOS, and Beyond Jon ManningLearning Swift Building Apps for OSX, iOS, and Beyond Jon Manning
Learning Swift Building Apps for OSX, iOS, and Beyond Jon Manning
jelieltoinks
2 - Presentazione disturbo spettro autismo.pdf
2 - Presentazione disturbo spettro  autismo.pdf2 - Presentazione disturbo spettro  autismo.pdf
2 - Presentazione disturbo spettro autismo.pdf
GiovanniBertoni
Improving Code Quality 1st Edition Yiannis Kanellopoulos & Tim Walker
Improving Code Quality 1st Edition Yiannis Kanellopoulos & Tim WalkerImproving Code Quality 1st Edition Yiannis Kanellopoulos & Tim Walker
Improving Code Quality 1st Edition Yiannis Kanellopoulos & Tim Walker
aokasmaany
Digital Business Networks 1st Edition Dooley Solutions Manual
Digital Business Networks 1st Edition Dooley Solutions ManualDigital Business Networks 1st Edition Dooley Solutions Manual
Digital Business Networks 1st Edition Dooley Solutions Manual
idderkribo
Test Bank for Systems Analysis and Design 8th Edition: Kendall
Test Bank for Systems Analysis and Design 8th Edition: KendallTest Bank for Systems Analysis and Design 8th Edition: Kendall
Test Bank for Systems Analysis and Design 8th Edition: Kendall
alawamajina
Test Bank for Canadian Organizational Behaviour, 10th Edition, Steven McShane...
Test Bank for Canadian Organizational Behaviour, 10th Edition, Steven McShane...Test Bank for Canadian Organizational Behaviour, 10th Edition, Steven McShane...
Test Bank for Canadian Organizational Behaviour, 10th Edition, Steven McShane...
izmarmelum

Lezione JSP database Crud

  • 1. Tutorial JSP database-seconda parte Silvano Natalizi Apr 11, 2010
  • 2. Obiettivo della lezione Lobiettivo di questa lezione 竪 quello di insegnare come si programma una java server page per gestire una tabella relazionale con i dati digitati in una form di una pagina HTML.
  • 3. CRUD CRUD Create Read Update Delete Dovete imparare ad usare i comandi SQL, allinterno delle opportune istruzioni java, per inserire una nuova riga di una tabella (Create), per leggere dalla tabella (Read), per modificare i dati di una tabella (Update), per eliminare le righe di una tabella (Delete)
  • 4. Risolviamo il problema per approssimazioni successive Nella prima fase del lavoro pensiamo solo a far girare tutto il programma in maniera corretta in modo da ottenere il risultato desiderato, ossia il CRUD per una tabella relazionale. Anzitutto per una sola tabella relazionale priva di chiavi esterne Inoltre costruiamo le pagine web senza starci a preoccupare n辿 della loro estetica n辿 della bont del modello di programmazione. Usiamo le java server pages e mescoliamo senza vergognarci, a nostro piacimento, il codice java con il codice HTML.
  • 5. Usiamo la pala e il piccone Si. Immergiamo le nostre mani nel codice. Sporchiamoci . Picconiamo la roccia, sgretoliamola Con la pala impastiamo la terra, i frammenti della roccia, facciamoci i mattoni. Muriamo una bella capanna con tutte le funzionalit. Facciamo una stanza per inserire i dati, unaltra per leggerli, unaltra ancora per modificarli, ed una per eliminarli.
  • 6. Semplice teoria. Per eseguire un comando SQL usiamo due distinte istruzioni java. 1) per leggere executeQuery(comando SQL) 2) per inserire, modificare, eliminare executeUpdate(comando SQL) il comando SQL deve essere inserito come stringa ad esempio String leggi=Select * from titolo; Le variabili devono essere inserite tra una coppia di apostrofi e di doppie virgolette e di doppi +, al seguente modo +codice+
  • 7. Esempio ResultSet rs=s.executeQuery(&quot; select * from titolo where id ='&quot;+codice+&quot;' &quot;); String inserisci=&quot; insert into titolo (id,titolo,prezzo) values ('&quot;+max+&quot;' , '&quot;+titolo+&quot;' , '&quot;+prezzo+&quot;' ) &quot;; s.executeUpdate(inserisci); inserisci=&quot; update titolo set titolo='&quot;+titolo+&quot;', prezzo= &quot;+prezzo+&quot; where id= &quot;+chiave+&quot;&quot;;
  • 8. Facciamo una prima pagina menu.html con la scelta dei comandi
  • 9. Le pagine html Per ogni opzione del men湛, creiamo una nuova pagina con la relativa form Scegliamo i nomi delle pagine html tutti in caratteri minuscoli I nomi delle pagine jsp maiuscoli, come con le classi java Anzitutto faremo le pagine: inseriscititolo.html ElencoTitoli.jsp (con lestensione jsp perch辿 c竪 del codice java insieme al codice html.
  • 10. Pagina html con la form di inserimento di un nuovo titolo
  • 11. Programma per inserire nella tabella i dati della form
  • 12. Esame del programma InserisciTitolo.jsp - 1 9) carica in memoria il DriverManager 10-11) crea loggetto c di collegamento al nostro database libri 12) crea loggetto s della classe Statement per il collegamento c Loggetto s ha i metodi executeQuery() e executeUpdate()
  • 13. Esame del programma InserisciTitolo.jsp - 2 Il programma deve gestire la chiave primaria id. Lutente non sa della sua esistenza e non deve preoccuparsene. 13) cerca il valore pi湛 alto del campo id, ossia della chiave primaria. 14) definizione della variabile max 18-20) copia il valore massimo di id da rs a max 21) incrementa di uno il valore massimo id Infine questo valore 竪 quello da usare per id.
  • 14. Esame del programma InserisciTitolo.jsp - 3 15-17) definizione delle variabili nelle quali salvare i valori dei dati digitati nella form 16) definizione della variabile della stringa SQL 22-23) lettura dei dati dalla request e loro assegnazione alla variabili opportunamente definite 24) creazione della stringa SQL 25) esecuzione del comando SQL per creare la nuova riga della tabella
  • 15. Esame del programma InserisciTitolo.jsp - 4 Pagina html restituita al browser 30) assegnazione dei valori delle variabili java alla pagina html
  • 16. Osservazione importante Tutto funziona, purch竪 non vengano inseriti nei dati digitati nella form degli apostrofi. Ad esempio, provate a digitare nel titolo una frase con un apostrofo: Luomo migliore Otterrete questo errore
  • 18. Spiegazione del precedente programma Quali sono gli elementi caratteristici del precedente codice ? E molto semplice: Al solito c竪 il caricamento in memoria del DriverManager. Il collegamento con il nostro particolare database. La creazione di un oggetto Statement Luso del metodo executeQuery() con il comando SQL Lutilizzo della iterazione while per ricavare ogni riga risultato della query dalloggetto rs di ResultSet La visualizzazione dei dati di ogni riga tramite una tabella HTML
  • 19. Aggiornamento di una riga esistente Per aggiornare un record esistente in una tabella, occorre anzitutto ricercarlo nella tabella e visualizzarlo per permettere allutente di modificare i dati richiesti.
  • 20. Ricerca record da modificare La ricerca si pu嘆 fare con diversi criteri: per chiave primaria, per titolo, per parola. Per il momento implementiamo la ricerca per chiave primaria
  • 21. Programma per la ricerca, con la chiave primaria
  • 22. Se il record 竪 trovato La chiave primaria non viene visualizzata, perch辿 lutente non deve averne laccesso ed il permesso di modificarla. La gestiona della chiave primaria 竪 affidata al programma.
  • 23. Esame delle istruzioni di CercaTitolo.jsp Per ogni valore di chiave primaria c竪 uno ed un solo record. Pertanto la ricerca o lo trova o non lo trova. Nel caso in cui lo trova il risultato 竪 una sola riga 15) rs.next() 竪 o true o false se 竪 true 16-30) ricavo i valori dei dati digitati e poi costruisco una form inizializzandola con questi valori, tramite value=<%=titolo%>
  • 26. Eliminazione di una riga della tabella Anche in questo caso, prima di eliminare, dobbiamo ritrovare la riga da cancellare. E evidente che la prima parte del lavoro di programmazione 竪 uguale a quella della ricerca precedente. Come si pu嘆 fare? Possiamo avere del codice duplicato, nel senso che duplico con un altro nome RicercaTitolo.jsp e nel caso in cui il record 竪 trovato si costruisce una form con una action che punta ad una nuova jsp: Elimina.jsp Dentro questa jsp metto il codice di eliminazione della riga richiesta.
  • 27. Poca intelligenza ? Nello spirito della vanga e del piccone, procediamo su questa strada che richiede un grosso sforzo di manovalanza, e poca materia grigia. Ma Il nostro obiettivo 竪 quello di farci i muscoli. E via rotoliamoci nel fango del codice! Limportante 竪 raggiungere infine lobiettivo.
  • 28. Piano dazione Duplichiamo CercaTitolo.jsp CercaTitolo1.jsp In CercaTitolo1.jsp modifica <form action=&quot;ModificaTitolo.jsp&quot; method=&quot;GET&quot;> <form action=&quot;EliminaTitolo.jsp&quot; method=&quot;GET&quot;> Implementare EliminaTitolo.jsp. Poich竪 竪 molto simile a ModificaTitolo.jsp conviene duplicarlo, eliminare le istruzioni che non servono e sostituire lUpdate con la Delete. Bisogna duplicare la pagina cercatitolo.html cercatitolo1.html In essa il valore di action=CercaTitolo1.html Inoltre nella pagina menu.html bisogna mettere il link a cercatitolo1.jsp nellopzione del Elimina un titolo
  • 30. Ok! Siamo arrivati al termine del primo giorno di lavoro Che cosa abbiamo prodotto ? Abbiamo implementato le quattro operazioni fondamentali del CRUD. Tuttavia abbiamo usato molto codice duplicato. Per ogni tabella dobbiamo ripetere tutto questo lavoro (duplicare tutto il codice), aumentando a dismisura il codice duplicato. Ci嘆 vuol dire che se devo fare una modifica, la devo ripetere dovunque si trova, ossia in tutto il codice duplicato!