Tabelas com chave estrangeira

12 respostas
D

tenho uma Jtable que deveria retornar dados do banco. Ela não mostra os dados na tabela, mas mostra que há dados, pois aparecem linhas em branco. CONSEGUI VER QUE ELA ESTÁ “PUXANDO” OS DADOS, MAS NÃO OS MOSTRA. (OBS: esses dados estão em uma tabela do banco de dados que utiliza chave estrangeira).

12 Respostas

T

Coloca a estrutura das tabelas e o sql que você está fazendo.

D
tebosoftware:
Coloca a estrutura das tabelas e o sql que você está fazendo.
private DefaultTableModel modelo = new DefaultTableModel() {

        public boolean isCellEditable(int row, int column) {//metodo para linhas e colunas não serem editadas
            return false;
        }
    };
    private JTable tabela = new JTable(modelo);
    private JScrollPane painel = new JScrollPane(tabela); //Rolagem da tabela
    //instanciando os botões  
    private JButton btSair = new JButton("SAIR");
    private JSeparator separar = new JSeparator();
    //metodo construtor

    public Vis_Cadastro_Armario(int id) {
        super("IF/Cadastro Armario/Visualizar");
        this.id = id;
        preenchendo(id);
        //posicionando e definindo tamanho da tela.
        this.setBounds(0, 0, 404, 350);
        this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        this.setLayout(null);
        this.setLocationRelativeTo(null);
        this.setResizable(false);

        //coloca uma figura na barra de título da janela  
        URL url = this.getClass().getResource("/imagens/icone_lôgo.png");
        Image imagemTitulo = Toolkit.getDefaultToolkit().getImage(url);
        this.setIconImage(imagemTitulo);

        armario.setBounds(20, 30, 70, 20);
        this.add(armario);//adicionando o JLabel a tela.

        tombo.setBounds(170, 30, 90, 20);
        this.add(tombo);//adicionando o JLabel a tela.

        gavetas.setBounds(150, 70, 70, 50);
        this.add(gavetas);

        painel.setBounds(10, 120, 300, 190);
        this.add(painel);
        tabela.getTableHeader().setReorderingAllowed(false);

        //criando as colunas
        modelo.addColumn("Id_gaveta");
        modelo.addColumn("Gaveta");
        modelo.addColumn("Letras");
        modelo.addColumn("Id_armário");

        //posicionando os JTextField's
        caixaArmario.setBounds(90, 30, 50, 20);
        caixaArmario.setEditable(false);
        this.add(caixaArmario);//adicionando o JTextField a tela.

        caixaTombo.setBounds(240, 30, 50, 20);
        caixaTombo.setEditable(false);
        this.add(caixaTombo);

        separar.setBounds(0, 80, 400, 200);
        this.add(separar);//adicionando o JTextField a tela.



        //dimencinando e posicionando os JButton's
        btSair.setBounds(320, 280, 70, 20);
        btSair.setToolTipText("Sair");
        btSair.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                fechar();
            }
        });
        this.add(btSair);//adicionando o JButton a tela

        this.setVisible(true);
    }

    public void preenchendo(int id) {

        try {
            connection = new Conexao().getConnection();

            stmt = (Statement) connection.createStatement();
            rs = stmt.executeQuery("select * from cadastro_armario where id_armario=" + id);
            rs.first();

            caixaArmario.setText(rs.getString("armario"));
            caixaTombo.setText(rs.getString("num_tombo"));

            stmt.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }

        try {
            modelo.setNumRows(0);
            connection = new Conexao().getConnection();

            stmt = (Statement) connection.createStatement();
            rs = stmt.executeQuery("select * from cadastro_gaveta where id_armario=" + id);
            rs.first();
            do {
                modelo.addRow(new Object[]{rs.getString("id_gaveta"), rs.getString("nome"), rs.getString("letras"), rs.getString("id_armario")});
                System.out.println(rs.getString("id_gaveta")+" | "+rs.getString("nome")+" | "+rs.getString("letras")+" | "+rs.getString("id_armario"));//teste para visualizar os dados que a tabela deveria ezibir
            } while (rs.next());

            stmt.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

    public void fechar() {
        this.dispose();
    }
-- Estrutura da tabela `cadastro_armario`
--

CREATE TABLE IF NOT EXISTS `cadastro_armario` (
  `id_armario` int(11) NOT NULL AUTO_INCREMENT,
  `armario` varchar(200) DEFAULT NULL,
  `num_tombo` varchar(200) DEFAULT NULL,
  PRIMARY KEY (`id_armario`),
  UNIQUE KEY `id_armario` (`id_armario`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;
-- Estrutura da tabela `cadastro_gaveta`
--

CREATE TABLE IF NOT EXISTS `cadastro_gaveta` (
  `id_gaveta` int(11) NOT NULL AUTO_INCREMENT,
  `nome` varchar(200) DEFAULT NULL,
  `letras` varchar(200) DEFAULT NULL,
  `id_armario` int(11) DEFAULT NULL,
  PRIMARY KEY (`id_gaveta`),
  KEY `id_armario` (`id_armario`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=20 ;
T

Existe realmente dados que vinculam o id ao id_armario na tabela cadastro_gaveta?

D

Sim, o códogo da lina 79 a linha 78 preenche ou chama, informações do ‘cadastro_armario’ que irá aparecer em dois texField’s. Já as linhas 94 a 102 preenche ou chama dados do ‘cadastro_gaveta’ que são as informações que deveriam aparecer na tabela.(obs: para cadastrar a gaveta é preciso ter um armário para escolher, selecioná-lo e depois cadastrar uma gaveta).

D

Sim, o códogo da lina 79 a linha 78 preenche ou chama, informações do ‘cadastro_armario’ que irá aparecer em dois texField’s. Já as linhas 94 a 102 preenche ou chama dados do ‘cadastro_gaveta’ que são as informações que deveriam aparecer na tabela.(obs: para cadastrar a gaveta é preciso ter um armário para escolher, selecioná-lo e depois cadastrar uma gaveta).

tenho uma imagem do problema como faço para te mostrar?

T

na parte do sql da busca da tabela cadastro_gaveta não teria que ter um while?

mas mesmo assim, eu fiz uns testes aqui (pois não uso o DefaultTableModel) e funcionou normal a adição das linhas. Mas no código eu fiz tabela.setTableModel

D

tebosoftware:
na parte do sql da busca da tabela cadastro_gaveta não teria que ter um while?

mas mesmo assim, eu fiz uns testes aqui (pois não uso o DefaultTableModel) e funcionou normal a adição das linhas. Mas no código eu fiz tabela.setTableModel

vc colocou tabela.setTableModel onde?

T

eu ao invés de criar o jtable com o parametro eu configurei pelo método setTableModel.

D

Daniele(java):
tebosoftware:
na parte do sql da busca da tabela cadastro_gaveta não teria que ter um while?

mas mesmo assim, eu fiz uns testes aqui (pois não uso o DefaultTableModel) e funcionou normal a adição das linhas. Mas no código eu fiz tabela.setTableModel

vc colocou tabela.setTableModel onde?

acho que entendi, colocou tabela.setTableModel no lugar de DefaultTableModel né?

vc pode me mostrar o que vc fez pq tentei aqui e não consegui.

T

Esse foi o teste q eu fiz.

package testejtable;

import javax.swing.table.DefaultTableModel;

/**
 *
 * @author Shubacca
 * @date 25/09/2012
 */
public class Teste extends javax.swing.JFrame {

    private DefaultTableModel modelo = new DefaultTableModel() {

        @Override
        public boolean isCellEditable(int row, int column) {
            return false;
        }
        
    };
    
    /** Creates new form Teste */
    public Teste() {
        initComponents();
        modelo.addColumn("Nome");
        modelo.addColumn("Idade");
        jTable1.setModel(modelo);
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jScrollPane1 = new javax.swing.JScrollPane();
        jTable1 = new javax.swing.JTable();
        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        jTextField1 = new javax.swing.JTextField();
        jButton1 = new javax.swing.JButton();
        jLabel2 = new javax.swing.JLabel();
        jFormattedTextField1 = new javax.swing.JFormattedTextField();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jTable1.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String [] {
                "Title 1", "Title 2", "Title 3", "Title 4"
            }
        ));
        jScrollPane1.setViewportView(jTable1);

        jLabel1.setText("Nome:");

        jButton1.setText("jButton1");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jLabel2.setText("Idade:");

        jFormattedTextField1.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(new java.text.DecimalFormat("#0"))));

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabel1)
                    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 217, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabel2)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addComponent(jFormattedTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 84, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jButton1)))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabel2)
                    .addComponent(jLabel1))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jFormattedTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jButton1))
                .addContainerGap(16, Short.MAX_VALUE))
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 597, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 362, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
        modelo.addRow(new Object[] {jTextField1.getText(), jFormattedTextField1.getValue()});
    }//GEN-LAST:event_jButton1ActionPerformed

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(Teste.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(Teste.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(Teste.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(Teste.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Teste().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jButton1;
    private javax.swing.JFormattedTextField jFormattedTextField1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTable jTable1;
    private javax.swing.JTextField jTextField1;
    // End of variables declaration//GEN-END:variables

}
D

como eu faço pra mandar uma imagem? sou nova aqui

T

Bom a imagem tem que estar hospedada em algum lugar ai vc coloca as tags [ img]o endereco[/img ]

Criado 25 de setembro de 2012
Ultima resposta 25 de set. de 2012
Respostas 12
Participantes 2