Visualizzazione dei risultati da 1 a 6 su 6

Discussione: Problema login utente

  1. #1

    Problema login utente

    ciao a tutti, sto facendo un piccola applicazione java con un database derby. Non riesco a fare il login dell'utente quando lancio l'applicazione, credo di aver problemi quando faccio la query o addirittura sbaglio nella crezione del database. Vi posto il codice.

    classe per la creazione del database

    codice:
    package db;
    
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    
    public class Db {
    
        public Db(){
            creaDB();
        }
    
            private void creaDB(){
    
                try {//è una versione embedded quindi va chiusa quando l'applicazione termina
                java.sql.Connection con = null;
                    Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
                try {
                    con = DriverManager.getConnection("jdbc:derby:Negozio");
                } catch (java.sql.SQLException sqle) {
                    try {
                        con = DriverManager.getConnection("jdbc:derby:Negozio;create=true");
                        con.createStatement().executeUpdate("CREATE TABLE UTENTE (IDUtente INT NOT NULL, login VARCHAR(20), password VARCHAR(8), nome VARCHAR(20), cognome VARCHAR(20))");
                        con.createStatement().executeUpdate("CREATE TABLE PRODOTTI (IDProdotto INT NOT NULL, nome VARCHAR(20))");
                        inserisciUtente(con);
                        
    
                    } catch (SQLException ex) {
                       System.out.println("Errore nella creazione delle tabelle o inserimento dati");
                    }
                }
                try {
                    //è una versione embedded quindi va chiusa quando l'applicazione termina
                    DriverManager.getConnection("jdbc:derby:Negozio;shutdown=true");
                } catch (SQLException se) {
                    //Stato = 08006 chiusura OK, altrimenti si è verificato un errore
                    if (!se.getSQLState().equals("08006")) {
                        throw se;
                    }
                }
                } catch (SQLException ex) {
                //
            } catch (ClassNotFoundException ex) {//Stato = 08006 chiusura OK, altrimenti si è verificato un errore
                //
                }
    
            }
    
            private static void inserisciUtente(java.sql.Connection con){
                   try {
                   con.setAutoCommit(false);
                   PreparedStatement s = con.prepareStatement("INSERT INTO UTENTE (IDUtente, login, password, nome, cognome) VALUES(?,?,?,?,?)");
                   s.setInt(1, 0);
                   s.setString(2, "admin");
                   s.setString(3, "admin");
                   s.setString(4, "Prova");
                   s.setString(5, "Prova");
                   s.executeUpdate();
                   } catch (SQLException sqle) {
                   if (con != null) {
                       try {
                           con.rollback();
                       } catch (SQLException sqle2) {
                           //log error
                       }
                   }
               }
    
           }
    
    
           private static void inserisciProdotto(java.sql.Connection con){
                   try {
                   con.setAutoCommit(false);
                   PreparedStatement s = con.prepareStatement("INSERT INTO PRODOTTI (IDProdotto, nome) VALUES(?,?)");
                   s.setInt(1, 13);
                   s.setString(2, "Prova1");
                   s.executeUpdate();
                   } catch (SQLException sqle) {
                   if (con != null) {
                       try {
                           con.rollback();
                       } catch (SQLException sqle2) {
                           //log error
                       }
                   }
               }
    
           }
    }

    classe che uso per il controllo

    codice:
    package db;
    
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Connection;
    
    public class Crud {
    
        private Connection con = null;
        
        public Crud(){
        }
    
        public void createCon() throws ClassNotFoundException{
            Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
            try {
                con = DriverManager.getConnection("jdbc:derby:Negozio");
                } catch (java.sql.SQLException sqle) {
                }
            
        }
    
        public void closeCon() throws SQLException{
             try {
                    //è una versione embedded quindi va chiusa quando l'applicazione termina
                    DriverManager.getConnection("jdbc:derby:Negozio;shutdown=true");
                } catch (SQLException se) {
                    //Stato = 08006 chiusura OK, altrimenti si è verificato un errore
                    if (!se.getSQLState().equals("08006")) {
                        throw se;
                    }
                }
    
        }
    
        public boolean checkUser (String login, String password) throws ClassNotFoundException, SQLException{
            createCon();
            Utente u = null;
    
            ResultSet rs =con.createStatement().executeQuery("SELECT login,password FROM UTENTE WHERE login ='"+login+"AND password ='"+password+"'");
            
            if(rs.next() == false){
                closeCon();
                return false;
            }
            closeCon();
            return true;
        }
        
    }
    infine questo è il frame dove c'è il login

    codice:
    package gui;
    
    
    import db.*;
    import java.sql.SQLException;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    import javax.swing.JOptionPane;
    
    public class PannelloLogin extends javax.swing.JPanel implements Finestra{
    
        public PannelloLogin() {
            initComponents();
        }
    
        @SuppressWarnings("unchecked")
        // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
        private void initComponents() {
    
            Accedi = new javax.swing.JButton();
            login = new javax.swing.JLabel();
            pass = new javax.swing.JLabel();
            user = new javax.swing.JTextField();
            parola = new javax.swing.JPasswordField();
            Cancella = new javax.swing.JButton();
    
            setPreferredSize(new java.awt.Dimension(800, 600));
            setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());
    
            Accedi.setText("Accedi");
            Accedi.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    AccediActionPerformed(evt);
                }
            });
            add(Accedi, new org.netbeans.lib.awtextra.AbsoluteConstraints(420, 330, -1, -1));
    
            login.setText("Username:");
            add(login, new org.netbeans.lib.awtextra.AbsoluteConstraints(280, 270, -1, -1));
    
            pass.setText("Password:");
            add(pass, new org.netbeans.lib.awtextra.AbsoluteConstraints(280, 300, -1, -1));
            add(user, new org.netbeans.lib.awtextra.AbsoluteConstraints(350, 260, 148, -1));
            add(parola, new org.netbeans.lib.awtextra.AbsoluteConstraints(350, 290, 148, -1));
    
            Cancella.setText("Cancella");
            Cancella.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    CancellaActionPerformed(evt);
                }
            });
            add(Cancella, new org.netbeans.lib.awtextra.AbsoluteConstraints(310, 330, -1, -1));
        }// </editor-fold>                        
    
        private void AccediActionPerformed(java.awt.event.ActionEvent evt) {                                       
            String username = user.getText();
            String password = parola.getText();
            if (username.equals("") || password.equals("")) 
                JOptionPane.showMessageDialog(null,"Compila tutti i campi!");
            else{
                Crud c = new Crud();
                try {
                    if (c.checkUser(username, password) == false) {
                        JOptionPane.showMessageDialog(null, "Accesso negato");
                    } else {
                        contenitore.remove(this);
                        contenitore.add(new PannelloAmministratore());
                        frame.pack();
                    }
                } catch (ClassNotFoundException ex) {
                    Logger.getLogger(PannelloLogin.class.getName()).log(Level.SEVERE, null, ex);
                } catch (SQLException ex) {
                    Logger.getLogger(PannelloLogin.class.getName()).log(Level.SEVERE, null, ex);
                }
                }
                
            
            frame.setVisible(true);
        }                                      
    
    
    
        private void CancellaActionPerformed(java.awt.event.ActionEvent evt) {                                         
            user.setText("");
            parola.setText("");
        }                                        
    
    
        // Variables declaration - do not modify                     
        private javax.swing.JButton Accedi;
        private javax.swing.JButton Cancella;
        private javax.swing.JLabel login;
        private javax.swing.JPasswordField parola;
        private javax.swing.JLabel pass;
        private javax.swing.JTextField user;
        // End of variables declaration                   
    
    
    
    }

  2. #2
    non ci hai detto se genera un errore, oppure se il codice "non lavora"...

  3. #3
    scusate.. Non mi genera un errore, semplicemente quando chiamo la funzione "checkUser", il ResultSet è sempre vuoto. Credo che la sintassi della query sia giusta, e nn riesco a capire dove sbaglio.. cioè se sbaglio a fare la query o sbaglio a creare il db..

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    procedi per gradi:
    passo 1. crea db e assicurati che sia stato creato.
    Significa che tu chiami la funzoine che lo crea, poi ti fermi e tenti l'accesso con un sistema esterno (tipo dbvisualizer o robe simili).
    Quando sei sicuro che il db ci sia, passa con le operazioni successive.
    2. crea utente
    e ovviamente controlla che ci sia....

    quando sei sicuro che tutti i micromoduli (creazione db, creazione utente ecc) funzionino, passa a farli in sequenza.
    In questo modo controlli meglio la causa dell'errore
    RTFM Read That F*** Manual!!!

  5. #5
    Allora, ho fatto un po' di prove.. il Database lo crea, perchè quando faccio delle query nella stessa classe dove creo il db funzionano, però quando mi creo la connessione nell'altra classe il ResultSet è sempre vuoto.. quindi credo che sia un problema di connessione al database nella nuova classe, e nn ho proprio idea di cosa sia di sbagliato..

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Non hai capito.
    Devi creare il database e fermarti.
    Poi apri un qualsiasi programma (tibo dbvisualizer) e prova la connessione al db che hai appena creato con il tuo codice java.
    Se tutto è andato bene, da dbvisualizer accedi al db.

    Poi prova a popolare con dbvisualizer il tuo database e prova a fare una query.
    Se va bene, il prossimo step è provare a popolare dal tuo codice il database.

    Come vedi devi isolare le fonti di errore, per poterne venire a capo. Tutto insieme non hai idea di cosa vada male.

    Tentare l'accesso al di fuori del tuo codice java equivale ad escludere e a capire dove è l'errore: è nel codice tuo o nel driver che stai usando?

    Se non riesci a separare questi passi prevedo che tu andrai avanti molto a lungo
    RTFM Read That F*** Manual!!!

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.