java con swing e sql

Stato
Discussione chiusa ad ulteriori risposte.

sare1234

Utente Attivo
188
1
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
6,006
2,590
CPU
Neurone solitario
Dissipatore
Ventaglio azionato a mano
Scheda Madre
Casalinga
RAM
Molto molto volatile
GPU
Binoculare integrata nel cranio
PSU
Pastasciutta, pollo e patatine al forno
Net
Segnali di fumo e/o tamburi
OS
Windows 10000 BUG
prova a togliere il final alle stringhe che passi ai PreparedStatement, lascia solo String
 

Matty25

Utente Attivo
171
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
188
1
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
171
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

Utente Attivo
1,010
614
CPU
Intel i7 6700HQ, 2.60Ghz, 4 core 8 threads
Scheda Madre
Asustek
HDD
Hitachi 7200 rpm, 1TB
RAM
16GB DDR4 (2 slot su 4)
GPU
Nvidia Geforce GTX 960M, 4GB
Audio
Realtek
Net
30Mbps/3Mbps con Eolo
OS
Windows 10 64bit
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
188
1
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 automatically merged:

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

Utente Attivo
1,010
614
CPU
Intel i7 6700HQ, 2.60Ghz, 4 core 8 threads
Scheda Madre
Asustek
HDD
Hitachi 7200 rpm, 1TB
RAM
16GB DDR4 (2 slot su 4)
GPU
Nvidia Geforce GTX 960M, 4GB
Audio
Realtek
Net
30Mbps/3Mbps con Eolo
OS
Windows 10 64bit
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
188
1
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

Utente Attivo
1,010
614
CPU
Intel i7 6700HQ, 2.60Ghz, 4 core 8 threads
Scheda Madre
Asustek
HDD
Hitachi 7200 rpm, 1TB
RAM
16GB DDR4 (2 slot su 4)
GPU
Nvidia Geforce GTX 960M, 4GB
Audio
Realtek
Net
30Mbps/3Mbps con Eolo
OS
Windows 10 64bit
Allora gestiscile, e verifica se vengono lanciate eccezioni, poi aggiornaci in merito.
 
  • Like
Reactions: Moffetta88

sare1234

Utente Attivo
188
1
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 automatically merged:

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

Utente Attivo
1,010
614
CPU
Intel i7 6700HQ, 2.60Ghz, 4 core 8 threads
Scheda Madre
Asustek
HDD
Hitachi 7200 rpm, 1TB
RAM
16GB DDR4 (2 slot su 4)
GPU
Nvidia Geforce GTX 960M, 4GB
Audio
Realtek
Net
30Mbps/3Mbps con Eolo
OS
Windows 10 64bit
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
188
1
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 automatically merged:

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
188
1
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

Hot: Quale crypto per il futuro?

  • Bitcoin

    Voti: 81 46.8%
  • Ethereum

    Voti: 67 38.7%
  • Cardano

    Voti: 23 13.3%
  • Polkadot

    Voti: 8 4.6%
  • Monero

    Voti: 15 8.7%
  • XRP

    Voti: 14 8.1%
  • Uniswap

    Voti: 4 2.3%
  • Litecoin

    Voti: 12 6.9%
  • Stellar

    Voti: 12 6.9%
  • Altro (Specifica)

    Voti: 25 14.5%

Discussioni Simili