ho fatto un applet java che si connette a un database tramite il connettore mysql (scaricato ed estratto nella directory dell'applet).

Se lo faccio partire da JCreator o dal prompt, riesce a connettersi.

Se lo faccio partire con un applet, non si connette.
Controllando il codice, ho visto che si blocca alla chiamata di Drivermanager.getConnection

codice:
db = DriverManager.getConnection("jdbc:mysql://localhost/"+nomeDB.trim()+"?user="+nomeUtente.trim()+"&password="+pwdUtente.trim());
il programma viene compilato correttamente, quindi l'errore non dovrebbe essere dovuto alla chiamata di DriverManager.getConnection(), ma penso sia dovuto alla stringa dell'url....però bo.

Ho anche compresso tutte le classi e cartelle ricorsivamente in un file jar, e l'ho messo nel tag archive dell'applet, ma non si connette. Infine per disperazione, ho messo tutte le classi (tranne quelle del driver) nello stesso file, ma.....non si connette.



il problema è nell'applet? o nell'url? o altro? che fare?
vi posto il codice di file java e file html

codice:
 
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;
import java.applet.*;
import javax.swing.*;
import java.lang.*;
import java.io.*;
import java.sql.*;
import java.util.Vector;
import java.net.*;
import java.*;

public class login extends JApplet{
    static JTextField tu;
    static JTextField tp;
    static JLabel label_3;
    JLabel label_4;
    static JButton button_2;
    static JLabel label_5;
	static JButton button_1;
	
	
public void init() {
        loginLayout customLayout = new loginLayout();

        getContentPane().setFont(new Font("Helvetica", Font.PLAIN, 12));
        getContentPane().setLayout(customLayout);

        tu = new JTextField("");
        getContentPane().add(tu);

        tp = new JTextField("");
        getContentPane().add(tp);

        label_3 = new JLabel("Nome Utente");
        getContentPane().add(label_3);

        label_4 = new JLabel("Password");
        getContentPane().add(label_4);

        button_2 = new JButton("Login");
        button_2.addActionListener(new bott());
		getContentPane().add(button_2);
		
        label_5 = new JLabel("Il nome utente o la password che hai inserito non sono corretti.");
        getContentPane().add(label_5);
        
        button_1 = new JButton("Iscriviti!");
        getContentPane().add(button_1);

        setSize(getPreferredSize());
        

}


class loginLayout implements LayoutManager {

    public loginLayout() {
    }

    public void addLayoutComponent(String name, Component comp) {
    }

    public void removeLayoutComponent(Component comp) {
    }

    public Dimension preferredLayoutSize(Container parent) {
        Dimension dim = new Dimension(0, 0);

        Insets insets = parent.getInsets();
        dim.width = 260 + insets.left + insets.right;
        dim.height = 130 + insets.top + insets.bottom;

        return dim;
    }

    public Dimension minimumLayoutSize(Container parent) {
        Dimension dim = new Dimension(0, 0);
        return dim;
    }

    public void layoutContainer(Container parent) {
        Insets insets = parent.getInsets();

        Component c;
        c = parent.getComponent(0);
        if (c.isVisible()) {c.setBounds(insets.left+96,insets.top+8,72,24);}
        c = parent.getComponent(1);
        if (c.isVisible()) {c.setBounds(insets.left+96,insets.top+40,72,24);}
        c = parent.getComponent(2);
        if (c.isVisible()) {c.setBounds(insets.left+8,insets.top+8,88,24);}
        c = parent.getComponent(3);
        if (c.isVisible()) {c.setBounds(insets.left+24,insets.top+40,72,24);}
        c = parent.getComponent(4);
        if (c.isVisible()) {c.setBounds(insets.left+184,insets.top+40,72,24);}
        c = parent.getComponent(5);
        if (c.isVisible()) {c.setBounds(insets.left+8,insets.top+72,248,24);}
        c = parent.getComponent(6);
        if (c.isVisible()) {c.setBounds(insets.left+80,insets.top+100,102,24);}
    }
}
}

class bott extends JPanel implements ActionListener {
	
	public void actionPerformed(ActionEvent e){

	
	
	
	//label_5.setText("premuto"+label_5.getText());
//URL url=getDocumentBase();
//tu.setText(url.toString());

Database db5 = new Database("pro1","root","gun");
	  if( !db5.connetti() ) {
	   	
   	login.label_5.setText("disconnesso"); 
   	
  }else
  {   	login.label_5.setText("connesso"); 
  		
  		db5.disconnetti();}
	
	

  

	
}

  
}


 class Database {
   private String nomeDB;       // Nome del Database a cui connettersi
   private String nomeUtente;   // Nome utente utilizzato per la connessione al Database
   private String pwdUtente;    // Password usata per la connessione al Database
   private String errore;       // Raccoglie informazioni riguardo l'ultima eccezione sollevata
   private Connection db;       // La connessione col Database
   private boolean connesso;    // Flag che indica se la connessione è attiva o meno

   public Database(String nomeDB) { this(nomeDB, "", ""); }

   public Database(String nomeDB, String nomeUtente, String pwdUtente) {
   
      this.nomeDB = nomeDB;
      this.nomeUtente = nomeUtente;
      this.pwdUtente = pwdUtente;
      connesso = false;
      errore = "";
   }

   // Apre la connessione con il Database     localhost:uuuuuuuuuuuurl
    
   public boolean connetti() {

      connesso = false;
      try {

         // Carico il driver JDBC per la connessione con il database MySQL
         Class.forName("com.mysql.jdbc.Driver");
         

         // Controllo che il nome del Database non sia nulla
         if (!nomeDB.equals("")) {

            // Controllo se il nome utente va usato o meno per la connessione
            if (nomeUtente.equals("")) {

               // La connessione non richiede nome utente e password
               db = DriverManager.getConnection("jdbc:mysql://localhost/" + nomeDB);
               //db = DriverManager.getConnection("jdbc:mysql:3306//localhostsql.progettoquis.x10.mx/" + nomeDB);
               
            } else {

               // La connessione richiede nome utente, controllo se necessita anche della password
               if (pwdUtente.equals("")) {
 
                  // La connessione non necessita di password
                  db = DriverManager.getConnection("jdbc:mysql://localhost/" + nomeDB + "?user=" + nomeUtente);
               //   db = DriverManager.getConnection("jdbc:mysql:3306//sql.progettoquis.x10.mx/" + nomeDB + "?user=" + nomeUtente);
               } else {
//login.label_5.setText(""+nomeDB+" "+nomeUtente+" "+pwdUtente); 
                  // La connessione necessita della password
                  db = DriverManager.getConnection("jdbc:mysql://localhost/"+nomeDB.trim()+"?user="+nomeUtente.trim()+"&password="+pwdUtente.trim());
               	  //login.label_5.setText("4"); 
               	  //db = DriverManager.getConnection("jdbc:mysql:3306//sql.progettoquis.x10.mx/" + nomeDB + "?user=" + nomeUtente + "&password=" + pwdUtente);
               }
            }

            // La connessione è avvenuta con successo
            connesso = true;
         } else {
         		JOptionPane.showMessageDialog(null,"Scrivere il nome del database da utilizzare all'interno del file \"config.xml\"", "Manca il nome del database", JOptionPane.INFORMATION_MESSAGE); 
  
            System.exit(0);
         }
      } catch (Exception e) { errore = e.getMessage(); }
      return connesso;
   }

   // Esegue una query di selezione dati sul Database
   // query: una stringa che rappresenta un'istruzione SQL di tipo SELECT da eseguire
   // colonne: il numero di colonne di cui sarà composta la tupla del risultato
   // ritorna un Vector contenente tutte le tuple del risultato
   public Vector eseguiQuery(String query) {
      Vector v = null;
      String [] record;
      int colonne = 0;
      try {
         Statement stmt = db.createStatement();     // Creo lo Statement per l'esecuzione della query
         ResultSet rs = stmt.executeQuery(query);   // Ottengo il ResultSet dell'esecuzione della query
         v = new Vector();
         ResultSetMetaData rsmd = rs.getMetaData();
         colonne = rsmd.getColumnCount();

         while(rs.next()) {   // Creo il vettore risultato scorrendo tutto il ResultSet
            record = new String[colonne];
            for (int i=0; i<colonne; i++) record[i] = rs.getString(i+1);
            v.add( (String[]) record.clone() );
         }
         rs.close();     // Chiudo il ResultSet
         stmt.close();   // Chiudo lo Statement
      } catch (Exception e) { e.printStackTrace(); errore = e.getMessage(); }

      return v;
   }

   // Esegue una query di aggiornamento sul Database
   // query: una stringa che rappresenta un'istuzione SQL di tipo UPDATE da eseguire
   // ritorna TRUE se l'esecuzione è adata a buon fine, FALSE se c'è stata un'eccezione
   public boolean eseguiAggiornamento(String query) {
      int numero = 0;
      boolean risultato = false;
      try {
         Statement stmt = db.createStatement();
         numero = stmt.executeUpdate(query);
         risultato = true;
         stmt.close();
      } catch (Exception e) {
         e.printStackTrace();
         errore = e.getMessage();
         risultato = false;
      }
      return risultato;
   }

   // Chiude la connessione con il Database
   public void disconnetti() {
      try {
         db.close();
         connesso = false;
      } catch (Exception e) { e.printStackTrace(); }
   }

   public boolean isConnesso() { return connesso; }   // Ritorna TRUE se la connessione con il Database è attiva
   public String getErrore() { return errore; }       // Ritorna il messaggio d'errore dell'ultima eccezione sollevata
   
   
   	

}//FINE CLASSE

applet:

codice:
 
<HTML><BODY>




  <APPLET CODE="login.class"  WIDTH=300 HEIGHT=300>
	  
</applet>

</BODY>


</HMTL>