Problema na alteração de dados do um TableModel - Não consigo resolver

0 respostas
R

Boa tarde galera,
Seguinte estou com um problema na hora de atualizar dados no meu TableModel, seguinte:
- Eu selecione o a linha que desejo alterar e clicar no botao "Alterar" sendo assim ele abre uma mensagem e pede para digitar a nova informação, sendo assim executa normal e efetuar a alteração normal tambem, mas o meu problema é se possuir dois clientes com o mesmo telefone, ai quando você alterar um telefone automaticamente ele altera o telefone do outro cliente tambem sem eu ter pedido.

Esse é o problema, alguem pode me ajudar ?

O codigo é bem grande porem olhem da linha 261 ate 398 ( onde esta meu codigo do botao Alterar), segue meu codigo:
// Exibe o conteúdo da tabela Authors no
// banco de dados Books.
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.beans.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.EventObject;

import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.ScrollPaneConstants;
import javax.swing.JTable;
import javax.swing.JOptionPane;
import javax.swing.JButton;
import javax.swing.Box;

public class Resultado_Consulta_Cliente extends JFrame
{
	private static final long serialVersionUID = 1L;
	// driver JDBC e URL de banco de dados
	static final String JDBC_DRIVER = "org.postgresql.Driver";
	static final String DATABASE_URL = "jdbc:postgresql://localhost:5432/postgres";
	static final String USERNAME= "postgres";
	static final String PASSWORD= "password";
	//consulta padrão seleciona todas as linhas de tabela authors
	static final String DEFAULT_QUERY = "SELECT * FROM cliente";	
	
	private CResultSetTableModel tableModel;
	private JTextArea queryArea;
	private JLabel lbTelefone, lbIdCliente;
	private JPanel panelSair, panelBox, panelSouth, panelExcluir, panelAlterar;
	private JTextField txtIdCliente;
	JTable resultTable;

