JTABLE COM INNER JOIN JAVA + SQL

24/04/2016

0

Olá, tenho um problema com meu trabalho em java.
Fiz uma tabela para cadastro de clientes, com crud, tá funcionando normalmente.
Mas agora, ao fazer uma para materiais, está meio complicado, pois o material tem relação com fornecedores e categorias (ambos mostrados em combobox).

Quero mostrar o codigo do material, nome do material, preco, custo e seus respectivos fornecedores e categorias em um JTable, meu jTable está mostrando tudo, exceto a categoria e o fornecedor. Eu omiti as linhas onde são pegos os códigos em resultSet pois estava dando erro (no MaterialDao).

Aqui está meu MaterialDao:

package model.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
import model.bean.Categoria;
import model.bean.Fornecedor;
import model.bean.Material;
import model.connection.ConnectionFactory;


public class MaterialDao{
    
    Connection con=ConnectionFactory.getConnection();
    String sql;
    PreparedStatement pstm;
    ResultSet rs;
    
    public void salvarMaterial(Material mat){
            
        con=ConnectionFactory.getConnection();
        
        try{
            
         sql="INSERT INTO material(matnome,matpreco,matcusto,matforcodigo,matcatcodigo)"
                 + "VALUES(?,?,?,?,?);";      
         
         pstm=con.prepareStatement(sql);
         pstm.setString(1, mat.getMatNome());
         pstm.setDouble(2,mat.getMatPreco());
         pstm.setDouble(3,mat.getMatCusto());
         pstm.setObject(4, mat.getMatFornecedorCodigo().getForCodigo());
         pstm.setObject(5, mat.getMatCategoriaCodigo().getCatCodigo());         

          pstm.execute();
    
         
         JOptionPane.showMessageDialog(null,"Dados inseridos com sucesso");

        
        }catch(Exception erro){
            
            JOptionPane.showMessageDialog(null,"Erro PSTM "+erro.getMessage());
            
            
        }
        
    }
    
 public List<Material> listarMateriais(){
        
        List<Material> lista = new ArrayList<>();

        try {
            
            sql="SELECT matcodigo, matnome,matpreco,matcusto,fornome,catdesc FROM material\n" +
                "INNER JOIN fornecedor ON matforcodigo=forcodigo\n" +
                "INNER JOIN categoria ON matcatcodigo=catcodigo\n" +
                "ORDER BY matcodigo;";      
            
            pstm=con.prepareStatement(sql);
            rs=pstm.executeQuery(sql);
            
            while(rs.next()){
               
                
                Material mat = new Material();
                
                mat.setMatCodigo(rs.getInt(1));
                mat.setMatNome(rs.getString(2));
                mat.setMatPreco(rs.getDouble(3));
                mat.setMatCusto(rs.getDouble(4));                
               // mat.setMatFornecedorCodigo((Fornecedor) rs.getObject(5));
               // mat.setMatCategoriaCodigo((Categoria) rs.getObject(6));
                
               
                              
                lista.add(mat);
                
            }
            

        } catch (Exception erro) {
            
            JOptionPane.showMessageDialog(null,"Erro ao listar " +erro.getMessage());
            
        }       
        
        return lista; 
    }
 
   public void deletarMaterial(Material mat){
            
                
        try{
            
         sql="DELETE FROM material WHERE  matcodigo=?";      
         
         pstm=con.prepareStatement(sql);        
         pstm.setInt(1, mat.getMatCodigo());
         pstm.executeUpdate();
                
         JOptionPane.showMessageDialog(null,"Excluído com sucesso");
                   
        }catch(Exception erro){
            
            JOptionPane.showMessageDialog(null,"Erro ao excluir"+erro.getMessage());
          
            
        }
            }
   
     public void alterarMaterial(Material mat){
            
                
        try{
            
         sql="UPDATE material SET matnome=?,matpreco=?,matcusto=?,matforcodigo=?,matcatcodigo=? WHERE matcodigo=?";      
         
         pstm=con.prepareStatement(sql);
         pstm.setString(1,mat.getMatNome()); 
         pstm.setDouble(2,mat.getMatPreco());         
         pstm.setDouble(3,mat.getMatCusto());
         pstm.setInt(4, mat.getMatFornecedorCodigo().getForCodigo());
         pstm.setInt(5, mat.getMatCategoriaCodigo().getCatCodigo());
        
         pstm.executeUpdate();
                
       JOptionPane.showMessageDialog(null,"Dados alterados com sucesso");

        }catch(Exception erro){
            
            JOptionPane.showMessageDialog(null,"Erro ao alterar"+erro.getMessage());
          
            
        }
            } 
            
 }
    




Aqui está a tabela, como está funcionando no momento:


[img:descricao=Cadastro materiais]http://imgur.com/Lx6QwEB[/img]


Não consigo listar o fornecedor e categoria dentro do JTable.
Igo Monteiro

Igo Monteiro

Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar