Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20

Discussione: Login java+ mysql

  1. #1
    Utente di HTML.it L'avatar di 1sirena
    Registrato dal
    Mar 2008
    Messaggi
    163

    Login java+ mysql

    Ciao a tutti,

    Ho un problema!
    sto creando un'applicazione in java con eclipse ho creato e connesso il database.
    Ho creato una pagina che consenta di effettuare la login con 2 JtextField e 1 Jbutton "entra". Qualcuno può consigliarmi su come gestire la login??

    il codice della pagina è:

    package org.schedule.iu;

    import java.awt.BorderLayout;
    import java.awt.Event;
    import java.awt.Point;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.KeyEvent;
    import javax.swing.ImageIcon;
    import javax.swing.JButton;
    import javax.swing.JDialog;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.JPanel;
    import javax.swing.JPasswordField;
    import javax.swing.JTextField;
    import javax.swing.KeyStroke;
    import javax.swing.SwingConstants;
    import javax.swing.SwingUtilities;


    import com.jgoodies.forms.layout.CellConstraints;
    import com.jgoodies.forms.layout.FormLayout;


    public class Login {

    private JFrame jFrame = null; // @jve:decl-index=0:visual-constraint="38,21"
    private JMenuBar jJMenuBar = null;
    private JMenu fileMenu = null;
    private JMenu editMenu = null;
    private JMenu helpMenu = null;
    private JMenuItem exitMenuItem = null;
    private JMenuItem aboutMenuItem = null;
    private JMenuItem cutMenuItem = null;
    private JMenuItem copyMenuItem = null;
    private JMenuItem pasteMenuItem = null;
    private JMenuItem saveMenuItem = null;
    private JPasswordField jPasswordField1;
    private JButton jButton1;
    private JLabel jLabel3;
    private JLabel jLabel2;
    private JTextField jTextField2;
    private JLabel jLabel1;
    private JDialog aboutDialog = null;
    private JPanel aboutContentPane = null;
    private JLabel aboutVersionLabel = null;

    private JFrame getJFrame() {
    if (jFrame == null) {
    jFrame = new JFrame();
    FormLayout jFrameLayout = new FormLayout(
    "max(p;5dlu), max(p;5dlu), max(p;5dlu), max(p;5dlu), max(p;5dlu), max(p;5dlu), max(p;5dlu)",
    "max(p;5dlu), max(p;5dlu), max(p;5dlu), max(p;5dlu), max(p;5dlu), max(p;5dlu), max(p;5dlu)");
    jFrame.getContentPane().setLayout(jFrameLayout);
    jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLO SE);
    jFrame.setJMenuBar(getJJMenuBar());
    jFrame.setSize(1025, 588);
    jFrame.setTitle("Schedule");
    jFrame.setPreferredSize(new java.awt.Dimension(1025, 588));
    jFrame.getContentPane().setBackground(new java.awt.Color(0,128,255));
    jFrame.getContentPane().add(getJLabel1(), new CellConstraints("4, 1, 1, 1, default, default"));
    jFrame.getContentPane().add(getJTextField2(), new CellConstraints("4, 2, 1, 1, default, default"));
    jFrame.getContentPane().add(getJPasswordField1(), new CellConstraints("4, 3, 1, 1, default, default"));
    jFrame.getContentPane().add(getJLabel2(), new CellConstraints("1, 2, 1, 1, right, top"));
    jFrame.getContentPane().add(getJLabel3(), new CellConstraints("1, 3, 1, 1, right, top"));
    jFrame.getContentPane().add(getJButton1(), new CellConstraints("4, 4, 1, 1, default, default"));
    }
    return jFrame;
    }

    private JMenuBar getJJMenuBar() {
    if (jJMenuBar == null) {
    jJMenuBar = new JMenuBar();
    jJMenuBar.add(getFileMenu());
    jJMenuBar.add(getEditMenu());
    jJMenuBar.add(getHelpMenu());
    }
    return jJMenuBar;
    }


    private JMenu getFileMenu() {
    if (fileMenu == null) {
    fileMenu = new JMenu();
    fileMenu.setText("File");
    fileMenu.add(getSaveMenuItem());
    fileMenu.add(getExitMenuItem());
    }
    return fileMenu;
    }

    private JMenu getEditMenu() {
    if (editMenu == null) {
    editMenu = new JMenu();
    editMenu.setText("Edit");
    editMenu.add(getCutMenuItem());
    editMenu.add(getCopyMenuItem());
    editMenu.add(getPasteMenuItem());
    }
    return editMenu;
    }


    private JMenu getHelpMenu() {
    if (helpMenu == null) {
    helpMenu = new JMenu();
    helpMenu.setText("Help");
    helpMenu.add(getAboutMenuItem());
    }
    return helpMenu;
    }

    private JMenuItem getExitMenuItem() {
    if (exitMenuItem == null) {
    exitMenuItem = new JMenuItem();
    exitMenuItem.setText("Exit");
    exitMenuItem.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
    System.exit(0);
    }
    });
    }
    return exitMenuItem;
    }

    private JMenuItem getAboutMenuItem() {
    if (aboutMenuItem == null) {
    aboutMenuItem = new JMenuItem();
    aboutMenuItem.setText("About");
    aboutMenuItem.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
    JDialog aboutDialog = getAboutDialog();
    aboutDialog.pack();
    Point loc = getJFrame().getLocation();
    loc.translate(20, 20);
    aboutDialog.setLocation(loc);
    aboutDialog.setVisible(true);
    }
    });
    }
    return aboutMenuItem;
    }

    private JDialog getAboutDialog() {
    if (aboutDialog == null) {
    aboutDialog = new JDialog(getJFrame(), true);
    aboutDialog.setTitle("About");
    aboutDialog.setContentPane(getAboutContentPane());
    }
    return aboutDialog;
    }

    private JPanel getAboutContentPane() {
    if (aboutContentPane == null) {
    aboutContentPane = new JPanel();
    aboutContentPane.setLayout(new BorderLayout());
    aboutContentPane.add(getAboutVersionLabel(), BorderLayout.CENTER);
    }
    return aboutContentPane;
    }

    private JLabel getAboutVersionLabel() {
    if (aboutVersionLabel == null) {
    aboutVersionLabel = new JLabel();
    aboutVersionLabel.setText("Version 1.0");
    aboutVersionLabel.setHorizontalAlignment(SwingCons tants.CENTER);
    }
    return aboutVersionLabel;
    }

    private JMenuItem getCutMenuItem() {
    if (cutMenuItem == null) {
    cutMenuItem = new JMenuItem();
    cutMenuItem.setText("Cut");
    cutMenuItem.setAccelerator(KeyStroke.getKeyStroke( KeyEvent.VK_X,
    Event.CTRL_MASK, true));
    }
    return cutMenuItem;
    }

    private JMenuItem getCopyMenuItem() {
    if (copyMenuItem == null) {
    copyMenuItem = new JMenuItem();
    copyMenuItem.setText("Copy");
    copyMenuItem.setAccelerator(KeyStroke.getKeyStroke (KeyEvent.VK_C,
    Event.CTRL_MASK, true));
    }
    return copyMenuItem;
    }

    private JMenuItem getPasteMenuItem() {
    if (pasteMenuItem == null) {
    pasteMenuItem = new JMenuItem();
    pasteMenuItem.setText("Paste");
    pasteMenuItem.setAccelerator(KeyStroke.getKeyStrok e(KeyEvent.VK_V,
    Event.CTRL_MASK, true));
    }
    return pasteMenuItem;
    }

    private JMenuItem getSaveMenuItem() {
    if (saveMenuItem == null) {
    saveMenuItem = new JMenuItem();
    saveMenuItem.setText("Save");
    saveMenuItem.setAccelerator(KeyStroke.getKeyStroke (KeyEvent.VK_S,
    Event.CTRL_MASK, true));
    }
    return saveMenuItem;
    }

    public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
    public void run() {
    Login application = new Login();
    application.getJFrame().setVisible(true);
    }
    });
    }

    private JLabel getJLabel1() {
    if(jLabel1 == null) {
    jLabel1 = new JLabel();
    jLabel1.setText(" " +
    "");
    jLabel1.setIcon(new ImageIcon(getClass().getClassLoader().getResource( "img/schedule.png")));
    }
    return jLabel1;
    }

    private JTextField getJTextField2() {
    if(jTextField2 == null) {
    jTextField2 = new JTextField();
    }
    return jTextField2;
    }

    private JPasswordField getJPasswordField1() {
    if(jPasswordField1 == null) {
    jPasswordField1 = new JPasswordField();
    }
    return jPasswordField1;
    }

    private JLabel getJLabel2() {
    if(jLabel2 == null) {
    jLabel2 = new JLabel();
    jLabel2.setText("Username");
    jLabel2.setFont(new java.awt.Font("Comic Sans MS",1,18));
    jLabel2.setBackground(new java.awt.Color(0,128,192));
    jLabel2.setLocation(new java.awt.Point(0, 0));
    jLabel2.setForeground(new java.awt.Color(255,255,255));
    }
    return jLabel2;
    }

    private JLabel getJLabel3() {
    if(jLabel3 == null) {
    jLabel3 = new JLabel();
    jLabel3.setText("Password");
    jLabel3.setFont(new java.awt.Font("Comic Sans MS",1,18));
    jLabel3.setForeground(new java.awt.Color(255,255,255));
    }
    return jLabel3;
    }

    private JButton getJButton1() {
    if(jButton1 == null) {
    jButton1 = new JButton();
    jButton1.setText("entra");
    }
    return jButton1;
    }

    }

  2. #2
    Devi lavorare sul metodo actionPerformed del tuo JButton, e per tenere traccia dell'avvenuto login potresti aggiungere un campo statico:

    Codice PHP:

    public static boolean utenteLoggato false;

    ...

    jButton1.addActionListener(new java.awt.event.ActionListener() {
         public 
    void actionPerformed(java.awt.event.ActionEvent evt) {
            try{
              
    //creo la connessione al db
              
    Class.forName("com.mysql.jdbc.Driver");
              
    Connection con db DriverManager.getConnection("jdbc:mysql://"+indirizzo_ip_db+"/" nomeDB "?user=" nomeUtenteDb "&password=" pwdUtenteDb);
              
    //verifico se nella tabella utenti c'è quello corrispondente ai parametri inseriti
              
    PreparedStatement preparedStatement con.prepareStatement("Select count(*) as num from tabellaUtenti where username= ? and password=?");
              
    preparedStatement.setString(1textFieldUsername.getText());
              
    preparedStatement.setString(2textFieldPassword.getText());
                    
              
    ResultSet resultSet preparedStatement.executeQuery();
              if(
    resultSet.next()){
                   if(
    resultSet.getString("num").equals("0")){
                        
    utenteLoggato false;
                   }else{
                        
    utenteLoggato true;
                        .....
                   }
              }
              
    resultSet.close();
              
    preparedStatement.close();
              
    con.close();
           }
    catcth(Exception e){
              
    e.printStackTrace();
           }
         }
    }); 
    Io ho scritto anche la connessione in quel metodo senza tenere conto di ottimizzazioni varie che devono invece essere fatte, ma tu puoi adattare alle tue esigenze ottimizzando il tutto come meglio credi.
    Al mio segnale... scatenate l'inferno!

  3. #3
    Utente di HTML.it L'avatar di 1sirena
    Registrato dal
    Mar 2008
    Messaggi
    163
    grazie per l'aiuto ... pero' preparedStatement mi dà due errori:

    PrepareStatement preparedStatement = con.preparedStatement();

    1) sul primo PrepareStatement dice: cannot be resolved to a type

    2) sul secondo dice che il method non è definito per il tipo di connessione

  4. #4
    Utente di HTML.it L'avatar di 1sirena
    Registrato dal
    Mar 2008
    Messaggi
    163
    ah poi un'altro dubbio ... ma che tipo di select ti fà:

    select count(*) as num from tabella where username=? and password=?


    al posto di num che va'?? cioè cosa dovrebbe selezionare??

  5. #5
    Per il primo problema hai invertito le cose

    PreparedStatement preparedStatement = con.prepareStatement();


    per la query, in pratica con count(*) conti il numero di record che soddisfano i criteri della clausola where. In questo caso restituisce 0 se la username non esiste o se la password è sbagliata, mentre restituisce 1 se i parametri sono corretti.

    per quanto riguarda as num, num è un alias che ho utilizzato per poter prendere il risultato. Tu puoi scriverci qualsiasi cosa l'importante è che poi sul resultSet richiami ciò che hai scritto. Ad esempio

    Select count(*) as numeroUtenti from tabellaUtenti where username= ? and password=?

    ...

    if(resultSet.getString("numeroUtenti").equals("0") ){

    Al mio segnale... scatenate l'inferno!

  6. #6
    Utente di HTML.it L'avatar di 1sirena
    Registrato dal
    Mar 2008
    Messaggi
    163
    Ciao la login funziona! al tuo codice ho aggiunto delle finestre di avviso e d'errore per confermare o meno l'accesso all'applicazione. Quando l'utente effettua l'accesso nessun problema mi visualizza la finestra d'avviso "Utente loggato". Quando invece la login e password inserite sono errate non visualizza niente...

    quale può essere il problema??

    codice:
    ....................
    
    private JButton getJButton1() {
    		if(jButton1 == null) {
    			jButton1 = new JButton();
    			jButton1.setText("entra");
    			jButton1.addActionListener(new java.awt.event.ActionListener()  {
    				public void actionPerformed(java.awt.event.ActionEvent evt) {
    					System.out.println("jButton1.actionPerformed, event="+evt);
    					//TODO add your code for jButton1.actionPerformed
    					try{ 
    				          //creo la connessione al db 
    				          Class.forName("com.mysql.jdbc.Driver"); 
    				          Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/schedule" , "root","root"); 
    				          //verifico se nella tabella utenti c'è quello corrispondente ai parametri inseriti 
    				          PreparedStatement preparedStatement = con.prepareStatement("Select cognome, password as num from Utente_docente where cognome= ? and password=?"); 
    				          preparedStatement.setString(1, textFieldUsername.getText()); 
    				          preparedStatement.setString(2, textFieldPassword.getText()); 
    				                 
    				          ResultSet rs = preparedStatement.executeQuery(); 
    				          if(rs.next()){ 
    				               if(rs.getString("num").equals("0")){ 
    				                    utenteLoggato = false; 
    				                    JOptionPane.showMessageDialog(null, "Riprova","Login", JOptionPane.ERROR_MESSAGE);
    				                	
    				               }else{ 
    				                    utenteLoggato = true; 
    				                   // System.out.println("utente loggato");
    				                    JOptionPane.showMessageDialog(null, "Utente loggato" ,"Login", JOptionPane.INFORMATION_MESSAGE);
    				                	 
    				               } 
    				          } 
    				          rs.close(); 
    				          preparedStatement.close(); 
    				          con.close(); 
    				       }
    					catch(Exception e){ 
    				          e.printStackTrace(); 
    				       } 
    				     } 
    				});
    
    		}
    		return jButton1;
    	}
    
    }

  7. #7
    La query che hai scritto tu è diversa dalla mia. La mia query restituisce sempre un "qualcosa", e per la precisione:

    restituisce 0 se non ci sono utenti corrispondenti ai parametri inseriti
    restituisce 1 (si presume che ci sia UN solo utente all'interno della tabella con quei parametri)

    Così come hai scritto tu invece se non ci sono utenti con quei parametri non viene restituito alcun record e pertanto il tuo resultset è vuoto. Questo vuol dire che rs.next() restituirà FALSE e quindi non entra nell'if. Inoltre come hai fatto tu non ha più senso scrivere nella query AS NUM, dato che ogni campo è recuperabile tramite il proprio nome.

    Inoltre la tua query sebbene funzioni correttamente, sarebbe errata dal punto di vista logico. Che senso ha recuperare i valori di Cognome e Password se già li conosci visto che sono presenti nella clausola WHERE? Questa cosa avrebbe senso se fosse restituito più di un record. Ma siccome per una login hai sicuramente un unico record come risultato, lo trovo un pò inutile. Ecco perchè ho utilizzato count(*).
    Ora se non vuoi utilizzare la funzione count(*) (che non è un nome di colonna e quindi per recuperarne il valore dal resultset hai bisogno di un alias come avevo fatto io) devi modificare anche il resto del codice:

    Codice PHP:
    PreparedStatement preparedStatement con.prepareStatement("Select cognome, password from Utente_docente where cognome= ? and password=?"); 
    preparedStatement.setString(1textFieldUsername.getText()); 
    preparedStatement.setString(2textFieldPassword.getText()); 
    ResultSet rs preparedStatement.executeQuery(); 
    if(
    rs.next()){ 
         ....
    utente loggato...
    }else{ 
         ...
    utente non loggato     

    Ma questa cosa qui non è il massimo da fare, perchè la query può fallire per un qualsiasi motivo (problemi di connessione, ecc...) anche se magari le credenziali inserite sono corrette.

    Spero di essermi spiegato come si deve

    Al mio segnale... scatenate l'inferno!

  8. #8
    Utente di HTML.it L'avatar di 1sirena
    Registrato dal
    Mar 2008
    Messaggi
    163
    Grazie per la spiegazione!!
    ora funziona!!

    Però vorrei mettere un controllo anche quando l'utente non compila i campi relativi alla propria username e password...
    come posso fare??


    ti ringrazio ancora!!

  9. #9
    basta fare un controllo appena parte l'actionPerformed del pulsante:

    Codice PHP:
    public void actionPerformed(java.awt.event.ActionEvent evt) {
         try{
              if(
    textFieldUsername.getText().equals("") || textFieldPassword.getText().equals("")) {
                   
    JOptionPane.showMessageDialog(null"Inserire Username e Password","Login"JOptionPane.ERROR_MESSAGE);
              }else{
                    
    //...esegui controllo dal db
              
    }
         }catch(
    Exception ex){
              
    ex.printStackTrace();
         }


    Al mio segnale... scatenate l'inferno!

  10. #10
    Utente di HTML.it L'avatar di 1sirena
    Registrato dal
    Mar 2008
    Messaggi
    163
    Funziona!!

    Nella prima risposta mi hai scritto:

    "Io ho scritto anche la connessione in quel metodo senza tenere conto di ottimizzazioni varie che devono invece essere fatte, ma tu puoi adattare alle tue esigenze ottimizzando il tutto come meglio credi."


    Ho letto che bisogna dividere la logica di business dalla logica d'interfaccia!!
    In teoria più o meno ho capito come si fa...
    Potresti spiegarmi in pratica o con parole più "semplici" come si realizza??

    Grazie ancora per la tua disponibilità!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.