Un problemita con java

eva
04 de Febrero del 2005
Estoy haciendo una clase java que aunque parezca un bean no lo es, y resulta que en una funcion me debe retornar un ArrayList de objetos de esa misma clase y lo que me hace es:
Si deberian mostrarte tres productos distintos, te muestra el ultimo pero tres veces.

Os adjunto el codigo para ver si me podeis ayudar.
import java.util.*;
import java.sql.*;
import java.io.Serializable;

public class Producto extends OperBD {

protected String producto;
protected String descripcion;
protected String marca;
protected String proveedor;
protected String categoria;
protected int unidades;
protected int minimo;
protected float precioCompra;
protected Data data;
protected int garantia;//en nº de meses
protected float benefE;
protected float benefP;
protected String observacions;
protected String borrado;
protected int control;

/* Constructor que inicializa*/
public Producto(){

this.producto="";
this.descripcion="";
this.marca="";
this.proveedor="";
this.categoria="";
this.unidades=0;
this.minimo=0;
this.precioCompra=0;
this.data=new Data("0000-00-00");
this.garantia=0;
this.benefE=0;
this.benefP=0;
this.observacions="";
this.borrado="n";
this.control=0;
}

/* métodos getters */

public String getProducto(){return(this.producto);}
public String getDescripcion(){return(this.descripcion);}
public String getMarca(){return(this.marca);}
public String getProveedor(){return(this.proveedor);}
public String getCategoria(){return(this.categoria);}
public int getUnidades(){return(this.unidades);}
public int getMinimo(){return(this.minimo);}
public float getPreciocompra(){return(this.precioCompra);}
public Data getData(){return(this.data);}
public int getGarantia(){return(this.garantia);}
public float getBenefe(){return(this.benefE);}
public float getBenefp(){return(this.benefP);}
public String getObservacions(){return(this.observacions);}
public String getBorrado(){return(this.borrado);}
public int getControl(){return(this.control);}

//método para obter o precio de venta
public float getPVP(){
if(getBenefe() == 0){
return(getPreciocompra()+(getPreciocompra()*getBenefp())/100);
}else{
return(getPreciocompra()+getBenefe());
}
}

/* métodos setters */

public void setProducto(String c){this.producto=c;}
public void setDescripcion(String c){this.descripcion=c;}
public void setMarca(String c){this.marca=c;}
public void setProveedor(String c){this.proveedor=c;}
public void setCategoria(String c){this.categoria=c;}
public void setUnidades(int c){this.unidades=c;}
public void setMinimo(int c){this.minimo=c;}
public void setPreciocompra(float c){this.precioCompra=c;}
public void setData(Data c){this.data=c;}
public void setGarantia(int c){this.garantia=c;}
public void setBenefe(float c){this.benefE=c;}
public void setBenefp(float c){this.benefP=c;}
public void setObservacions(String c){this.observacions=c;}
public void setBorrado(String c){this.borrado=c;}
public void setControl(int c){this.control=c;}

/* crea un produto novo */
public void novo(String producto,String descripcion,String marca,String proveedor,String
categoria, int unidades,int minimo,float precioCompra,Data data,int garantia,float benefE,
float benefP,String observacions,int control){

this.producto=producto;
this.descripcion=descripcion;
this.marca=marca;
this.proveedor=proveedor;
this.categoria=categoria;
this.unidades=unidades;
this.minimo=minimo;
this.precioCompra=precioCompra;
this.data=data;
this.garantia=garantia;
this.benefE=benefE;
this.benefP=benefP;
this.observacions=observacions;
this.borrado="n";
this.control=control;
}
..............
Y AHORA VA EL MÉTODO QUE NO ME FUNCIONA

/* Método que nos permite seleccionar unha lista de productos dependendo dos parametros
que son categoria , marca e proveedor */
public ArrayList buscarParametros(String prov,String marc,String categ){
String sentencia="";
ResultSet res=null;
/*Escribimos a sentencia sql correspondente*/
if(prov.equals("")){
if(marc.equals("")){
if(categ.equals("")){
sentencia="";
}else{
sentencia="select * from producto where categoria='"+categ+"'";
}
}else{
if(categ.equals("")){
sentencia="select * from producto where marca='"+marc+"'";
}else{
sentencia="select * from producto where categoria='"+categ+"' and marca='"+marc+"'";
}
}
}else{
if(marc.equals("")){
if(categ.equals("")){
sentencia="select * from producto where proveedor='"+prov+"'";
}else{
sentencia="select * from producto where categoria='"+categ+"' and proveedor='"+prov+"'";
}
}else{
if(categ.equals("")){
sentencia="select * from producto where marca='"+marc+"' and proveedor='"+prov+"'";
}else{
sentencia="select * from producto where categoria='"+categ+"' and marca='"+marca+"' and proveedor='"+prov+"'";
}
}

}
/* Executamos a sentencia */
ArrayList l=new ArrayList();
if(!sentencia.equals("")){
Producto p=new Producto();
res=consultar(sentencia);
try{
while(res.next()){
if((res.getString("borrado")).equals("n")){
p.novo(res.getString("producto"),res.getString("descripcion"),res.getString("marca"),res.getString("proveedor"),
res.getString("categoria"),res.getInt("unidades"),res.getInt("minimo"),res.getFloat("precioCompra"),new Data(res.getString("data")),res.getInt("garantia"),res.getFloat("benefE"),
res.getFloat("benefP"),res.getString("observacions"),res.getInt("control"));
l.add(p);//engadense á lista
}
}

}catch(Exception e){}
}

return(l);

}

GRACIAS POR TODO.

nicokiki
04 de Febrero del 2005
Hola!!!!!!!

Pone Producto p=new Producto(); dentro de while(rs.next()) y LISTO

Salu2!!!!!!!!!