Preencher jtable com inner join

Iai Feras,

Já havia conseguido usar a jtable com o select normal, mas ai surgiu a necessidade de usar dados de tabelas diferentes na jtable, e pelo que pesquisei nesse caso devo usar o commando inner join,

fiz assim,

no inicio do form ele chama esse codigo:

public class Cad_membros extends javax.swing.JFrame {

int navega = 0;
BancoConect con_membro_disc;
BancoConect con_membro_red;
BancoConect con_membros;
String ordenacao = "MEM_NOME";
boolean primeiraVezDiscipulador = true;
boolean primeiraVezRede = true;


/** Creates new form Cad_membros */
public Cad_membros() {
    initComponents();

    con_membro_disc = new BancoConect();
    con_membro_disc.conecta();
    con_membro_disc.executeSQL("select membros.MEM_NOME,membros.MEM_CODIGO, discipulador.DISC_NOME "
            +"from membros inner join discipulador " +
            "on membros.DISC_CODIGO = discipulador.DISC_CODIGO " +
            "order by membros.MEM_NOME, discipulador.DISC_NOME");

    con_membro_red = new BancoConect();
    con_membro_red.conecta();
    con_membro_red.executeSQL("select membros.MEM_NOME, rede.RED_NOME "
            +"from membros inner join rede " +
            "on membros.RED_CODIGO = rede.RED_CODIGO " +
            "order by membros.MEM_NOME, rede.RED_NOME");

    preencher_tabela();

    con_membros = new BancoConect();
    con_membros.conecta();
    con_membros.executeSQL("select * from membros order by " + ordenacao);

Perceba que tem um método preencher_tabela que criei com esse código:

public void preencher_tabela() {
jt_membro.getColumnModel().getColumn(0).setPreferredWidth(50);
jt_membro.getColumnModel().getColumn(1).setPreferredWidth(200);
jt_membro.getColumnModel().getColumn(2).setPreferredWidth(200);
jt_membro.getColumnModel().getColumn(3).setPreferredWidth(200);

    DefaultTableModel modelo = (DefaultTableModel) jt_membro.getModel();
    modelo.setNumRows(0);

    try {
        while (con_membro_red.resultSet.next() && con_membro_disc.resultSet.next()) {
            modelo.addRow(new Object[]{con_membro_disc.resultSet.getString("MEM_CODIGO"), con_membro_disc.resultSet.getString("MEM_NOME"),
                        con_membro_red.resultSet.getString("RED_NOME"), con_membro_disc.resultSet.getString("DISC_NOME")});
        }
        con_membro_disc.resultSet.first();
        con_membro_red.resultSet.first();
        
        
      
    } catch (SQLException erro) {
        JOptionPane.showMessageDialog(null, "Erro ao listar dados de membros! " + erro);
    }
}

[b]

A grande questão é,

quando executo esse sql direto no banco, funciona normalmente, prova que o sintaxe está correta, no entanto não imprime na JTABLE…

preciso de uma ajuda nesse sentido,…
[/b]

Olá,

Cara ta meio confuso esse teu código,lembrando também qué é legal você colocar seu código entre as chaves {code} …enfim

Cara no meu mode de ver tem vários conceitos aí que é melhor você rever,vou postar um modo que peguei do forum para você fazer uma Jtable Preenchida pelo Banco,

Eu usei o Netbeans,

Não use DefaulTableModel, peguei este criado da uma estudada,



/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package zf.inventario.beans;

/**
 *
 * @author gs10176
 */
import java.sql.ResultSet;

import java.util.ArrayList;

import javax.swing.JOptionPane;

import javax.swing.table.AbstractTableModel;

import javax.swing.table.TableModel;

import com.mysql.jdbc.ResultSetMetaData;

import java.sql.PreparedStatement;



public class GeneralTableModel {


//Metodo retorna um TableModel,

    public TableModel getTableModel(PreparedStatement select, String[] columnames) {



        final String[] names = columnames;





        try {



            ResultSet rs = select.executeQuery();



            ResultSetMetaData rsmeta = (ResultSetMetaData) rs.getMetaData();

            ncolumns = rsmeta.getColumnCount();



            list = new ArrayList<Object>();



            while (rs.next()) {



                for (int i = 1; i <= ncolumns; i++) {

                    list.add(rs.getObject(i));

                }



            }



        } catch (Exception e) {

            JOptionPane.showMessageDialog(null, "Erro Desconhecido:" + e.getMessage());



            e.printStackTrace();

        }



        final Object[][] data = new Object[list.size() / ncolumns][ncolumns];



        for (int j = 0; j < list.size(); j = j + ncolumns) {

            for (int i = 0; i < ncolumns; i++) {

                if (list.get(j + i) == null) {

                    data[j / ncolumns][i] = "-";

                } else {

                    data[j / ncolumns][i] = list.get(j + i);

                }

            }

        }



        dataModel = new AbstractTableModel() {



            public int getColumnCount() {

                return names.length;

            }



            public int getRowCount() {

                return data.length;

            }



            public Object getValueAt(int row, int col) {

                return data[row][col];

            }



            @Override

            public String getColumnName(int column) {

                return names[column];

            }



            @Override

            public Class getColumnClass(int col) {



                return getValueAt(0, col).getClass();



            }



            public boolean isCellEditable(int row, int col) {

                return false;

            }



            public void setValueAt(Object aValue, int row, int column) {

                data[row][column] = aValue;

            }

        };





        return dataModel;

    }

    private TableModel dataModel;

    private ArrayList<Object> list;

    private int ncolumns;

}

Depois eu aplico esse Model no meu Jtable,

No caso usando o netbeans isso vai lá naquele ‘personalisar código’



jTable1 = new javax.swing.JTable();
try {
  
Connection con = (Connection) ConnectionFactory.getConnection();
java.sql.PreparedStatement stm = con.prepareStatement("SELECT NOME, RG FROM FUNCIONARIO");

String[] col_names = {"NOME","REGISTRO"};
jTable1.setModel(new zf.inventario.beans.GeneralTableModel().getTableModel(stm,col_names));
}catch(Exception e){
    e.printStackTrace();
}
jScrollPane1.setViewportView(jTable1);

Cara, se o problema estive apenas no seu select e quer continuar usando do jeito que tá,

Presa atenção com as aspas… por exemplo select nome ,nome_de_outra from pessoa where ‘alguma_coisa’

Eu uso MYSQL,

Acho que é isso,

Felipe, bom dia

Consegui resolver cara,

Na verdade o que estava acontecendo era o seguinte:

omo Eu já havia cadastrado alguns membros antes de relacionar a tabela com redes, eu não podia setar como not null, uma vez que todos os cadastros não possuiam esse registro, eu cadastrava a rede mas não tinha nenhum usuário vinculado a ela, dessa forma quando eu criava o “inner join” ele não conseguia achar um vínculo do codigo da tabela principal com a tabela relacionada…