List duplica dados duvida ?

boa noite coloquei um first pra ver se puxava o primeiro da lista em diante , mas ai ele puxa uma linha a menos.
ele puxa a quantidade de linhas certas do banco mas todas com o mesmo resultado

joguei um println pra ver se estava correndo certo , e pela saida ai vcs podem ver que esta certo , se precisar printo a classe get set ok .

oque vcs acham ?

Já verificou o construtor da sua classe Serviço? quando a execução cair no while, coloque um breakpoint dentro do construtor, debugue por linha, e verifique se a lista “listaservico” esta sendo populada corretamente a cada interação do while, se a lista estiver populada corretamente, verifique o metódo que alimenta o jasper.

debuga linha a linha e posta o código pra nós, ao invés de printar.Dai dá pra ver melhor e ver todo o código.

é a lista que esta recebendo errado mas, revirei aqui e nao entendi porque ela recebe os valores errados.
no while se passa certinho os valores , mas a lista é preenchida errada

try {

            String subrelatorio = "select * from servicos where COD_VENDA ='"+CODVEND.getText()+"'" ;
       con.ExecutaSQL(subrelatorio);

while (con.resultset.next()) {

listaservico.add(new servico(con.resultset.getString(“servico”), con.resultset.getString(“quantida”), con.resultset.getString(“valor”)));
/* System.out.println(con.resultset.getString(“servico”));
System.out.println(con.resultset.getString(“quantida”));
System.out.println(con.resultset.getString(“valor”));*/
}
} catch (SQLException ex) {
Logger.getLogger(servico.class.getName()).log(Level.SEVERE, null, ex);
}

sera que fiz algo errado no contrutor da classe servico ?

package programa;

public class servico {
static private String servico ;
static private String quantidade ;
static private String valor ;

public servico( String servico , String quantidade , String valor){
this.servico = servico;
this.quantidade = quantidade ;
this.valor = valor ;
}

    public String getServico() {
    return servico;
}

public void setServico(String servico) {
    this.servico = servico;
}

public String getQuantidade() {
    return quantidade;
}

public void setQuantidade(String quantidade) {
    this.quantidade = quantidade;
}


public String getValor() {
    return valor;
}

public void setValor(String valor) {
    this.valor = valor;
}

}

ja revieirei aqui mas nao entendo , a quantidade de valores que tem que aparecer vem normal mas todos com o ultimo valor da listaaa , é como se estivese sobreescrendo , mas por estar com o new nao era pra estar neh ?

posso ver sua classe de conexão com o Banco, bem como seu ExecutaSQL(),

tem alguma coisa errada ai.

opa

so vc pra salvar sandrao vo te mandar .

package programa;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

