Update em uma tabela, como faÇo?

3 respostas
D

Pessoal,
Estou apanhando um pouquinho aki… Vê se podem me ajudar?
Tipo, estou fazendo um programa, conectei com o BD(Postgree) e já está cadastrando os dados normalmente. Estou tendo dificuldades para atualizar dados de um objeto selecionado.
Segue abaixo o código.

Em uma classe que criei para fazer o controle eu coloquei:

if (e.getActionCommand().equals("Alterar"))
		{
			
			DAO.alterar(C);
			for(int i=0;i<DTM.getRowCount();i++)
			{
				
				if(DTM.getValueAt(i,1).equals(C.getCodigo()))
				{
					DTM.setValueAt(C.getNome(),i,2);
					DTM.setValueAt(C.getEndereco(),i,3);
					DTM.setValueAt(C.getTel_cel(),i,4);	
					
					JOptionPane.showMessageDialog(null,"Alteração confirmada");
					break;
					
				}
				else
				{
					JOptionPane.showMessageDialog(null,"Código Inexistente!");
				}
			}	
			
			
		}

E na classe que faz a conexao com o bando eu coloquei:

public void alterar(Cliente C)
	{
		try
		{
			PS = c.prepareStatement("UPDATE cliente SET nome=?,endereco=?,tel_cel=? WHERE codigo=?");
			
			PS.setString(1,C.getCodigo());
			PS.setString(2,C.getNome());
			PS.setString(3,C.getEndereco());
			PS.setString(4,C.getTel_cel());
		}
		catch (Exception e)
		{
			
		}
	}

Acho q o problema é a comunicação entre esses 2 IF´S, mais não sei o q pode ser.

AJUDEM POR FAVOR!>

3 Respostas

E

Cara seu código está bem confuso. Vamos ao problema:

você obteve um PreparedStantment (ok)
setou os parâmentros (ok)
Mas não executou o update PS…executeUpdate():

Ob.: cuidado com o padrão de moneclatura de suas variáveis c igual a um objeto Connection, C igual ao Cliente, PS igual a um objeto PreparedStatement.

D

Adicioneio o comando mais não adiantou, continua sem funcionar.
Segue como ficou:

CLASSE DAOCliente

package Modelo;

import java.sql.*;
import java.util.Vector;

public class DAOCliente 
{
	private Connection c;
	private PreparedStatement PS;
	private ResultSet R;
	
	public DAOCliente()
	{
		try
		{
			Class.forName("org.postgresql.Driver");
			c = DriverManager.getConnection("jdbc:postgresql:bancoVendas", "postgres", "post");
				PS = null;
				R = null;
		
		}
		catch(Exception e)
		{
		
		}
	}
	
		
	public void cadastrar (Cliente C)
	{
		try
		{
			PS = c.prepareStatement("INSERT INTO cliente VALUES(?,?,?,?)");
			PS.setString(1,C.getCodigo());
			PS.setString(2,C.getNome());
			PS.setString(3,C.getEndereco());
			PS.setString(4,C.getTel_cel());
			PS.executeUpdate();
			//executar SQL
		}
		catch(Exception e)
		{
			
		}
	}
	
	public void alterar(Cliente C)
	{
		try
		{
			PS = c.prepareStatement("UPDATE cliente SET nome=?,endereco=?,tel_cel=? WHERE codigo=?");
			
			PS.setString(1,C.getCodigo());
			PS.setString(2,C.getNome());
			PS.setString(3,C.getEndereco());
			PS.setString(4,C.getTel_cel());
			PS.executeUpdate();
		}
		catch (Exception e)
		{
			
		}
	}
	
	public void excluir (Cliente C){
		try{
			PS = c.prepareStatement("DELETE FROM cliente WHERE codigo=?");
			PS.setString(1,C.getCodigo());
			PS.executeUpdate();
		}
		catch(Exception e){
			
		}
	}
	
	
	public Cliente consultar (Cliente C){
		try{
			PS = c.prepareStatement("SELECT * FROM cliente WHERE codigo=?");
			PS.setString(1,C.getCodigo());
			R = PS.executeQuery();
			if(R.next()){
				
				C.setNome(R.getString("Nome"));
				C.setEndereco(R.getString("Endereco"));
				C.setTel_cel(R.getString("Tel/Cel"));
				PS.executeUpdate();
				return C;
			}
			else
				return null;
				
		}
		catch(Exception e){
			return null;	
		}
	}
	
	public void finalize()
		{
		//metodo automatico para fechamento de pendencias.
			try
			{
				PS.close();
				c.close();
			}
			catch(Exception e)
			{
			}		
			
		}
	
		
		
}

-------------------------------------------------------------------------

CLASSE ControleCliente

package Controle;

import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Vector;

import Modelo.*;
import Visual.*;

public class ControleCliente implements ActionListener
{
	
	private JFrame tela;
	
	public ControleCliente(JFrame tela)
	{
		this.tela = tela;
	}
	public ControleCliente()
	{
		
	}
	
	
	
