Falta um "cast" da classe Conexao.PessoaDB na linha Conexao.Pessoa p = i.next().clone(), e a classe a ser instanciada deve ser Conexao.PessoaDB  e não Conexao.Pessoa (erro de digitação ?)
Outra coisa não use o método clone(), pois esse método é protected.
 
A linha fica assim: Conexao.PessoaDB p = (Conexao.PessoaDB )i.next();
 
O metodo add() espera uma instância da classe java.lang.Object, e vai devolver uma instância dessa classe no método next(). Então é necessário fazer uma coerção (cast) explicita para recuperar o objeto de dentro do ArrayList.
Se no ArrayList for adicionado um objeto de uma classe que não seja Conexao.PessoaDB, no momento do next() vai ocorrer uma exceção de cast.
 
Roberto Tatemoto

 
Estou com o seguinte problema: faço acesso ao banco de dados e leio varios registros, associo cada registro a um objeto pessoa e devolvo tudo em ArrayList. O problema é que não consigo manipula-lo. Segue codigo, se alguem puder me ajudas.
 
Conexao.PessoaDB pDB = new Conexao.PessoaDB();
        try{
            ArrayList l = pDB.getPessoas();
            Iterator i = l.iterator();
            out.println("<table>");
            out.println("<tr><td>Código<td>Nome</tr>");
            while(i.hasNext()){
                Conexao.Pessoa p = i.next().clone();
                //out.println("<tr><td>" + String.valueOf(p.getCodigo()) + "<td> "+ p.getNome() + "</tr>");
                out.println("<tr><td>" + "teste" + "<td> "+ i.next() + "</tr>");
            }
            out.println("</table>");
        }catch(Exception e){
            out.println(e.getMessage());
        }
 
 
---------------------------------------------------------------------------------------------------------------------------------------------------
package Conexao;
 
import java.sql.*;
import java.util.*;
/**
 *
 * @author  Administrador
 * @version
 */
public class PessoaDB extends conexao{
 
    /** Creates new PessoaDB */
    public PessoaDB() {
        super();
    }
 
    public int getPessoa(Conexao.Pessoa p){
        Statement stmt;
        ResultSet rs;
        String sql;
        int erro;
        //
        erro=0;
        sql = "SELECT * FROM medico WHERE codigo = '" + String.valueOf(p.getCodigo()) + "'";
        try{
            stmt = this.con.createStatement();
            rs = stmt.executeQuery(sql);
            if (rs.next()){
                p.setNome(rs.getString(3));
            }else{
                erro=1;
            }
            rs.close();
            stmt.close();
            return(erro);
        }catch(Exception e){
            System.out.println(e.getMessage());
            return(2);
        }
    }
   
    public int setPessoa(Conexao.Pessoa p){
        Statement stmt;
        ResultSet rs;
        int row, erro=0;
        String sql;
        //
        try{
            stmt = this.con.createStatement();
            if (p.getCodigo()!=0){
                sql = "SELECT * FROM medico WHERE codigo = '" + String.valueOf(p.getCodigo()) + "'";
                rs = stmt.executeQuery(sql);
                if (rs.next()){
                    sql = "UPDATE medico SET nome='" + p.getNome() + "' WHERE codigo='" + String.valueOf(p.getCodigo()) + "'";
                }else{
                    sql = "INSERT INTO medico(nome) VALUES('" + p.getNome() + "')";
                }
                rs.close();
            }else{
                sql = "INSERT INTO medico(nome) VALUES('" + p.getNome() + "')";
            }
            row = stmt.executeUpdate(sql);
            if (row<1){
                erro = 1;
                System.out.println("Erro: "+ String.valueOf(row));  
            }
            stmt.close();
        }catch(Exception e){
            System.out.println(e.getMessage());
            erro=2;
        }
       return(erro);
    }
   
    public ArrayList getPessoas(){
        //ArrayList lista = new ArrayList();
        Statement stmt;
        ResultSet rs;
        Pessoa p;
        ArrayList lista = new ArrayList();
        try{
            stmt = this.con.createStatement();
            rs = stmt.executeQuery("SELECT * FROM medico ORDER BY nome");
            while(rs.next()){
                p = new Pessoa();
                p.setCodigo(rs.getInt("codigo"));
                p.setNome(rs.getString("nome"));
                lista.add(p);
            }
        }catch(Exception e){
            System.out.println(e.getMessage());
        }
        return(lista);
    }
}
 
 

---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.377 / Virus Database: 211 - Release Date: 15/07/2002

Responder a