java con swing e sql

Stato
Discussione chiusa ad ulteriori risposte.

sare1234

Utente Attivo
262
3
Buongiorno sto realizzando l'iscrizione con MVC in java swing e database sql (pgAdmin4) ma ho un problema tutto funziona ma nella tabella sql non mi vengono caricati i dati potete aiutarmi vi inserisco il codice relativo alla registrazione:
Java:
public class DaoUtente {
   
    public static boolean creaUtente(Utente utente) throws SQLException,Exception
    {
        final String INSERIMENTO = "INSERT INTO utenti(nome, cognome, email, password, NumeroTelefonico, DataDiNascita) VALUES (?,?,?,?,?,?)";
        Connection conn = null;
        PreparedStatement stmt = null;
       
        if(effettua_accesso(utente.getEmail(),utente.getPassword()))  
        {
            conn = DBconnection.getInstance().getConn();
            stmt = conn.prepareStatement(INSERIMENTO);
            stmt.setString(1, utente.getNome());
            stmt.setString(2, utente.getCognome());
            stmt.setString(3, utente.getEmail());
            stmt.setString(4, utente.getPassword());
            stmt.setString(5, utente.getNumeroTelefonico());
            stmt.setString(6, utente.getDataDiNascita());
            stmt.executeUpdate();
            stmt.close();
            conn.close();
            return true;
        }
        return false;
           
    }
   
   
        public static boolean effettua_accesso(String Email, String password) throws SQLException,Exception
    {
        final String RICERCA_PASSWORD="SELECT*FROM utenti where Email=? and password=?";
        Connection conn = DBconnection.getInstance().getConn();
        PreparedStatement stmt = conn.prepareStatement(RICERCA_PASSWORD);
        stmt.setString(1, Email);
        stmt.setString(2,password);
        ResultSet rs=stmt.executeQuery();
           
            if(!rs.next())
            {
                rs.close();
                return false;
            }
            else
            {
                rs.close();
                return true;
            }      
           
    }
Java:
public void creaUtente(Utente utente)
    {
        if(inputVuoto(utente)==false){
            {
                try {
                    if(DaoUtente.creaUtente(utente))
                    {
                        VisualizzazioneErrore("Iscrizione Effettuata con successo");
                    }
                    else
                    {
                        VisualizzazioneErrore("Utente già presente");
                    }
                } catch (SQLException e) {
                    VisualizzazioneErrore(e.getMessage()    );
                }
                catch(Exception e)
                {
                    VisualizzazioneErrore(e.getMessage());
                }
            }
        }
        else
        {
            VisualizzazioneErrore("alcuni campi sono vuoti");
        }
    }
SQL:
CREATE TABLE utenti
          (
           Id serial primary key
           Nome character varing(25),
           Cognome character varing(25),
           Email character varing(25),
           NumeroTelefonico character varing(25),
           DataDiNascita character varing(25),
           Password character varing(25)          
          );

Potete aiutami?
Grazie mille
 
Ultima modifica:

BAT

Moderatore
Staff Forum
Utente Èlite
22,448
11,351
CPU
1-Neurone
Dissipatore
Ventaglio
RAM
Scarsa
Net
Segnali di fumo
OS
Windows 10000 BUG
prova a togliere il final alle stringhe che passi ai PreparedStatement, lascia solo String
 

Matty25

Utente Attivo
174
17
CPU
i7 7700k
Dissipatore
NZXT Kraken x62
Scheda Madre
MSI Z270 M5
HDD
2x 850 EVO + 2x WD BLUE 1 TB
RAM
G.Skill Trident Z 16GB 3200MHz
GPU
GTX 1080 TI GAMING X 11G
Monitor
Acer XB271HU
PSU
EVGA G2 750W
Case
H500P Mesh
Net
FTTH TIM 1000/100 Mb/s
OS
Windows 10 Pro
Ma sei il metodo effettua_accesso ritorna true quando l'utente esiste, non dovresti controllare che ritorni false quando vai a creare l'utente? Al momento controlli che sia true, quindi vai a creare l'utente quando esista già. Almeno mi sembra di aver capito così.
 

sare1234

Utente Attivo
262
3
Ma sei il metodo effettua_accesso ritorna true quando l'utente esiste, non dovresti controllare che ritorni false quando vai a creare l'utente? Al momento controlli che sia true, quindi vai a creare l'utente quando esista già. Almeno mi sembra di aver capito così.
si ma neanche va nella tabella su database non mi compare lo stesso...non penso ci siamo errori nelle funzioni che ho creato
 

Matty25

Utente Attivo
174
17
CPU
i7 7700k
Dissipatore
NZXT Kraken x62
Scheda Madre
MSI Z270 M5
HDD
2x 850 EVO + 2x WD BLUE 1 TB
RAM
G.Skill Trident Z 16GB 3200MHz
GPU
GTX 1080 TI GAMING X 11G
Monitor
Acer XB271HU
PSU
EVGA G2 750W
Case
H500P Mesh
Net
FTTH TIM 1000/100 Mb/s
OS
Windows 10 Pro
Quindi hai provato a cambiare la condizione
Codice:
if(effettua_accesso(utente.getEmail(),utente.getPassword()))
con
Codice:
if(!effettua_accesso(utente.getEmail(),utente.getPassword()))
e non funziona comunque?
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,207
1,844
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Posta il codice completo, mi sembra manchi qualcosa... come i parametri che usi per la connessione (non penso sia cambiato qualcosa in merito, rispetto al passato) e il nome del driver.

Inoltre: le eccezioni che lanchi al chiamante, le gestisci o le ignori? Magari ci sono info importanti...
 

sare1234

Utente Attivo
262
3
Quindi hai provato a cambiare la condizione
Codice:
if(effettua_accesso(utente.getEmail(),utente.getPassword()))
con
Codice:
if(!effettua_accesso(utente.getEmail(),utente.getPassword()))
e non funziona comunque?
si esatto non va lo stesso
Post unito automaticamente:

Posta il codice completo, mi sembra manchi qualcosa... come i parametri che usi per la connessione (non penso sia cambiato qualcosa in merito, rispetto al passato) e il nome del driver.

Inoltre: le eccezioni che lanchi al chiamante, le gestisci o le ignori? Magari ci sono info importanti...
Java:
package Classi;

import java.util.ArrayList;

public class Utente {
   
