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:
[code]// 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[/code]