Re:Dúvida Java e BD[Resolvido]

12 respostas
A

Olá galera, mais uma vez precisando da ajuda de vocês.
Seguinte, estou tentando inserir dados num banco de dados Postgres utilizando JInternalFrame, porém, não estou conseguindo,
segue o codigo para inserção. Não da erro, somente não insere. Testei a conexão e está ok.

Obrigado

Classe DAO

public class CarroDAO {
    
    private Connection conexao;
    
    
    public CarroDAO(){
        conexao = new FabricaConexao().pegaConexao();
    }
    
    public void adiciona(Carro carro){
        
        String sql = "INSERT INTO carros(placa, marca, modelo, ano) values (?,?,?,?)";
        
        try{
            PreparedStatement stmt = conexao.prepareStatement(sql);
            
            stmt.setString(1, carro.getPlaca());
            stmt.setString(2, carro.getMarca());
            stmt.setString(3, carro.getModelo());
            stmt.setInt(4, carro.getAno());
            
            stmt.execute();
            stmt.close();
            
        }catch(SQLException e){
            e.printStackTrace();
            
        }finally{
            
            try{
            conexao.close();
            
            }catch(SQLException e){
                e.printStackTrace();
            }
        }
        
    }
    
}

Classe TelaCarro

public class TelaCarro extends TelaModelo{
    
    private JLabel jlPlaca = new JLabel("Placa: ");
    private JTextField txtPlaca = new JTextField(10);
    private JLabel jlMarca = new JLabel("Marca: ");
    private JTextField txtMarca = new JTextField(20);
    private JLabel jlModelo = new JLabel("Modelo: ");
    private JTextField txtModelo = new JTextField(20);
    private JLabel jlAno = new JLabel("Ano: ");
    Integer listaAno[] = {2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012};
    JComboBox<Integer> listAno = new JComboBox<Integer>(listaAno);
    public JDesktopPane desktop;
    public ArrayList<Carro> lista = new ArrayList<Carro>();
    
    
    public TelaCarro(String titulo){
        super(titulo);
        //this.desktop = desktop;
        addComponent();
        setVisible(true);
        pack();
    }

    public String getTxtPlaca(){
        return txtPlaca.getText();
    }
    
    public String getTxtMarca(){
        return txtMarca.getText();
    }
    
    public String getTxtModelo(){
        return txtModelo.getText();
    }
    
    public JComboBox getAno(){
        return listAno;
    }
    
    private void addComponent(){
        adicionandoComponent(jlPlaca, 0, 0, 1, 1);
        adicionandoComponent(txtPlaca, 0, 1, 1, 1);
        
        adicionandoComponent(jlMarca, 1, 0, 1, 1);
        adicionandoComponent(txtMarca, 1, 1, 1, 1);
        
        adicionandoComponent(jlModelo, 2, 0, 1, 1);
        adicionandoComponent(txtModelo, 2, 1, 1, 1);
        
        adicionandoComponent(jlAno, 3, 0, 1, 1);
        adicionandoComponent(listAno,3, 1, 1, 1);
    }
    
   
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == getButtonInserir()){
           
            Carro carro = new Carro();
            carro.setPlaca(this.getTxtPlaca());
            carro.setMarca(this.getTxtMarca());
            carro.setModelo(this.getTxtModelo());
            carro.setAno((Integer) this.getAno().getSelectedItem());
            
            CarroDAO dao = new CarroDAO();
            dao.adiciona(carro);
            
            JOptionPane.showMessageDialog(null, "Gravado!");
        }
    }
    
}

12 Respostas

Margel_Douglas

Tente usar

stmt.executeUpdate();

ao invés de

stmt.execute();
L

voce ja depurou o codigo pra ve se a conexao esta ok?

A

Margel Douglas:
Tente usar

stmt.executeUpdate();

ao invés de

stmt.execute();

Olá Douglas, tentei mas continua não dando certo.
Aproveitando, qual a diferença entre os dois metodos?

A

Olá, criei uma classe para testar a conexão e está ok!
^^

A

cara,

faz o seguinte,

conexao.commit();

e ve se insere.

t+