    private String Nome;
    private String Cognome;
    private String Email;
    private String Password;
    private String DataDiNascita;
    private String NumeroTelefonico;
    private Indirizzo indirizzo;
    private ArrayList<Ordine> ordine;
    private Foto foto;
   
   
   
    public Utente(String nome, String cognome, String email, String password, String dataDiNascita,
            String numeroTelefonico) {
        super();
        Nome = nome;
        Cognome = cognome;
        Email = email;
        Password = password;
        DataDiNascita = dataDiNascita;
        NumeroTelefonico = numeroTelefonico;
    }

    public Utente(String Email)
    {
    this.Email=Email;
    }
   
    public Utente(String Email, String Password) {
        this.Email = Email;
        this.Password = Password;
    }

    public String getNome() {
        return Nome;
    }

    public void setNome(String nome) {
        this.Nome = nome;
    }

    public String getCognome() {
        return Cognome;
    }

    public void setCognome(String cognome) {
        this.Cognome = cognome;
    }

    public String getEmail() {
        return Email;
    }

    public void setEmail(String email) {
        this.Email = email;
    }

    public String getPassword() {
        return Password;
    }

    public void setPassword(String password) {
        this.Password = password;
    }



    public String getNumeroTelefonico() {
        return NumeroTelefonico;
    }

    public void setNumeroTelefonico(String numeroTelefonico) {
        this.NumeroTelefonico = numeroTelefonico;
    }

    public Indirizzo getIndirizzo() {
        return indirizzo;
    }

    public void setIndirizzo(Indirizzo indirizzo) {
        this.indirizzo = indirizzo;
    }

    public ArrayList<Ordine> getOrdine() {
        return ordine;
    }

    public void setOrdine(ArrayList<Ordine> ordine) {
        this.ordine = ordine;
    }

    public Foto getFoto() {
        return foto;
    }

    public void setFoto(Foto foto) {
        this.foto = foto;
    }

    public String getDataDiNascita() {
        return DataDiNascita;
    }

    public void setDataDiNascita(String dataDiNascita) {
        DataDiNascita = dataDiNascita;
    }

   

   
}
Java:
package Dao;
import java.sql.Connection;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;


import Classi.*;


public class DaoUtenteDatabase implements DaoUtente {
   
    public boolean creaUtente(Utente utente) throws SQLException,Exception
    {
        final String INSERIMENTO = "INSERT INTO utenti VALUES (?,?,?,?,?,?)";
        Connection conn = null;
        PreparedStatement stmt = null;
       
          if(!effettua_accesso(utente.getEmail(),utente.getPassword()))  
        {
            conn = DBconnection.getInstance().getConn();
            stmt = conn.prepareStatement(INSERIMENTO);
            stmt.setString(1, utente.getNome());
            stmt.setString(2, utente.getCognome());
            stmt.setString(3, utente.getEmail());
            stmt.setString(4, utente.getNumeroTelefonico());
            stmt.setString(5, utente.getDataDiNascita());
            stmt.setString(6, utente.getPassword());
            stmt.executeUpdate();
            stmt.close();
            conn.close();
            return true;
        }
         return false;
           
    }
   


