Salve, avrei bisogno di una piccola mano per poterne uscire fuori da alcuni problemi che ho riscontrato su un progetto di basi di dati che stò facendo per l'univertà.la base di dati riguarda la gestione di un centro benessere.
Un problema ce l'ho quando ridefinisco l'operatore di hashing. La classe è:
public class Cliente{
private int codice;
private String nome, cognome, dataNascita, residenza, numTel, tipo;
public Cliente(int c, String n,String co, String d, String r, String nt, String t){
codice=c;
nome=n;
cognome=co;
dataNascita=d;
residenza=r;
numTel=nt;
tipo=t;
}
public int getCodice(){
return codice;
}
public String getnome()
{
return nome;
}
public String getCognome()
{
return cognome;
}
public String getResidenza()
{
return residenza;
}
public String getNumTel()
{
return numTel;
}
public String getDataNascita()
{
return dataNascita;
}
public String getTipo(){
return tipo;
}
public void setCodice(int nuovo){
codice=nuovo;
}
public void setNome(String nuovo)
{
nome=nuovo;
}
public void setCognomeC(String nuovo)
{
cognome=nuovo;
}
public void setResidenza(String nuovo)
{
residenza=nuovo;
}
public void setNumTel(String nuovo)
{
numTel=nuovo;
}
public void setDataNascitaC(String nuovo)
{
dataNascita = nuovo;
}
public void setTipo(String nuovo){
tipo=nuovo;
}
public boolean equals(Object o){
if(o != null && o.getClass() == this.getClass()){
Cliente c = (Cliente)o;
return c.getCodice() == this.getCodice();
} else return false;
}
//Ridefinizione dell’operatore di hashing
public int hashCode()
{
return codice.hashCode();
}
//Ridefinizione dell’operatore toString()
public String toString()
{
return "Codice cliente: "+this.codice+" Nome: "+this.nome+" Cognome: "+this.cognome+" Data nascita: "+this.dataNascita+
"Residenza; " +this.residenza+ "Numero telefono: " +this.numTel+ "Tipo cliente: " +this.tipo;
}
}
L'errore è: int cannot be dereferenced
Questo problema c'è solo se ho un intero(in questo caso int codice). Con altri tipi di parametri non mi da errore.
L'altro problema ce l'ho con le classi DAO( cioè quelle che gestiscono il codice sql).
import java.util.*;
import java.sql.*;
/* Data Access Object per l’entita’ Abbonamento
* Incapsula le funzioni ed i tipi dato necessari
* per manipolare le informazioni
* della base dati pertinenti a detta entita’.
* Si tratta di una utility class
* non istanziabile.
*/
public class AbbonamentoDAO {
private AbbonamentoDAO() {
}
// Comando SQL per l’inserimento di una nuova istanza
private static final String INSERT_SQL =
"INSERT INTO Abbonamento VALUES (?, ?, ?, ?, ?)";
public static void insert(Abbonamento abbonamento)
throws SQLException, ClassNotFoundException{
Connection con=null;
PreparedStatement pstmt=null;
con = ConnectionManager.getConnection();
pstmt = con.prepareStatement(INSERT_SQL);
//1 errore: cannot find symbol method setCliente(int,Cliente)
pstmt.setCliente(1, abbonamento.getCliente()); pstmt.setString(2, abbonamento.getDataI());
pstmt.setString(3, abbonamento.getDataF());
pstmt.setString(4, abbonamento.getPrezzo());
pstmt.executeUpdate();
pstmt.close();
con.close(); //si assume la modalita’ autocommit
}
//Comando SQL per l’ottenimento di una nuova istanza
private static final String FIND_BY_NAME =
"SELECT * FROM Abbonamento WHERE Cliente = ?";
public static void load(Abbonamento abbonamento)
throws SQLException, ClassNotFoundException{
Connection con=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
con = ConnectionManager.getConnection();
pstmt = con.prepareStatement(FIND_BY_NAME);
// errore: cannot find symbol method setCliente(int,Cliente)
pstmt.setCliente(1, abbonamento.getCliente()); rs=pstmt.executeQuery();
rs.next();
abbonamento.setDataI(rs.getString("DATA_I") );
abbonamento.setDataF(rs.getString("DATA_F") );
abbonamento.setPrezzo(rs.getString("PREZZO") );
rs.close();
pstmt.close();
con.close();
}
//Comando SQL per l’aggiornamento di una nuova istanza
private static final String UPDATE_BY_NAME =
"UPDATE ABBONAMENTO SET DATA_I=?,DATA_F=?,PREZZO=? WHERE ABB_CLIENTE = ?";
public static void update(Abbonamento abbonamento)
throws SQLException, ClassNotFoundException{
Connection con=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
con = ConnectionManager.getConnection();
//errore: cannot find symbol variable UPDATE_BY_CLIENTE
pstmt = con.prepareStatement(UPDATE_BY_CLIENTE); // errore: cannot find symbol method setCliente(int,Cliente)
pstmt.setCliente(5, abbonamento.getCliente());
pstmt.setString(1, abbonamento.getDataI());
pstmt.setString(2, abbonamento.getDataF());
pstmt.setString(3, abbonamento.getPrezzo());
pstmt.executeUpdate();
pstmt.close();
con.close();
}
}
La classe Abbonamento è:
public class Abbonamento {
private final Cliente cliente;
private String dataI, dataF, prezzo;
public Abbonamento(Cliente c, String di, String df, String p){
cliente=c;
dataI=di;
dataF=df;
prezzo=p;
}
public Cliente getCliente(){
return cliente;
}
public String getDataI(){
return dataI;
}
public String getDataF()
{
return dataF;
}
public String getPrezzo()
{
return prezzo;
}
public void setDataI(String nuovo)
{
dataI =nuovo ;
}
public void setDataF(String nuovo )
{
dataF=nuovo;
}
public void setPrezzo(String nuovo)
{
prezzo=nuovo;
}
....
//Ridefinizione dell’operatore di uguaglianza
public boolean equals(Object o)
{
if (o == null)
return false;
if (!(o instanceof Abbonamento ))
return false;
Abbonamento o1 = (Abbonamento) o;
return this.cliente.equals(o1.cliente);
}
//Ridefinizione dell’operatore di hashing
public int hashCode()
{
return cliente.hashCode();
}
//Ridefinizione dell’operatore toString()
public String toString()
{
return "Abbonamento del cliente: "+this.cliente+" Data inizio: "+this.dataI+
" Data fine: "+this.dataF+" Prezzo: "+this.prezzo;
}
}
Grazie.

Rispondi quotando