/**
*

  • @author Mauro
    */
    public class conexao {
    private String driver = “com.mysql.jdbc.Driver”;
    private Connection conexao ;
    public Statement statement ;
    public ResultSet resultset ;
    public conexao(){

    }
    public boolean conectar (String url,String Usuario,String senha){
    try {
    Class.forName(driver);
    conexao = DriverManager.getConnection(“jdbc:mysql://localhost:3306/caixa?zeroDateTimeBehavior=convertToNull”,“root”,“evolution”);
    return true;
    } catch (Exception e) {
    return false;
    }
    }

    public static Connection createConnection(){
    String url = “jdbc:mysql://localhost:3306/caixa?zeroDateTimeBehavior=convertToNull”; //Nome da base de dados
    String user = “root”; //nome do usuário do MySQL
    String password = “evolution”; //senha do MySQL
    Connection conexao = null;

     return conexao;
    

    }

     public boolean desconectar() {
     try {
         conexao.close();
         return true ;
     } catch (Exception e) {
         return false ;
     }
     }
    

    public boolean ExecutaSQL(String sql){

     try {
         statement = conexao.createStatement();
         resultset = statement.executeQuery(sql);
       
         return true ;
     } catch (Exception ex) {
         System.out.println(ex.getMessage());
         return false ;
     }
    

    }

    /TESTE METODO UPDATE PARA INSERT UPDATE E DELETE/
    public boolean Executaupdate(String up){
    try {
    statement = conexao.createStatement();
    statement.executeUpdate(up);

         return true ;
     } catch (Exception ex) {
         System.out.println(ex.getMessage());
         return false ;
     }
    

    }

    /TESTE METODO UPDATE PARA INSERT UPDATE E DELETE/
    String resultset(String nome_carro) {
    throw new UnsupportedOperationException(“Not supported yet.”); //To change body of generated methods, choose Tools | Templates.
    }

    }

pode pedir oque precisar cara to procurando o erro aqui tambem mas ta complicado , vlew sandro .

passa a classe onde está o método resultset.

pra pegar o resultset eu sempre estancio a classe conexao e pego o resultset de dentro do metodo ExecutaSQL

public boolean ExecutaSQL(String sql){

    try {
        statement = conexao.createStatement();
        resultset = statement.executeQuery(sql);
      
        return true ;
    } catch (Exception ex) {
        System.out.println(ex.getMessage());
        return false ;
    }

}

conexao con = new conexao();
con.resultset

sera que é por isso ?

é está bem confuso.

ainda estou tentando entender

se quiser que eu faça outra classe de de conexao aqui eu faço , mas usei ela puxando o resultset assim no programa inteiro ate agora nao deu problema .

não é necessário, só que é melhor usar o ResultSet local, pra ficar mais claro também.
tenta fazer assim

try {

            String subrelatorio = "select * from servicos where COD_VENDA ='"+CODVEND.getText()+"'" ;
       con.ExecutaSQL(subrelatorio);

ResultSet rs = con.resultset;

    while (rs.next()) {

listaservico.add(new servico(con.resultset.getString("servico"), con.resultset.getString("quantida"), con.resultset.getString("valor")));
/* System.out.println(con.resultset.getString("servico"));
System.out.println(con.resultset.getString("quantida"));
System.out.println(con.resultset.getString("valor"));*/
} 
} catch (SQLException ex) {
Logger.getLogger(servico.class.getName()).log(Level.SEVERE, null, ex);
}

testa e vê os resultados

outra coisa você já debugou o código?

debugando você sabem em que momento exato não está adicionando o primeiro objeto na lista.

VOU TESTAR AQUIII

é veio repetido ainda , nunca debuguei codigo , vou dar uma olahda como faz no youtube, e volto a te falar aqui oque deu vlew

se der um System.out.println(); na lista ela imprime normal?

faz o seguinte DEPOIS de popular a listaservico você cria um for que percorre a lista e imprime os resultados. assim

    for (int i = 0; i < listaservico.size(); i++) {
        System.out.println(listaservico.get(i).getServico());
        System.out.println( listaservico.get(i).getQuantidade());
        System.out.println( listaservico.get(i).getValor());
    }

caso sim então o problema pode ser no seu Relatório.

eu fiz os valores imprimem repetidos tambem vou te mandar um print

primeiro executo o formulario depois clico no botao exibir lista pra pegar oque foi carregado blz , e sai repetido é na lista que esta gravando errado neh só pode , mas o porque sera ? kkk , o laço while passa um de cada vez certinho que nem vc ja viu

ow é algo aqui
listaservico.add(new servico(con.resultset.getString(“servico”), con.resultset.getString(“quantida”), con.resultset.getString(“valor”)));

ow algo na classe serviço neh ?

revirando aqui …

vou fazer do jeito que vc me pediu pra vc ver tambem .

e nesse ponto aqui, sai repetido?

while (con.resultset.next()) {
    listaservico.add(new servico(con.resultset.getString("servico"), con.resultset.getString("quantida"), con.resultset.getString("valor")));
    /* System.out.println(con.resultset.getString("servico"));
    System.out.println(con.resultset.getString("quantida"));
    System.out.println(con.resultset.getString("valor"));*/
    }

ative as linhas do println e veja o resultado.

nesse ponto ai nao sai repetido sai normal