    public boolean effettua_accesso(String Email, String password) throws SQLException,Exception
    {
        final String RICERCA_PASSWORD="SELECT * FROM utenti where Email=? and Password=?";
        Connection conn = DBconnection.getInstance().getConn();
        PreparedStatement stmt = conn.prepareStatement(RICERCA_PASSWORD);
        stmt.setString(1, Email);
        stmt.setString(2,password);
        ResultSet rs=stmt.executeQuery();
           
            if(!rs.next())
            {
                rs.close();
                return false;
            }
            else
            {
                rs.close();
              return true;
            }      
           
    }
   

}
Java:
package Dao;
import java.sql.*;


public class DBconnection {
   
    private static DBconnection instance;
    private Connection conn;
   
   
    private DBconnection()throws SQLException,ClassNotFoundException
    {
        Class.forName("org.postgresql.Driver");
        String url="jdbc:postgresql://localhost:5432/postgresql";
        conn=DriverManager.getConnection(url,"Databases","password");
       
    }

    public Connection getConn() {
        return conn;
    }


    public static DBconnection getInstance() throws SQLException,ClassNotFoundException{
        if(instance==null)
        {
            instance=new DBconnection();
        }
        else if(instance.getConn().isClosed())
        {
            instance=new DBconnection();
        }
   
    return instance;
  }
}
Mentre nel controller ho:
Java:
    public void creaUtente(Utente utente)
    {
        if(inputVuoto(utente)==false){
            {
                try {
                    if(daoUtente.creaUtente(utente))
                    {
                        VisualizzazioneAvvisi("Iscrizione Effettuata con successo");
                    }
                    else
                    {
                        VisualizzazioneAvvisi("Utente già presente");
                    }
                } catch (SQLException e) {
                    VisualizzazioneAvvisi(e.getMessage()    );
                }
                catch(Exception e)
                {
                    VisualizzazioneAvvisi(e.getMessage());
                }
            }
        }
        else
        {
            VisualizzazioneAvvisi("alcuni campi sono vuoti");
        }
    }
 
Ultima modifica:

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,207
1,844
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Ho capito cosa stai facendo, anche se a mio avviso stai usando una logica un pò "intricata", diciamo. Oltretutto visto che programmi da un pò dovresti scrivere anche un pò meglio certe parti del codice.

Tralasciando questo... ho capito cosa stai facendo, e trae in inganno il nome del metodo creaUtente, che fa in realtà due cose credo: dovrebbe sia farti accedere se l'utente esiste, sia creare l'utente se questo non esiste. O almeno lo evinco da come hai scritto il codice.

La prima cosa che dovresti fare è gestire da qualche parte le eccezioni che lanci indietro, come dicevo sopra... lo stai facendo da qualche altra parte? Perchè magari ci sono errori già nello stabilire la connessione, ma non lo vedi, perchè ignori le eccezioni (mandandole al chiamante, e non si vede se da qualche parte le stai gestendo).
 

sare1234

Utente Attivo
262
3
Ho capito cosa stai facendo, anche se a mio avviso stai usando una logica un pò "intricata", diciamo. Oltretutto visto che programmi da un pò dovresti scrivere anche un pò meglio certe parti del codice.

Tralasciando questo... ho capito cosa stai facendo, e trae in inganno il nome del metodo creaUtente, che fa in realtà due cose credo: dovrebbe sia farti accedere se l'utente esiste, sia creare l'utente se questo non esiste. O almeno lo evinco da come hai scritto il codice.

La prima cosa che dovresti fare è gestire da qualche parte le eccezioni che lanci indietro, come dicevo sopra... lo stai facendo da qualche altra parte? Perchè magari ci sono errori già nello stabilire la connessione, ma non lo vedi, perchè ignori le eccezioni (mandandole al chiamante, e non si vede se da qualche parte le stai gestendo).
no non le gestisco altrove..in che senso gestire le exception?
 
Ultima modifica:

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,207
1,844
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Allora gestiscile, e verifica se vengono lanciate eccezioni, poi aggiornaci in merito.
 
  • Mi piace
Reazioni: Moffetta88

sare1234

Utente Attivo
262
3
no non le gestisco altrove..in che senso gestire le exception?
Java:
package eccezioniPersonalizzate;

public class UtentePresenteException extends Exception {
    
    public UtentePresenteException()
    {
        super("utente già inserito");
    }

}
Tipo così?
Post unito automaticamente:

Java:
package eccezioniPersonalizzate;

public class UtentePresenteException extends Exception {
   
