Urgente. Alguém indique o erro desse código

4 respostas
Rafael_ap

Por favor.
Eu estou desenvolvendo um aplicativo desktop com conexao a mysql
e tem um trecho do meu codigo que não funciona. Se alguém puder indicar um erro que eu não estou vendo...
Só quero dizer que não é um sintaxe(acho), pois não aparesce e foi revisado várias vezes.

Aí está um pedaço da minha classe que faz a conexao com o BD.

public void fazerConexao() {
        try{
            Class.forName("com.mysql.jdbc.Driver");
            conectar = DriverManager.getConnection("jdbc:mysql://localhost:3306/prova12_11", "root", "rafael");
            st = conectar.createStatement();
            retorno = 1;
        }catch(Exception e1){
            retorno = 0;
        }
    }


       public ResultSet consultar(String sql){
        try {
            rs = st.executeQuery(sql);
            retorno = 1;
        } catch (SQLException y){
            retorno = 0;
        }
        return rs;
    }
            
    public int getRetorno(){
        return retorno;
    }

Aí está o botao do formulário que recebe os dados e deveria responder com o resultado de uma consulta:

String s = JOptionPane.showInputDialog("Digite o codigo.");
        String sql = "select * from produtos where Codigo = '"+ s +"'";
    
        con.fazerConexao();

        if(con.getRetorno() == 0){
            JOptionPane.showMessageDialog(null, "Chame um bombeiro");
            return;
        } else {
            ResultSet rs = con.consultar(sql);
            if(con.getRetorno() == 1){
                try {
                    txtCodigo.setText(rs.getString(1)); 
                    txtProduto.setText(rs.getString(2));
                    txtPreco.setText(rs.getString(4));
                    
                    if(rs.getString(3).equals("perecivel")) {
                        rdbPer.setSelected(true);
                        rdbN.setSelected(false);
                    } else {
                        rdbPer.setSelected(false);
                        rdbN.setSelected(true);
                    }
                    
                    if(rs.getString(5).equals("1")){
                        cbbCar.setSelectedItem(1);
                    }
                    if(rs.getString(5).equals("2")){
                        cbbCar.setSelectedItem(2);
                    }
                    if(rs.getString(5).equals("3")){
                        cbbCar.setSelectedItem(3);
                    }
                    if(rs.getString(5).equals("4")){
                        cbbCar.setSelectedItem(4);
                }
            } catch(SQLException e2){}
            } 
    }

4 Respostas

cpsilva

Caro Rafael manda uns detalhes ae…
descreve sua tabela e diz o que vc quer fazer, o que quer executar?

Rafael_ap

Neste trecho, o qual dá erro(na verdade não ocorre nada), eu pretendo pegar os resultados
de uma pesquisa através de uma chave primária(código), e depois configurar os campos
de um JFrame com elas.

Minhas tuplas tem 5 campos. Na ordem que aparesce acima.

Porém, ao executar, o código não imprime nada.

cpsilva

Bom, eu sou iniciante no java, consegui deseta forma, nao sei se é exatamente oque vc precisa mas dá para adaptar, acredito.
Desculpe se houver algum erro grosseiro de convensão, estava mais preocupado em execultar.
Peguei alguns códigos aqui mesmo no forum, portanto se alguem que for o dono ler este post não tenho interesse em ganhar seus créditos.

