Java: la libreria delle classi

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Java: la libreria delle classi"

Transcript

1 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 che le permette di essere eseguita da un JVM integrata in un browser web Un applet è costruita creando una sottoclasse della classe di libreria java.applet.applet Il tag html <applet> permette di specificare che una certa applet deve essere visualizzata all interno di una pagina html 214

2 Applet: schema di funzionamento Il codice html e il codice dell applet vengono scaricati dalla macchina server sul client sfruttando il protocollo http browser applet code (class file) HTTP server html code client 215 La classe java.applet.applet La classe java.applet.applet esporta i seguenti metodi pubblici: public void init() invocato dal browser quando la pagina che contiene l applet viene aperta per la prima volta public void start() invocato dal browser quando si entra nella pagina che contiene l applet public void stop() invocato dal browser quando si esce dalla pagina che contiene l applet public void destroy() invocato dal browser quando si esce definitivamente dalla pagina che contiene l applet Questi metodi possono essere ridefiniti nelle sottoclassi per attribuire alle proprie applet il comportamento desiderato 216

3 La classe java.applet.applet Le applet non hanno accesso all interfaccia a carattere La classe java.applet.applet è sottoclasse della classe java.awt.panel. Può quindi contenere oggetti grafici per l input/output con l utente 217 Applet e pagine html Il tag applet viene utilizzato per indicare al browser che deve visualizzare un applet all interno di una pagina html Esempio: <applet code="clock" width=50 height=50> <param name=color value="blue"> </applet> Il metodo: public String getparameter(string name) per l accesso ai parametri specificati nel codice html 218

4 Applet: un esempio 219 Applet: un esempio - codice Java import java.awt.*; public class ProvaApplet extends java.applet.applet { private TextArea ta; private Button b; public void init() { ta=new TextArea(20,80); b=new Button("Press here"); setlayout(new BorderLayout()); add("center",ta); add("north",b); resize(400,200); public void start() {ta.appendtext("chiamato metodo start\n"); public void stop() {ta.appendtext("chiamato metodo stop\n"); public void destroy() {ta.appendtext("chiamato metodo destroy\n"); public boolean handleevent(event evt) { if(evt.target==b) {ta.appendtext("premuto bottone\n"); return true; else return false; 220

5 Applet: un esempio - codice html <HTML> <HEAD> <TITLE>Un esempio di applet</title> </HEAD> <BODY> <H2>Un esempio di applet</h2> <P> prova a premere il bottone... <P> <APPLET code="provaapplet.class" width=400 height=200> </APPLET> </BODY> </HTML> 221 Applet: esercizio Si scriva un applet con un bottone che, premuto, che apre una finestra esterna al browser con un messaggio 222

6 Applet: vincoli Le applet sono soggette ad una serie di vincoli di sicurezza che variano da browser a browser Attualmente (Netscape 3 e Internet Explorer 3) un applet: non può accedere al file system non può lanciare applicazioni esterne può aprire connessioni tcp/ip solo con la macchina dalla quale è stata scaricata 223 Applet come applicazioni E possibile scrivere una classe che sia tanto un applet quanto un applicazione stand-alone Esempio: public class ProvaApplet extends java.applet.applet { private TextArea ta; private Button b; public static void main(string args[]) { Frame f=new Frame("ProvaApplet"); ProvaApplet p=new ProvaApplet(); p.init(); p.start(); f.add(p); f.show(); f.pack();

7 JDBC JDBC (Java DataBase Connectivity) è una libreria per l accesso a database SQL Permette di: aprire una connessione ad un database SQL inviare dei comandi SQL manipolare i risultati forniti dal database JDBC è un front-end per motori di accesso a database diversi (es. ODBC) La libreria è costituita dal package java.sql 225 JDBC: cenni generali JDBC può sfruttare diversi driver per implementare l accesso vero e proprio al database Driver diversi possono avere caratteristiche diverse in termini di capacità a connettersi in maniera trasparente a database remoti Noi prenderemo in considerazione il solo driver basato su ODBC (parte integrante del JDK di Sun) 226

8 La classe java.sql.connection La classe Connection rappresenta una connessione ad un DB Una applicazione può avere più connessioni aperte con lo stesso DB o con DB diversi Attraverso una connessione è possibile inviare comandi SQL e ottenere indietro gli eventuali risultati 227 Aprire una connessione Una connessione viene generalmente aperta invocando il metodo getconnection della classe DriverManager come segue: Connection con=drivermanager.getconnection("jdbc:odbc:prova"); Il parametro passato rappresenta l URL del DB Un driver capace di gestire l accesso al DB specificato deve essere preliminarmente registrat o presso il DriverManager ciò si può ottenere con uno statement del tipo: Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); NOTA: Nel caso di uso del driver ODBC, il DB deve essere preliminarmente esportato ed associato ad un nome simbolico (pannello di controllo : 32 bit ODBC) 228

9 URL JDBC Un URL JDBC ha la seguente forma generale: jdbc:<subprotocol>:<subname> La parte subprotocol specifica il tipo del protocollo di comunicazione da adottare da tale scelta dipende il tipo di driver JDBC che verrà scelto La parte subname indica il DB al quale collegarsi il formato di questa parte dipende dal protocollo usato 229 Invio di comandi SQL Attraverso una connessione è possibile invocare normali statement SQL, prepared statement, o calleable statement Un prepared statement è usato per invocare una serie di statement precompilati che differiscono solo per il valore di certi parametri Un calleable statement è usato per invocare una procedura SQL definita all interno del DB 230

10 Transazioni Per default una connessione è in modalità auto commit ogni statement è automaticamente seguito da una commit E possibile cambiare questo comportamento (metodo setautocommit della classe Connection) e specificare esplicitamente commit e rollback (metodi omonimi della classe Connection) 231 Invio di comandi SQL standard Il metodo: public Statement createstatement() della classe Connection permette di creare uno statement SQL privo di parametri La classe Statement: metodi principali: public ResultSet executequery(string sql) public int executeupdate(string sql) La classe ResultSet esporta una serie di metodi per accedere ai risultati di una query 232

11 ResultSet: un esempio int i; String s; float f; java.sql.statement stmt = conn.createstatement(); ResultSet r = stmt.executequery( "SELECT a, b, c FROM Table1"); while (r.next()) { // print the values for the current row. i = r.getint("a"); s = r.getstring("b"); f = r.getfloat("c"); System.out.println("ROW = " + i + " " + s + " " + f); 233 Invio di prepared statement SQL Il metodo: public PreparedStatement preparestatement(string sql) della classe Connection permette di invocare statement SQL con parametri La classe PreparedStatement: metodi principali: public ResultSet executequery() public int executeupdate() più una serie di metodi per impostare il valore dei parametri 234

12 Invocazione di calleable statement Il metodo: public CallableStatement preparecall(string sql) della classe Connection permette di invocare procedure SQL salvate nel DB La classe CalleableStatement: è una sottoclasse della classe PreparedStatement e fornisce tutti i metodi di quest ultima 235 JDBC: un esempio completo import java.sql.*; public class ProvaJDBC { public static void main(string[] args) { try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance(); DriverManager.setLoginTimeout(5); Connection con= DriverManager.getConnection("jdbc:odbc:Prova"); Statement stat = con.createstatement(); ResultSet res = stat.executequery("select T1.Nome, T2.Dim FROM `Table1$` T1, `Table2$` T2 WHERE T1.Dip = T2.Dip"); while(res.next()) {System.out.println(res.getString(1)+" : "+res.getstring(2)); stat.close(); catch(exception e){e.printstacktrace(); 236