    public UtentePresenteException()
    {
        super("utente già inserito");
    }

}
Tipo così?
Ma scusa se tipo ho errore nella connessione non mi dovrebbe dare la connessione al database invece la connessione al database me la da correttamente
 
Ultima modifica:

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,207
1,844
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Non serve che crei delle eccezioni personalizzate, serve che utilizzi gli opportuni catch per capire quando si verifica una delle eccezioni sulle quali hai messo il throws.

In merito all'altra domanda si, è vero. Ma hai provato a debuggare? Hai verificato se il corpo dell'if dove richiami effettua_accesso viene effettivamente eseguito? Hai verificato che quando richiami executeUpdate() il nr. di righe inserite sia maggiore di 0?
 

sare1234

Utente Attivo
262
3
Non serve che crei delle eccezioni personalizzate, serve che utilizzi gli opportuni catch per capire quando si verifica una delle eccezioni sulle quali hai messo il throws.

In merito all'altra domanda si, è vero. Ma hai provato a debuggare? Hai verificato se il corpo dell'if dove richiami effettua_accesso viene effettivamente eseguito? Hai verificato che quando richiami executeUpdate() il nr. di righe inserite sia maggiore di 0?
ok intendi così:
Java:
public boolean creaUtente(Utente utente) throws SQLException,Exception
    {
        final String INSERIMENTO = "INSERT INTO utenti VALUES (?,?,?,?,?,?)";
        Connection conn = null;
        PreparedStatement stmt = null;
   
          try {
            if(!effettua_accesso(utente.getEmail(),utente.getPassword()))  
            {
               
                conn = DBconnection.getInstance().getConn();
                stmt = conn.prepareStatement(INSERIMENTO);
                stmt.setString(1, utente.getNome());
                stmt.setString(2, utente.getCognome());
                stmt.setString(3, utente.getEmail());
                stmt.setString(4, utente.getNumeroTelefonico());
                stmt.setString(5, utente.getDataDiNascita());
                stmt.setString(6, utente.getPassword());
                stmt.executeUpdate();
                stmt.close();
                conn.close();
                return true;    
            }
        } catch (SQLException e) {
            e.printStackTrace();
           
        }
         return false;
           
    }
Post unito automaticamente:

ok intendi così:
Java:
public boolean creaUtente(Utente utente) throws SQLException,Exception
    {
        final String INSERIMENTO = "INSERT INTO utenti VALUES (?,?,?,?,?,?)";
        Connection conn = null;
        PreparedStatement stmt = null;
  
          try {
            if(!effettua_accesso(utente.getEmail(),utente.getPassword())) 
            {
              
                conn = DBconnection.getInstance().getConn();
                stmt = conn.prepareStatement(INSERIMENTO);
                stmt.setString(1, utente.getNome());
                stmt.setString(2, utente.getCognome());
                stmt.setString(3, utente.getEmail());
                stmt.setString(4, utente.getNumeroTelefonico());
                stmt.setString(5, utente.getDataDiNascita());
                stmt.setString(6, utente.getPassword());
                stmt.executeUpdate();
                stmt.close();
                conn.close();
                return true;   
            }
        } catch (SQLException e) {
            e.printStackTrace();
          
        }
         return false;
          
    }
Però ancora non mi porta nessun errore....sapete aiutarmi?
 
Ultima modifica:

sare1234

Utente Attivo
262
3
Ho provato ad inserire il try-catch cosi:

Java:
public boolean creaUtente(Utente utente) throws SQLException,Exception
    {
        
            final String INSERIMENTO = "INSERT INTO utenti(Nome, Cognome, Email, NumeroTelefonico, DataDiNascita, Password) VALUES (?,?,?,?,?,?)";
            Connection conn = null;
            PreparedStatement stmt = null;

            
                    
                    try {
                        if(!effettua_accesso(utente.getEmail(),utente.getPassword()))   

                        {
                            conn = DBconnection.getInstance().getConn();
                            stmt = conn.prepareStatement(INSERIMENTO);
                            stmt.setString(1, utente.getNome());
                            stmt.setString(2, utente.getCognome());
                            stmt.setString(3, utente.getEmail());
                            stmt.setString(4, utente.getNumeroTelefonico());
                            stmt.setString(5, utente.getDataDiNascita());
                            stmt.setString(6, utente.getPassword());
                            stmt.executeUpdate();
                            stmt.close();
                            conn.close();
                            return true;     
                        }

                   //return false;
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    return false;
    
    }

Mi da questo errore : "
org.postgresql.util.PSQLException: SCRAM authentication is not supported by this driver. You need JDK >= 8 and pgjdbc >= 42.2.0 (not ".jre" versions)"
forse per questo non mi funziona come posso risolvere?
 
Stato
Discussione chiusa ad ulteriori risposte.

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!