crea.java

import java.awt.*;         // Le classi per il disegno
import java.applet.Applet; // La superclasse
import java.sql.*;

public class crea extends Applet {
  Button crea;    // Crea la tabella
  Button elimina; // Elimina la tabella
  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
    // 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 BorderLayout ()); // Layout con le cinque posizioni

    messaggio = new Label ("Ok");     // Messaggio
    add ("South",messaggio);          // Aggiungo il display a sud dell'applet

    Panel np = new Panel ();           // Un pannello per centrare il bottone
    np.setLayout  (new FlowLayout ()); // Che mette i compoinenti uno in fianco all'altro
    crea = new Button ("Crea Tabella");
    np.add (crea); // Aggiungo il bottone al pannello - avra' la sua dimensione naturale
    elimina = new Button ("Elimina Tabella");
    np.add (elimina); // Aggiungo il bottone al pannello - avra' la sua dimensione naturale
        
    add ("North",np); // Metto il pannello con il bottone a sud dell'applet
  }

  // 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;
  }

  // Crea la tabella 'agenda' nel database, tramite la connessione 'conn'
  void createTable (Connection conn) {
    try {
      Statement dbst = conn.createStatement();  // Crea uno 'statement' sulla connessione
      // Usa 'executeUpdate' perche' la query non ritorna dati
      dbst.executeUpdate("create table agenda (nome text, cellulare integer);");
      dbst.close ();       // Occorre sempre chiudere quando abbiamo finito
      conn.close ();             // chiude la connessione
    } catch (SQLException e) {
      printException ("Non riesco a creare la tabella 'agenda'",e);
      return;
    }
    messaggio.setText ("Creata la tabella 'agenda'");
  }

  // Alla fine del lavoro, elimina la tabella
  void dropTable (Connection conn) {
    try {
      Statement dbst = conn.createStatement();
      dbst.executeUpdate("drop table agenda;");
      dbst.close ();       // Occorre sempre chiudere quando abbiamo finito
      conn.close ();             // chiude la connessione
    } catch (SQLException e) {
      printException ("Non riesco ad eliminare la tabella 'agenda'",e);
      return;
    }
    messaggio.setText ("Eliminata la tabella 'agenda'");
  }

  // Crea la tabella
  void creaTabella () {
  Connection conn;
    // Crea la connessione al nostro database
    conn = Conn ("//" + server + "/" + database, user, password, driver);
    if (conn != null) {	// Se la connessione e' stata creata...
      createTable (conn); // crea la tabella
    }
  }

  // Elimina la tabella
  void eliminaTabella () {
  Connection conn;
    // Crea la connessione al nostro database
    conn = Conn ("//" + server + "/" + database, user, password, driver);
    if (conn != null) {	// Se la connessione e' stata creata...
      dropTable (conn);   // la elimina
    }
  }

  // Gestione del bottone
  public boolean action(Event event, Object arg) {
    if (event.target == crea) {
      creaTabella ();  // Crea la tabella
    }
    if (event.target == elimina) {
      eliminaTabella (); // Elimina la tabella
    }
    return true;
  }
	
}