Newsgroup: it.comp.java
Titolo: inserimento login e pwd

ciao a tutti...questo è il codice di un esperimento per connettermi ad
un database mysql dove ho una tabella con 2 colonne:username e pwd.
se i dati inseriti non sono presenti nella suddetta tabella si apre un
messaggio di errore....solo che praticamente si apre sempre perchè non
riesco a fare controllare il contenuto inserito nei JTextField campo1 e
campo2......accetto suggerimenti,consigli o magari la
soluzione!!!CIAO!!PER FAVORE RISPONDETE!!!
package test1;
import java.lang.*;
import java.io.*;
import java.sql.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class login extends JFrame{
  JTextField campo1,campo1b,campo2b;
  JPasswordField campo2;
  String url ="jdbc:mysql://
127.0.0.1/datianagrafici
";
  String pwd;
  String user;
  public login() {
   ImageIcon icona=new ImageIcon("icona.gif");
   JLabel lab=new JLabel(icona);
   setTitle("login");
   Container cont= getContentPane();
   cont.setLayout(new FlowLayout());
   campo1=new JTextField(10);         //  USER
   campo2=new JPasswordField(10);      // PWD
   cont.add(campo1);
   cont.add(campo2);
   campo1b=new JTextField("username");
   campo2b=new JTextField("password");
   campo1b.setEditable(false);
   campo2b.setEditable(false);
   cont.add(campo1b);
   cont.add(campo2b);
   cont.add(lab);
   TextFieldHandler gestore=new TextFieldHandler();
   campo2.addActionListener(gestore);
   setSize(400,200);
   setVisible(true);
  }
 private class TextFieldHandler implements ActionListener {
  public void actionPerformed(ActionEvent event) {
    try {
        user=event.getActionCommand(); // COME FACCIO A RENDERLA UNA
STRINGA??
        pwd=new String(campo2.getPassword());
         if(event.getSource()==campo2)
        Class.forName("com.mysql.jdbc.Driver");
        Connection conn = DriverManager.getConnection(url,user,pwd);
        Statement s = conn.createStatement();
        ResultSet r=s.executeQuery("select pwd,username from accounts
where   username="+user+"and pwd="+pwd);
        if(r == null) //SE IL RESULTSET E' NULLO SI APRE AL FINESTRA DI
ERRORE!
        JOptionPane.showMessageDialog(null,"username e/o password
errati!!!");
        else {
        dati d=new dati();  // ALTRIMENTI SI APRE UN'ALTRO
JFRAME.......
        d.restdati();  // METODO CHE CHIEDE UNA NUOVA CONNESSIONE AL
DB....
        }
        r.close();
        s.close();
        conn.close();
    } catch(ClassNotFoundException e) {
                System.out.println(e.toString());
                System.out.println("Il driver non può essere
caricato");
                System.exit(1);
      }
      catch(SQLException sql) {
      JOptionPane.showMessageDialog(null,"username e/o password
errati!!!");
      }
  }
 }
}

"select pwd,username from accounts where   username="+user+"and pwd="+pwd
direi che non ci sono gli apici per le stringhe...
3)if(r == null) //SE IL RESULTSET E' NULLO SI APRE AL FINESTRA DI ERRORE!
Dovresti controllare che il result set sia o no vuoto, non se sia null 
(anche perché non è mai null stando alla documentazione)
Non sarà che la finestra di errore ti viene perché intercetta una 
SQLException quando esegue la query senza apici?? quando fai catch 
dell'eccezione fatti stampare lo stacktrace, e comunque dai un errore 
diverso da "username e/o password errati!!!" che è ingannevole....
ciao!
-- 

         if(event.getSource()==campo2)
        Class.forName("com.mysql.jdbc.Driver");
        Connection conn = DriverManager.getConnection(url,user,pwd);
        Statement s = conn.createStatement();
        ResultSet r=s.executeQuery("select pwd,username from accounts
where   username="+user+"and pwd="+pwd);
        if(r == null) //SE IL RESULTSET E' NULLO SI APRE AL FINESTRA DI
ERRORE!
Direi che mancano le graffe:
        if(event.getSource()==campo2)
         {
          Class.forName("com.mysql.jdbc.Driver");
          Connection conn = DriverManager.getConnection(url,user,pwd);
          Statement s = conn.createStatement();
          ResultSet r=s.executeQuery("select pwd,username from accounts
where   username="+user+"and pwd="+pwd);
          if(r == null) //SE IL RESULTSET E' NULLO SI APRE AL FINESTRA DI
ERRORE!
       }
Altrimenti viene eseguito solo il Class.forName("com.mysql.jdbc.Driver"); se 
l'if da' true.
N.B. Ma Class.forName("com.mysql.jdbc.Driver"); non sarebbe meglio 
all'inizio, una volta per tutte?

 se l'if da' true.
Scusa, mi sono espresso male, volevo dire che se l'if dà false, anche se non 
viene eseguito il Class.forName("com.mysql.jdbc.Driver"); , vengono comunque 
eseguite le righe successive.