import java.awt.*; // Le classi per il disegno
import java.applet.Applet; // La superclasse
import java.sql.*;
public class inserisci extends Applet {
TextField nome;
TextField cellulare;
Button inserisci;// Inserisce i dati
Label messaggio; // Display dei risultati
// Stringhe di configurazione, lette dalla pagina HTML
String server; // URL del server
String database; // nome del database
String user; // utrnte con cui connettersi
String password; // password dell'utente (se presente)
String driver; // driver da caricare
public void init () { // Metodo chiamato all'avvio dell'applet
Panel p; // Pannello per gestire la disposizione degli elementi
// Legge i paramentri dal tag <Applet> (per rendere flessibile l'applet)
server = getParameter("server");
database = getParameter("database");
user = getParameter("user");
password = getParameter("password");
driver = getParameter("driver");
// Gestisce il default dei parametri
if (server == null) {
server="localhst";
}
if (database == null) {
database="test";
}
if (user == null) {
user="www-data";
}
if (password == null) {
password="";
}
if (driver == null) {
driver="org.postgresql.Driver";
}
setBackground (new Color(0,0,128)); // Sfondo applet
setForeground (new Color(255,255,136)); // Scritte applet
setLayout (new GridLayout (4,1)); // Tabella con quattro righe
p = new Panel (); // Un pannello per contenere label e campo
p.setLayout (new FlowLayout ()); // Che mette i compoinenti uno in fianco all'altro
p.add (new Label ("Nome"));
nome = new TextField (40);
p.add (nome); // Aggiungo il bottone al pannello - avra' la sua dimensione naturale
add (p); // Metto il pannello con label e campo nella prima riga
p = new Panel (); // Un pannello per contenere label e campo
p.setLayout (new FlowLayout ()); // Che mette i compoinenti uno in fianco all'altro
p.add (new Label ("Numero di Cellulare"));
cellulare = new TextField (20);
p.add (cellulare); // Aggiungo il bottone al pannello - avra' la sua dimensione naturale
add (p); // Metto il pannello con label e campo nella seconda riga
p = new Panel (); // Un pannello per centrare il bottone
p.setLayout (new FlowLayout ()); // Che mette i compoinenti uno in fianco all'altro
inserisci = new Button ("Inserisci");
p.add (inserisci); // Aggiungo il bottone al pannello - avra' la sua dimensione naturale
add (p); // Metto il pannello con il bottone nella terza riga
messaggio = new Label ("Ok"); // Messaggio
add (messaggio); // Aggiungo il display nella quarta riga
}
// Piccolo metodo di utilita' per gestire gli errori:
// - stampa il messaggio m
// - stampa il codice di errore dell'Exception
void printException (String m, Exception e) {
messaggio.setText (m + e.toString ());
}
// Carica la driver da utilizzare (parametro 'driver') ed
// apre una connesione al database 'db', con l'utente 'user'
// e la password 'pwd'
// Ritorna la connessione creata
Connection Conn (String db, String user, String pwd, String driver) {
Connection c = null;
String dbUrl;
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
printException ("Non trovo la driver del database", e);
return null;
}
dbUrl = "jdbc:postgresql:" + db;
try {
c = DriverManager.getConnection(dbUrl, user, pwd);
} catch (SQLException e) {
printException ("Non riesco a connettermi con il database " + db,e);
return null;
}
messaggio.setText ("Connesso con il database " + db);
return c;
}
// Inserisce il record nella tabella 'agenda'
// Utilizza 'PreparedStatement' (come esempio)
void fillTable (Connection conn, String vNome, int nNumero) {
try {
// Crea la 'prepareStatement' con la query per l'inserimento
PreparedStatement ps = conn.prepareStatement("insert into agenda values (?,?)");
// Associa i valori ai '?' della query generica
ps.setString(1,vNome); // colonna "nome" = vNome
ps.setInt(2,nNumero); // colonna "cellulare" = nNumero
ps.executeUpdate(); // executeUpdate perche' insert non ritorna dati
ps.close(); // Occorre sempre chiudere quando abbiamo finito
conn.close (); // chiude la connessione
} catch (SQLException e) {
printException ("Non riesco inserire il record nella tabella 'agenda'",e);
return;
}
messaggio.setText ("Record inserito con successo");
}
// Verifica i parametri e inserisce il record
void inserisciDato () {
Connection conn;
String vNome = nome.getText ();
String sNumero = cellulare.getText ();
int nNumero;
try {
nNumero = Integer.parseInt (sNumero);
} catch (NumberFormatException e) {
messaggio.setText ("Il numero di cellulare deve essere un numero");
return;
}
if (vNome.compareTo ("") == 0) {
messaggio.setText ("Devi inserire un nome");
return;
}
if (nNumero <= 0) {
messaggio.setText ("Devi inserire un numero di cellulare (positivo)");
return;
}
conn = Conn ("//" + server + "/" + database, user, password, driver);
if (conn != null) {
fillTable (conn, vNome, nNumero); // Inserisce il record
}
}
// Gestione del bottone
public boolean action(Event event, Object arg) {
if (event.target == inserisci) {
inserisciDato (); // ed esegue il test del database
}
return true;
}
}