Problema com SELECT e DELETE do SQL no Java

7 respostas
guirodr

O trabalho é um cadastro de livros, quando clica em Ok ele mostra os dados em uma jTable e salva no banco. Quando se clica em numa linha da jTable aparece os dados nos TextFields. Quando se clica em Excluir, exclui a linha selecionada e os dados daquele livro, do banco. Quando se clica em Alterar, você altera um dado daquele livro, salvando o novo dado no banco e alterando a jTable.
É o seguinte, eu tenho esse trabalho da escola pra terminar, mas to com os seguintes problemas:

TelaLivro

package fronteira;

import java.util.ArrayList;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
import modelo.Livro;
import persistencia.PerLivro;

/**
 *
 * @author Administrador
 */
public class TelaLivro extends javax.swing.JFrame {
String isbn;

    /** Creates new form NewJFrame */
    public TelaLivro() {
        initComponents();
    }

    /** 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">
    private void initComponents() {

        jDesktopPane1 = new javax.swing.JDesktopPane();
        lblEdicao = new javax.swing.JLabel();
        lblTitulo = new javax.swing.JLabel();
        lblAutor = new javax.swing.JLabel();
        lblEditora = new javax.swing.JLabel();
        txtAutor = new javax.swing.JTextField();
        txtEdicao = new javax.swing.JTextField();
        txtEditora = new javax.swing.JTextField();
        lblISBN = new javax.swing.JLabel();
        lblGenero = new javax.swing.JLabel();
        txtGenero = new javax.swing.JTextField();
        bttLimpar = new javax.swing.JButton();
        txtISBN = new javax.swing.JTextField();
        bttOk = new javax.swing.JButton();
        lblTipo = new javax.swing.JLabel();
        txtTipo = new javax.swing.JTextField();
        txtTitulo = new javax.swing.JTextField();
        jScrollPane1 = new javax.swing.JScrollPane();
        tblLivro = new javax.swing.JTable();
        bttAlterar = new javax.swing.JButton();
        bttExcluir = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Cadastrar Livros");

        lblEdicao.setText("Edição");

        lblTitulo.setText("Titulo");

        lblAutor.setText("Autor");

        lblEditora.setText("Editora");

        txtAutor.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                txtAutorActionPerformed(evt);
            }
        });

        txtEdicao.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                txtEdicaoActionPerformed(evt);
            }
        });

        txtEditora.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                txtEditoraActionPerformed(evt);
            }
        });

        lblISBN.setText("ISBN");

        lblGenero.setText("Gênero");

        bttLimpar.setText("Limpar");
        bttLimpar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                bttLimparActionPerformed(evt);
            }
        });

        txtISBN.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                txtISBNActionPerformed(evt);
            }
        });

        bttOk.setText("OK");
        bttOk.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                bttOkActionPerformed(evt);
            }
        });

        lblTipo.setText("Tipo");

        tblLivro.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Titulo", "Autor", "Editora", "Gênero", "Edição", "ISBN", "Tipo"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }
        });
        tblLivro.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tblLivroMouseClicked(evt);
            }
        });
        jScrollPane1.setViewportView(tblLivro);

        bttAlterar.setText("Alterar");
        bttAlterar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                bttAlterarActionPerformed(evt);
            }
        });

        bttExcluir.setText("Excluir");
        bttExcluir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                bttExcluirActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 599, Short.MAX_VALUE)
                        .addContainerGap())
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(lblEdicao, javax.swing.GroupLayout.PREFERRED_SIZE, 45, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                .addComponent(lblTitulo, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addComponent(lblAutor, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addComponent(lblEditora))
                            .addComponent(bttAlterar))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(bttExcluir)
                                .addGap(187, 187, 187)
                                .addComponent(bttLimpar)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(bttOk, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                            .addComponent(txtTitulo, javax.swing.GroupLayout.DEFAULT_SIZE, 528, Short.MAX_VALUE)
                            .addComponent(txtAutor, javax.swing.GroupLayout.DEFAULT_SIZE, 528, Short.MAX_VALUE)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(txtEditora, javax.swing.GroupLayout.PREFERRED_SIZE, 217, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(lblGenero)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(txtGenero))
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(txtEdicao, javax.swing.GroupLayout.DEFAULT_SIZE, 81, Short.MAX_VALUE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(lblISBN, javax.swing.GroupLayout.PREFERRED_SIZE, 38, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(txtISBN, javax.swing.GroupLayout.DEFAULT_SIZE, 188, Short.MAX_VALUE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(lblTipo, javax.swing.GroupLayout.PREFERRED_SIZE, 32, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(txtTipo, javax.swing.GroupLayout.PREFERRED_SIZE, 173, javax.swing.GroupLayout.PREFERRED_SIZE)))
                        .addContainerGap())))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(lblTitulo, javax.swing.GroupLayout.PREFERRED_SIZE, 24, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(4, 4, 4)
                        .addComponent(txtTitulo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE, false)
                    .addComponent(lblAutor, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(txtAutor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(lblEditora)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                        .addGroup(layout.createSequentialGroup()
                            .addGap(6, 6, 6)
                            .addComponent(lblGenero))
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(txtGenero, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(txtEditora, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(lblEdicao)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE, false)
                        .addComponent(txtEdicao, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(txtTipo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(txtISBN, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(lblTipo, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(lblISBN)))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(bttOk)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(bttLimpar)
                        .addComponent(bttAlterar)
                        .addComponent(bttExcluir)))
                .addGap(19, 19, 19)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 88, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>

    private void txtAutorActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
}                                        

    private void txtEdicaoActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
}

    private void txtEditoraActionPerformed(java.awt.event.ActionEvent evt) {                                           
        // TODO add your handling code here:
}                                          

    private void bttLimparActionPerformed(java.awt.event.ActionEvent evt) {                                          
        limpar();
}                                         

    private void txtISBNActionPerformed(java.awt.event.ActionEvent evt) {                                        
        // TODO add your handling code here:
}                                       

    private void bttOkActionPerformed(java.awt.event.ActionEvent evt) {                                      
        salvar();
        Livro livro=new Livro();
        livro.setTitulo(txtTitulo.getText());
        livro.setAutor(txtAutor.getText());
        livro.setEditora(txtEditora.getText());
        livro.setGenero(txtGenero.getText());
        livro.setIsbn(txtISBN.getText());
        livro.setTipo(txtTipo.getText());
        livro.setEdicao(Integer.parseInt(txtEdicao.getText()));
        PerLivro perlivro=new PerLivro();
        perlivro.gravar(livro);
        limpar();
    }                                     

    private void tblLivroMouseClicked(java.awt.event.MouseEvent evt) {
        int selecionado = tblLivro.getSelectedRow();

    txtTitulo.setText((String) tblLivro.getValueAt(selecionado,0));
    txtAutor.setText((String) tblLivro.getValueAt(selecionado,1));
    txtEditora.setText((String) tblLivro.getValueAt(selecionado,2));
    txtISBN.setText((String) tblLivro.getValueAt(selecionado,5));
    txtTipo.setText((String) tblLivro.getValueAt(selecionado,6));
    txtGenero.setText((String) tblLivro.getValueAt(selecionado,3));
    txtEdicao.setText((String) tblLivro.getValueAt(selecionado,4));
    Livro.isbn.setText(txtISBN.getText());
    }

    private void bttAlterarActionPerformed(java.awt.event.ActionEvent evt) {
       PerLivro perlivro=new PerLivro();
       perlivro.listar();
      
     
    

       

    }

    private void bttExcluirActionPerformed(java.awt.event.ActionEvent evt) {
PerLivro perlivro=new PerLivro();
        perlivro.excluir();        // TODO add your handling code here:
    }

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new TelaLivro().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify
    private javax.swing.JButton bttAlterar;
    private javax.swing.JButton bttExcluir;
    private javax.swing.JButton bttLimpar;
    private javax.swing.JButton bttOk;
    private javax.swing.JDesktopPane jDesktopPane1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JLabel lblAutor;
    private javax.swing.JLabel lblEdicao;
    private javax.swing.JLabel lblEditora;
    private javax.swing.JLabel lblGenero;
    private javax.swing.JLabel lblISBN;
    private javax.swing.JLabel lblTipo;
    private javax.swing.JLabel lblTitulo;
    private javax.swing.JTable tblLivro;
    private javax.swing.JTextField txtAutor;
    private javax.swing.JTextField txtEdicao;
    private javax.swing.JTextField txtEditora;
    private javax.swing.JTextField txtGenero;
    private javax.swing.JTextField txtISBN;
    private javax.swing.JTextField txtTipo;
    private javax.swing.JTextField txtTitulo;
    // End of variables declaration
public void limpar(){
    txtTitulo.setText(null);
    txtAutor.setText(null);
    txtEditora.setText(null);
    txtISBN.setText(null);
    txtTipo.setText(null);
    txtGenero.setText(null);
    txtEdicao.setText(null);

}

public void salvar(){
DefaultTableModel modelo=(DefaultTableModel) tblLivro.getModel();
String[] linha=new String[7];
           linha[0]=txtTitulo.getText();
           linha[1]=txtAutor.getText();
           linha[2]=txtEditora.getText();
           linha[3]=txtGenero.getText();
           linha[4]=txtEdicao.getText();
           linha[5]=txtISBN.getText();
           linha[6]=txtTipo.getText();
           modelo.addRow(linha);
           tblLivro.setModel(modelo);
           //limpar();
}
public void alterar(){

}
}

PerLivro

package persistencia;

import fronteira.TelaLivro;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.JOptionPane;
import modelo.Livro;
import fronteira.TelaLivro;


public class PerLivro {

   
    public void excluir() {
        
      String sql="delete from livros where Editora="+TelaLivro.isbn;
    try{
            Connection conn=Conexao.getConexao();
            PreparedStatement pst=conn.prepareStatement(sql);
             pst.executeUpdate();


    }catch(Exception e){

      System.out.println("Erro excluir: "+e.toString());

    }
    }
    public void gravar(Livro livro){
        String sql="insert into livros(Titulo,Autor,Editora,Genero,Isbn,Edicao,Tipo)values(?,?,?,?,?,?,?)";
        try{
            Connection conn=Conexao.getConexao();
            PreparedStatement pst=conn.prepareStatement(sql);
            pst.setString(1,livro.getTitulo());
            pst.setString(2, livro.getAutor());
            pst.setString(3, livro.getEditora());
            pst.setString(4, livro.getGenero());
            pst.setString(5, livro.getIsbn());
            pst.setInt(6, livro.getEdicao());
            pst.setString(7, livro.getTipo());
            pst.executeUpdate();
        }catch(Exception e){
            System.out.println("Erro ao gravar livro "+e.toString());
        }
        }
public ArrayList<Livro>listar(){
    String sql="select * from livros";
    try{
            Connection conn=Conexao.getConexao();
            PreparedStatement pst=conn.prepareStatement(sql);
            ResultSet rs=pst.executeQuery();
            ArrayList<Livro> livros= new ArrayList<Livro>();
            Livro livro;
            while(rs.next()){
                livro=new Livro();
                livro.setTitulo(rs.getString(1));
                livro.setAutor(rs.getString(2));
                livro.setEditora(rs.getString(3));
                livro.setGenero(rs.getString(4));
                livro.setIsbn(rs.getString(5));
                livro.setEdicao(rs.getInt(6));
                livro.setTipo(rs.getString(7));
                livros.add(livro);
                
    }
            }

                return livros;
    }catch(Exception e){

      System.out.println("Erro ao gravar livro "+e.toString());
      return null;
    }
        }

        }

DELETE: Não consigo deletar apenas um livro, que tem que ser feito pelo ISBN, só que diz que o txtIsbn ta na classe TElaLivro é privado e não pode ser acessado por outro pacote.
SELECT: Preciso listar na jTable os livros que já estão no banco, só que quando eu imprimo o ArraList dos livros, vem uns códigos tipo esse "modelo.Livro@09098u", como eu faço pra arrumar isso?

Alguém pode pelo amor de Deus me ajudar? To usando DefaultTableModel porque não sei usar os outros, já li sobre mas não entendi nada.

7 Respostas

rsakurai
  • Altere o método excluir para receber como parametro o ISBN, assim vc não precisa acessar a tela (TelaLivro.isbn).

  • A tabela esta mostrando modelo.Livro@09098u porque vc está percorrendo a lista e colocando os objetos dentro dela direto na tabela, vc precisa primeiro pegar o objeto que esta dentro da lista (Livro livro = listaDeLivros.get(cont)) e depois pegar o valor do atributo que você quer e adicionar ele na tabela.

guirodr

Como assim “alterar o método pra receber ISBN”?

rsakurai
public void excluir(String isbn) {   
  String sql="delete from livros where Editora=?";
  PreparedStatement pst=conn.prepareStatement(sql);
  pst.setString(1,isbn);
  pst.executeUpdate();
guirodr

Esse pst.setString(1,isbn) significa o que?

guirodr

E essa segunda parte que você disse, como faz isso? ):

rsakurai

Esse pst.setString(1,isbn) informa para seu PreparedStatement trocar o primeiro sinal de ? pelo valor do isbn.
OBS: Isso é similar ao seu método gravar().

A segunda parte tem a resposta no seu outro post:
http://www.guj.com.br/java/236785-imprimir-arraylist

List<Livro> lista = dao.listar();     
DefaultTableModel modelo = new DefaultTableModel();
modelo.addColumn("Titulo");
modelo.addColumn("Autor");
modelo.addColumn("Editora");
modelo.addColumn("Gênero");
modelo.addColumn("Edição");
modelo.addColumn("ISBN");
modelo.addColumn("Tipo");
for(Livro l : lista){
  modelo.addRow(new Object[]{l.getTitulo(),l.getAutor(),l.getEditora(),l.getGenero(), l.getEdicao(), l.getIsbn(), l.getTipo()});
}
tblLivro.setModel(modelo);

OBS: Existe forma melhor de fazer isso sem usar o DefaultTableModel.

guirodr

MA OE, CONSEGUI O EXCLUIR, AGORA O QUE FALTA MESMO É O LISTAR OS ITENS DO ARRAY. QUE EU NÃO TO ENTENDENDO ):

Criado 23 de março de 2011
Ultima resposta 24 de mar. de 2011
Respostas 7
Participantes 2