	// cria o ResultSetTableModel e GUI
	public Resultado_Consulta_Cliente()
	{
		super( "Consulta" );

		// cria o ResultSetTableModel e exibe tabela de banco de dados
		try
		{
			// cria o TableModel para resultados da consulta SELECT * FROM authors
			tableModel = new CResultSetTableModel( JDBC_DRIVER, DATABASE_URL,
					USERNAME, PASSWORD, DEFAULT_QUERY );
			
			//Configura Label
			lbTelefone = new JLabel ("Telefone:");
			lbIdCliente = new JLabel ("Digite o ID_Cliente para excluir:");
			
			//Configura TextField
			txtIdCliente = new JTextField(10);
			
			// configura JTextArea em que o usuário digita consultas
			queryArea = new JTextArea( "", 1,10);
			queryArea.setWrapStyleWord( true );
			queryArea.setLineWrap( true );

			JScrollPane scrollPane = new JScrollPane( queryArea,
					ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
					ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER );

			// configura o JButton para enviar consulta
			ImageIcon imgProcurar= new ImageIcon("imagens/imgProcurar.png"); 
			JButton submitButton = new JButton( imgProcurar );
			submitButton.setToolTipText("Procurar");
			
			//configura o JButton para limpar o TextArea
			ImageIcon imgLimpar = new ImageIcon("imagens/imgLimpar.png"); 
			JButton btLimpar = new JButton( imgLimpar );
			btLimpar.setToolTipText("Limpar");
			
			//configura outros botoes
			ImageIcon imgSair = new ImageIcon("imagens/imgSair.png"); 
			JButton btSair = new JButton( imgSair );
			btSair.setToolTipText("Sair");
			
			//configura outros botoes
			ImageIcon imgExcluir = new ImageIcon("imagens/imgExcluir.png"); 
			JButton btExcluir = new JButton( imgExcluir );
			btExcluir.setToolTipText("Excluir");
			
			//configura outros botoes
			ImageIcon imgAlterar = new ImageIcon("imagens/imgAlterar.png"); 
			JButton btAlterar = new JButton( imgAlterar );
			btAlterar.setToolTipText("Alterar");
			
			//Configurando panel Exlcuir
			panelExcluir = new JPanel ();
			panelExcluir.setLayout( new FlowLayout(FlowLayout.LEFT));
			panelExcluir.setPreferredSize(new Dimension(490,62));
			panelExcluir.setOpaque(false);
			panelExcluir.setBorder(BorderFactory.createTitledBorder("Excluir Usuário"));

			panelExcluir.add(lbIdCliente);
			panelExcluir.add(txtIdCliente);
			panelExcluir.add(btExcluir);
			
			//Configurando panel Alterar
			panelAlterar = new JPanel ();
			panelAlterar.setLayout( new FlowLayout(FlowLayout.RIGHT));
			panelAlterar.setPreferredSize(new Dimension(490,62));
			panelAlterar.setOpaque(false);
			panelAlterar.setBorder(BorderFactory.createTitledBorder("Alterar"));
			
			panelAlterar.add(btAlterar);
			
			//Configurando panelSair
			panelSair = new JPanel ();
			panelSair.setLayout( new FlowLayout(FlowLayout.CENTER));
		
			panelSair.add(btSair);
			
			
			//Configurando panelSouth
			panelSouth = new JPanel();
			panelSouth.setLayout( new BorderLayout() );
			panelSouth.add( panelExcluir, BorderLayout.NORTH );
			panelSouth.add( panelAlterar, BorderLayout.CENTER );
			panelSouth.add( panelSair, BorderLayout.SOUTH );

			//cria o Box para gerenciar o posicionamento da queryArea e do
			// submitButton na GUI
			panelBox = new JPanel();
			panelBox.setLayout( new FlowLayout( FlowLayout.LEFT ) );
			//Box box = Box.createHorizontalBox();
			panelBox.add(lbTelefone);
			panelBox.add( scrollPane );
			panelBox.add( submitButton );
			panelBox.add(btLimpar);		

			// cria o delegado JTable para tableModel
			resultTable = new JTable( tableModel );

			// posiciona os componentes GUI no painel de conteúdo
			add( panelBox, BorderLayout.NORTH );
			add( new JScrollPane( resultTable ), BorderLayout.CENTER );
			add( panelSouth ,BorderLayout.SOUTH );

			// cria evento ouvinte para submitButton
			submitButton.addActionListener(

					new ActionListener()
					{
						// passa consulta para modelo de tabela
						public void actionPerformed( ActionEvent event )
						{
							// realiza uma nova consulta
							try
							{
								String query = "SELECT * FROM cliente WHERE Telefone = '" + queryArea.getText() + "';"; 
								tableModel.setQuery( query );
							} // fim do try
							catch ( SQLException sqlException )
							{
								JOptionPane.showMessageDialog( null,
										sqlException.getMessage(), "Database error",
										JOptionPane.ERROR_MESSAGE );
								//tenta recuperar a partir da consulta de usuário inválida
								// executando consulta padrão
								try
								{
									tableModel.setQuery(DEFAULT_QUERY);
									queryArea.setText(" ");
								} // fim do try
								catch ( SQLException sqlException2 )
								{
									JOptionPane.showMessageDialog( null,
											sqlException2.getMessage(), "Database error",
											JOptionPane.ERROR_MESSAGE );

									// assegura que a conexão de banco de dados está fechada
									//tableModel.disconnectFromDatabase();

									System.exit( 1 ); // termina o aplicativo
								} // fim do catch interno
							} // fim do catch externo
						} // fim do actionPerformed
					} // fim da classe interna ActionListener
			); // fim da chamada para addActionListener
			
			//Cria evento Botao Limpar
			btLimpar.addActionListener(
					
					new ActionListener()
					{
						// passa consulta para modelo de tabela
						public void actionPerformed( ActionEvent event )
						{
							queryArea.setText("");
						}
					}	
					
					);
			
			//Cria evento Botao Sair
			btSair.addActionListener(
					
					new ActionListener()
					{
						// passa consulta para modelo de tabela
						public void actionPerformed( ActionEvent event )
						{
							tableModel.disconnectFromDatabase();
							System.exit( 0 );
						}
					}	
					
					);
			
			//Cria evento Botao Exluir
			btExcluir.addActionListener(
					
					new ActionListener()
					{
						// passa consulta para modelo de tabela
						public void actionPerformed( ActionEvent event )
						{
							// realiza uma nova consulta
							try
							{
								String Delete = "DELETE FROM cliente WHERE id_cliente = '" + txtIdCliente.getText() + "';"; 
								tableModel.setQuery( Delete );
							} // fim do try
							catch ( SQLException sqlException )
							{
								//tenta recuperar a partir da consulta de usuário inválida
								// executando consulta padrão
								try
								{
									tableModel.setQuery(DEFAULT_QUERY);
									txtIdCliente.setText(" ");
								} // fim do try
								catch ( SQLException sqlException2 )
								{
									
									// assegura que a conexão de banco de dados está fechada
									//tableModel.disconnectFromDatabase();

									System.exit( 1 ); // termina o aplicativo
								} // fim do catch interno
							}
						}
					}	
					
					);
			
			//Cria evento Botao Alterar
			btAlterar.addActionListener(
					
					new ActionListener()
					{
						// passa consulta para modelo de tabela
						public void actionPerformed( ActionEvent event )
						{
							try
							{
								//OBTEM O VALOR DA LINHA/COLUNA SELECIONADA NA TABELA E ARMAZENA O VALOR NA VARIAVEL
								String valorSelecionado = resultTable.getValueAt(resultTable.getSelectedRow(),resultTable.getSelectedColumn()).toString();  
								
								//JANELA PARA CONFIRMAR SE DESEJA MESMO ALTERAR O REGISTRO SELECIONADO
						        int status = JOptionPane.showConfirmDialog(null,"Deseja altererar o registro:  "+valorSelecionado+ "?","Atenção",JOptionPane.YES_NO_OPTION);
						        
								if (status == JOptionPane.YES_OPTION) 
						        { 
						        	//OBTEM O NUMERO DA POSIÇÃO DA COLUNA (NOME DO CAMPO DA TABELA)
						        	int campo = resultTable.getSelectedColumn();
						        	
						        	//OBTEM O VALOR DIGITADO NA JANELA PARA ALTERAR NO BANCO
						        	String valor = JOptionPane.showInputDialog(null,"Digite o valor que deseja alterar","Alterar",JOptionPane.QUESTION_MESSAGE);
						        	
						        	//CAMPO = 0 = IDcliente - NÃO PODE SER ALTERADO!
						        	if(campo == 0)
						        	{
						        		JOptionPane.showMessageDialog(null,"Campo ID não pode ser alterado!","ERRO",JOptionPane.ERROR_MESSAGE);
						        	}
						           	if(campo == 1)
						        	{
						           		String SQL = "UPDATE cliente SET nome = '"+valor+"' WHERE nome LIKE '"+valorSelecionado+"' ";
						           		tableModel.setQuery( SQL );
						        						        		
						        		try
						        		{					        			
						     	        	JOptionPane.showMessageDialog(null,"O registro foi alterado com sucesso!","INFORMAÇÃO",JOptionPane.INFORMATION_MESSAGE);
						     	        							                }
						                catch (Exception ex)
						                {   
						             	   ex.printStackTrace();   
						                }
						        	}
						           	if(campo == 2)
						        	{
						           		String SQL = "UPDATE cliente SET telefone = '"+valor+"' WHERE telefone LIKE '"+valorSelecionado+"' ";
						           		tableModel.setQuery( SQL );
						        						        		
						        		try
						        		{					        			
						     	        	JOptionPane.showMessageDialog(null,"O registro foi alterado com sucesso!","INFORMAÇÃO",JOptionPane.INFORMATION_MESSAGE);
						     	        							                }
						                catch (Exception ex)
						                {   
						             	   ex.printStackTrace();   
						                }
						        	}
						           	if(campo == 3)
						        	{
						           		String SQL = "UPDATE cliente SET rua = '"+valor+"' WHERE rua LIKE '"+valorSelecionado+"' ";
						           		tableModel.setQuery( SQL );
						        						        		
						        		try
						        		{					        			
						     	        	JOptionPane.showMessageDialog(null,"O registro foi alterado com sucesso!","INFORMAÇÃO",JOptionPane.INFORMATION_MESSAGE);
						     	        							                }
						                catch (Exception ex)
						                {   
						             	   ex.printStackTrace();   
						                }
						        	}
						           	if(campo == 4)
						        	{
						           		String SQL = "UPDATE cliente SET numero = '"+valor+"' WHERE numero LIKE '"+valorSelecionado+"' ";
						           		//tableModel.setQuery( SQL );
						        						        		
						        		try
						        		{	
						        			tableModel.setQuery( SQL );
						     	        	JOptionPane.showMessageDialog(null,"O registro foi alterado com sucesso!","INFORMAÇÃO",JOptionPane.INFORMATION_MESSAGE);
						     	        							                }
						                catch (Exception ex)
						                {   
						             	   ex.printStackTrace();   
						                }
						        	}
						           	if(campo == 5)
						        	{
						           		String SQL = "UPDATE cliente SET bairro = '"+valor+"' WHERE bairro LIKE '"+valorSelecionado+"' ";
						           		tableModel.setQuery( SQL );
						        						        		
						        		try
						        		{					        			
						     	        	JOptionPane.showMessageDialog(null,"O registro foi alterado com sucesso!","INFORMAÇÃO",JOptionPane.INFORMATION_MESSAGE);
						     	        							                }
						                catch (Exception ex)
						                {   
						             	   ex.printStackTrace();   
						                }
						        	}
						           	if(campo == 6)
						        	{
						           		String SQL = "UPDATE cliente SET complemento = '"+valor+"' WHERE complemento LIKE '"+valorSelecionado+"' ";
						           		tableModel.setQuery( SQL );
						        						        		
						        		try
						        		{					        			
						     	        	JOptionPane.showMessageDialog(null,"O registro foi alterado com sucesso!","INFORMAÇÃO",JOptionPane.INFORMATION_MESSAGE);
						     	        							                }
						                catch (Exception ex)
						                {   
						             	   ex.printStackTrace();   
						                }
						        	}
						        
						        } 
							}
							catch ( Exception ex )
							{
								//tenta recuperar a partir da consulta de usuário inválida
								// executando consulta padrão
								try
								{
									tableModel.setQuery(DEFAULT_QUERY);
								} // fim do try
								catch ( SQLException sqlException2 )
								{
									
									// assegura que a conexão de banco de dados está fechada
									//tableModel.disconnectFromDatabase();

									System.exit( 1 ); // termina o aplicativo
								} // fim do catch interno
							}
						}
					}	
					
					);

			setSize( 500, 400 ); // configura tamanho da janela
		    setLocationRelativeTo(null); //ABRE O PROGRAMA NO MEIO DA TELA
		    setResizable(false); //BLOQUEANDO REDIMENSIONAMENTO DA JANELA
			setVisible( true ); // exibe a janela
		} // fim do try
		catch ( ClassNotFoundException classNotFound )
		{
			JOptionPane.showMessageDialog( null,
					"Postgre driver not found", "Driver not found",
					JOptionPane.ERROR_MESSAGE );

			System.exit( 1 ); // termina o aplicativo
		} // fim do catch
		catch ( SQLException sqlException )
		{
			JOptionPane.showMessageDialog( null, sqlException.getMessage(),
					"Database error", JOptionPane.ERROR_MESSAGE );

			// assegura que a conexão de banco de dados está fechada
			tableModel.disconnectFromDatabase();

			System.exit( 1 ); // termina o aplicativo
		} // fim do catch

		// dispõe da janela quando o usuário fecha o aplicativo (isso sobrescreve
		// o padrão de HIDE_ON_CLOSE)
		setDefaultCloseOperation( DISPOSE_ON_CLOSE );

		// assegura que a conexão de banco de dados é fechada quando usuário fecha o aplicativo
		addWindowListener(
				new WindowAdapter()
				{
					// desconecta-se do banco de dados e sai quando a janela for fechada
					public void windowClosed( WindowEvent event )
					{
						tableModel.disconnectFromDatabase();
						System.exit( 0 );
					} // fim do método windowClosed
				} // fim da classe WindowAdapter interna
		); // fim da chamada para addWindowListener
	} // fim do construtor DisplayQueryResults

	// executa o aplicativo
	public static void main( String args[] )
	{
		new Resultado_Consulta_Cliente();
	} // fim do main
} // fim da classe DisplayQueryResults
Criado 4 de outubro de 2010
Respostas 0
Participantes 1