rsantik
public CarroDAO(){  
        conexao = new FabricaConexao().pegaConexao();  
    }

Vejo que você pega a instancia da conexão da classe FabricaConexao.
Você poderia postar o código desta classe? Acredito que o problema deve estar aí…

Será que a conexão está aberta?
Será que a string de conexão está certa?
Será que você referenciou o Jar corretamente para fazer a conexão com o banco? E este jar é referente ao banco que você quer dar o insert?
Será que realmente está pegando a classe instanciada?

Posta o código dessa classe, aí podemos analisar melhor.
Que banco vc ta está conectando?

A

rsantik:
public CarroDAO(){ conexao = new FabricaConexao().pegaConexao(); }

Vejo que você pega a instancia da conexão da classe FabricaConexao.
Você poderia postar o código desta classe? Acredito que o problema deve estar aí…

Será que a conexão está aberta?
Será que a string de conexão está certa?
Será que você referenciou o Jar corretamente para fazer a conexão com o banco? E este jar é referente ao banco que você quer dar o insert?
Será que realmente está pegando a classe instanciada?

Posta o código dessa classe, aí podemos analisar melhor.
Que banco vc ta está conectando?

Olá rsantik, estou usando o PostgreSQL.

public class FabricaConexao {
    
    private Connection conexao;
    
    public Connection pegaConexao(){
        
        try{
            return DriverManager.getConnection("jdbc:postgresql://localhost/veiculo", "postgres", "admin");
            
        }catch(SQLException e){
            e.printStackTrace();
        }
        return conexao;  
    }
}
rsantik

Tenta colocar a porta que o banco usa, por exemplo localhost:5432, também registra a classe com o comando Class.forName()

public class FabricaConexao {  
      
    private Connection conexao;  
      
    public Connection pegaConexao(){  
          
        try{ 
            Class.forName("org.postgresql.Driver");
            return DriverManager.getConnection("jdbc:postgres://localhost:5432/postgres", "postgres", "admin");  
              
        }catch(SQLException e){  
            e.printStackTrace();  
        }  
        return conexao;    
    }  
}

http://javafree.uol.com.br/topic-864235-Driver-JDBC-postgreSQL.html

A

rsantik:
Tenta colocar a porta que o banco usa, por exemplo localhost:5432, também registra a classe com o comando Class.forName()

public class FabricaConexao {  
      
    private Connection conexao;  
      
    public Connection pegaConexao(){  
          
        try{ 
            Class.forName("org.postgresql.Driver");
            return DriverManager.getConnection("jdbc:postgres://localhost:5432/postgres", "postgres", "admin");  
              
        }catch(SQLException e){  
            e.printStackTrace();  
        }  
        return conexao;    
    }  
}

http://javafree.uol.com.br/topic-864235-Driver-JDBC-postgreSQL.html

Obrigado Rodrigo, mas continua não dando certo :frowning:

Acredito que o erro é referente ao método actionPerformed, no momento em que o botão é clicado.
Alguém poderia me dizer se está correto da maneira que fiz, pois não da erro algum.

Grato.

Margel_Douglas

cara lista alguma coisa na console
naquele teu action, antes do “if”, pra ver
se esta chegando nele mesmo

public void actionPerformed(ActionEvent e) { 
         System.out.println("OK!");
        if (e.getSource() == getButtonInserir()){

ou use o bebug

e sobre a diferença de executeUpdate para apenas execute …
executeUpdate é usado em métodos de alteração no banco, como insert update e delete,
e ele ja te retorna o resultado do teu comando

lucasportela

Esse actionPerformed é de qual componente? Tem que criar um actionPerformed do botão que você quer usar para inserir, senão não vai mesmo.

Exemplo

JButton btnInserir = new JButton("INSERIR");
btnInserir.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        // inserir no banco...
				
    }
});
A

Boa noite galera, agradeço a todos pela ajuda.
Descobri o que estava errado, um erro simplesmente “ridículo”.
Faltou adicionar o Ouvinte kkkkkk.

Obrigado a todos!!!

Criado 18 de setembro de 2011
Ultima resposta 19 de set. de 2011
Respostas 12
Participantes 6