JAVA. dúvida em uma consulta. Help Please

Estou com uma tabela no java, e não consigo exibir a soma do total de uma coluna. Eu consigo invocar todos os atributos na tabela, mas quando coloco uma soma específica não vai. Estou tentando somar a coluna “quantidade” onde "modelo = ‘Samsung_4070’ " . Vou postar o código que não consigo ver o erro. Lembrando que “quantidade” é tipo int no banco e “modelo” é tipo string. A primeira é da classe CadastroDAO

public List<Cadastro> getCadastro2(){  
        String Samsung = "Samsung_4070";
        String sql = "SELECT SUM(quantidade) FROM cadastro WHERE modelo = '"+Samsung+"'      ";
                     
        try {
            
            
            PreparedStatement stmt = this.conn.prepareStatement(sql);
            ResultSet rs2 = stmt.executeQuery();
            List<Cadastro> listaCadastro = new ArrayList<>();
            
                       
            while (rs2.next()){
            
            Cadastro cadastro = new Cadastro();
            cadastro.setModelo(rs2.getString("modelo"));
            cadastro.setQuantidade(rs2.getInt("quantidade"));
           
            listaCadastro.add(cadastro);
            
        } 
            return listaCadastro;
            
        }  catch (Exception e) {
            
            return null;
            }
        }


Proxima código é do FormRelatorioCadastroTotal


private void preencherTabela2() {

//Criar uma var "CadastroDAO"
//pegar  os dados do cadastro e listar e jogar dentro da tabela
    CadastroDAO cadastrodao= new CadastroDAO();
    List<Cadastro> listaCadastro = cadastrodao.getCadastro();
    
    
    
    
    DefaultTableModel tabelaCadastro = (DefaultTableModel) tblCadastroTotal.getModel();
    tblCadastroTotal.setRowHeight(70);  // tamanho do espaçamento da linha 
    
           
    for (Cadastro c: listaCadastro){
    
    Object [] obj = new Object[]{
        
       
       c.getModelo(),
     
        c.getQuantidade()
    
    };
    
    tabelaCadastro.addRow(obj);
    
  } 
    
    
}

A tua query não retorna nenhuma coluna modelo nem quantidade.
O modelo já tens no parâmetro, não necessitas de obter na query mas ainda assim podes sempre adicionar o modelo ao sql. A quantidade, estás a obter a soma, e o nome da columa está relacionado com a função de soma e não é simplemente quantidade, embora possas forçar esse nome com um alias.

Resumindo, o teu problema resolve-se se o teu select começar assim:

String sql = "SELECT modelo, SUM(quantidade) as quantidade FROM cadastro...."

Para além disso, o teu código não está protegido contra SQL injection. Usas prepared statement mas não tens a query parametrizada, o que, em termos de sql injection é o mesmo que não usar prepared statement.

String sql = "SELECT modelo, SUM(quantidade) as quantidade FROM cadastro WHERE modelo = ?";

(...)

PreparedStatement stmt = this.conn.prepareStatement(sql);
stmt.setString(1, Samsung);
1 curtida

Muito obrigado viu. A dica foi ótima. Fico muito agradecido !!!