	public void actionPerformed(ActionEvent e)
	{
		
		JPanel painel = (JPanel)tela.getContentPane().getComponent(0);
		JScrollPane sPainel = (JScrollPane)painel.getComponent(8);
		JViewport JV = (JViewport)sPainel.getComponent(0);
		JTable tabela = (JTable)JV.getComponent(0);
		DefaultTableModel DTM = (DefaultTableModel)tabela.getModel();
					
		Cliente C = new Cliente();
		DAOCliente DAO = new DAOCliente();
		
		JTextField codigo = (JTextField)painel.getComponent(1);
		JTextField nome = (JTextField)painel.getComponent(3);
		JTextField endereco = (JTextField)painel.getComponent(5);
		JTextField tel_cel = (JTextField)painel.getComponent(7);
		
		
		C.setCodigo(codigo.getText());
		C.setNome(nome.getText());
		C.setEndereco(endereco.getText());
		C.setTel_cel(tel_cel.getText());
		
		
		
		if(e.getActionCommand().equals("Cadastrar"))
		{
			DTM.addRow(new String[]{C.getCodigo(),C.getNome(),C.getEndereco(),C.getTel_cel()});
			DAO.cadastrar(C);
			
			JOptionPane.showMessageDialog(null,"Cadastrado Confirmado");
			
			codigo.setText("");
			nome.setText("");
			endereco.setText("");
			tel_cel.setText("");
		
		}
		
		if (e.getActionCommand().equals("Alterar"))
		{
			DAO.alterar(C);
			for(int i=0;i<DTM.getRowCount();i++)
			{
				if(DTM.getValueAt(0,i).equals(C.getCodigo()))
				{
					DTM.setValueAt(C.getNome(),1,i);
					DTM.setValueAt(C.getEndereco(),1,i);
					DTM.setValueAt(C.getTel_cel(),1,i);
					break;
				}
			}
			
			JOptionPane.showMessageDialog(null,"Alteração Confirmada");
			
			codigo.setText("");
			nome.setText("");
			endereco.setText("");
			tel_cel.setText("");
		}
	
			
		
		
if(e.getActionCommand().equals("Excluir")){
			
			boolean achou=false; int pos=0;
			
			DAO.excluir(C);
			for(int i=0;i<DTM.getRowCount();i++){
				if(DTM.getValueAt(0,i).equals(C.getCodigo())){
					pos=i;
					achou=true;
				}
				if(achou)
				{
					DTM.removeRow(pos);
					break;
					
				}
			}
			JOptionPane.showMessageDialog(null,"Cadastro Excluído");
			
			codigo.setText("");
			nome.setText("");
			endereco.setText("");
			tel_cel.setText("");
			
		}	

if(e.getActionCommand().equals("Consultar"))
{
	
	C=DAO.consultar(C);
	if(C == null){
		JOptionPane.showMessageDialog(null,"Cadastro Inexistente");
		
		codigo.setText("");
		nome.setText("");
		endereco.setText("");
		tel_cel.setText("");
	}
	else
	{
		codigo.setText(C.getCodigo());
		nome.setText(C.getNome());
		endereco.setText(C.getEndereco());
		tel_cel.setText(C.getTel_cel());
					
		JOptionPane.showMessageDialog(null,"Consulta efetuada com sucesso");
		//DTM.addRow(new String[]{A.getMat(),A.getNome(),A.getTel(),A.getData()});
	 
	}
} 
		
			
		if(e.getActionCommand().equals("Sair"))
		{
			tela.dispose();
		}
		
	}

}

Só está funcionando os comandos Cadastrar, excluir e sair. O Alterar e o consultar não funcionam.
Tem idéia do que pode ser?>

E

Vamos ao alterar:

public void alterar(Cliente C)  {  
      try  {  
             PS = c.prepareStatement("UPDATE cliente SET nome=?,endereco=?,tel_cel=? WHERE codigo=?");  
               
             PS.setString(1,C.getCodigo());  
             PS.setString(2,C.getNome());  
             PS.setString(3,C.getEndereco());  
             PS.setString(4,C.getTel_cel());  
             PS.executeUpdate();  
     }  catch (Exception e)  {  
             
     }  
}

O código é o quarto parâmetro e não o primeiro.

Essa serve para os dois:

public Cliente consultar (Cliente C){  
     try{  
          PS = c.prepareStatement("SELECT * FROM cliente WHERE codigo=?");  
          PS.setString(1,C.getCodigo());  
          R = PS.executeQuery();  
          if(R.next()){  
                 
               C.setNome(R.getString("Nome"));  
               C.setEndereco(R.getString("Endereco"));  
               C.setTel_cel(R.getString("Tel/Cel"));  
               PS.executeUpdate();  
               return C;  
          }  else  
               return null;  
      } catch(Exception e){  
          return null;      
      }  
}

O postgres é um banco de dados que é case sensitive para a cliação de nome de campos e tabelas resumindo verifique se o nome do campo é realmente Endereco ou endereco.

Mostra o SQL de construção da tabela que já ajuda muito.

Criado 3 de maio de 2008
Ultima resposta 11 de mai. de 2008
Respostas 3
Participantes 2