Primeiro uma fabrica de conexao:
package br.caelum.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ConnectionFactory {
	public static Connection getConnection() throws SQLException {
	       try {
	              Class.forName("com.mysql.jdbc.Driver");
	              return DriverManager.getConnection("jdbc:mysql://localhost/banco","root","contem");
	       } catch (ClassNotFoundException e) {
	              throw new SQLException(e.getMessage());
	       }
	}

}
Minha classe Produto, simples:
public class Produto {
	private String produto;
	private String preco;
	private int codigo;
	private String tipo;
	//geters/seters
}
Uma classe DAO, onde aprendi que será a classe responsável por todas as transações desta forma evita código perdido nas outras classes, tudo que precisa de sql deveria ser colcado aqui, select, update, insert etc...
package br.caelum.jdbc.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import br.caelum.jdbc.ConnectionFactory;
import br.caelum.jdbc.modelo.Produto;
public class ProdutoDAO {
	private Connection conn;
	public ProdutoDAO() throws SQLException{
		this.conn = ConnectionFactory.getConnection();
	}   
    public Produto getProduto(int codigo) throws SQLException {
        PreparedStatement stmt =  this.conn.prepareStatement("select * from produtos where codigo="+codigo);
        ResultSet rs = stmt.executeQuery();
        Produto produto = new Produto();
        if(rs.next()) {        	
        	produto.setPreco(rs.getString("preco"));
        	produto.setProduto(rs.getString("produto"));
        	produto.setTipo(rs.getString("tipo"));            
        }       
        rs.close();
        stmt.close();
        return produto;
  }

}
Por fim o painel, vc devera digitar o codigo por exemplo digitar 1 no campo codigo e ele ira preencher os demais campos:
package br.caelum.swing;
import javax.swing.*;
import br.caelum.jdbc.dao.ProdutoDAO;
import br.caelum.jdbc.modelo.Produto;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;
public class Painel extends JFrame {	
	public JLabel lblCodigo, lblProduto, lblTipo, lblPerecivel,lblPreco;
	public JTextField jtfCodigo, jtfProduto, jtfTipo,jtfPreco;
	public JCheckBox jchPerecivel;
	public JTextArea jtaCadastro;
	public JButton btnBotaoOK, btnBotaoCancelar;
	public Painel() {				
		lblCodigo = new JLabel(" Codigo :");
		jtfCodigo = new JTextField();
		lblProduto = new JLabel(" Produto :");
		jtfProduto = new JTextField();
		lblPreco = new JLabel(" Preco :");
		jtfPreco = new JTextField();
		lblPerecivel = new JLabel(" Perecivel :");
		jchPerecivel = new JCheckBox();
		JPanel pGrid = new JPanel(new GridLayout(4, 2));
		pGrid.add(lblCodigo);
		pGrid.add(jtfCodigo);
		pGrid.add(lblProduto);
		pGrid.add(jtfProduto);
		pGrid.add(lblPreco);
		pGrid.add(jtfPreco);
		pGrid.add(lblPerecivel);
		pGrid.add(jchPerecivel);		
		btnBotaoOK = new JButton("Buscar");
		btnBotaoOK.addActionListener(al_botao);		
		JPanel pBotoes = new JPanel(new GridLayout(0, 2));
		pBotoes.add(btnBotaoOK);		
		this.setLayout(new BorderLayout());
		this.getContentPane().add(pGrid, BorderLayout.NORTH);
		this.getContentPane().add(pBotoes, BorderLayout.SOUTH);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setTitle("Consulta");
		this.setSize(400, 200);
		this.setResizable(false);
		this.setLocationRelativeTo(null);
		this.setVisible(true);
	}	
	public static void main(String[] args) {
		JFrame.setDefaultLookAndFeelDecorated(true);
		new Painel();
	}	
	ActionListener
	al_botao = new ActionListener()  
	 {  
	    public void actionPerformed(ActionEvent ev)  
	    {   
	      try {
				ProdutoDAO dao = new ProdutoDAO();
				Produto produto = dao.getProduto(Integer.parseInt(jtfCodigo.getText()));
				atualizaPainel(produto);
			} catch (SQLException e) {e.printStackTrace();}
	     }
		private void atualizaPainel(Produto produto) {			
			jtfProduto.setText(produto.getProduto());
			jtfPreco.setText(produto.getPreco());
			if(produto.getTipo().equals("perecivel")){								
				jchPerecivel.setSelected(true);
			}else{
				jchPerecivel.setSelected(false);
			}
			
		}  
	}; 
}
Meu banco esta desta forma: +--------+----------+-------+-------------------+ | codigo | produto | preco | tipo | +--------+----------+-------+-------------------+ | 1 | produto1 | 10,20 | perecivel | | 2 | produto2 | 10,10 | perecivel | | 3 | produto4 | 10,40 | nao perecivel | | 4 | produto4 | 40,40 | nao perecivel | +--------+----------+-------+-------------------+

Bom espero ter ajudado, e nao confundido...
Estou aprendendo tambem.

Rafael_ap

Valeu, mas descobri que meu erro era bem mais simples.
Eu estava importando a biblioteca connector J para mysql, mas deveria
importar o arquivo JAR.
Mas seu código me ajudou a “rearrumar” o meu.
Obrigado.!

Criado 16 de novembro de 2008
Ultima resposta 17 de nov. de 2008
Respostas 4
Participantes 2