Array
(
)

JTABLE COM INNER JOIN JAVA + SQL

Igo Monteiro
   - 24 abr 2016

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:
#Código

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:

Cadastro materiais (Clique na imagem para abrir em uma nova janela)

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