Olá pessoal. Estou tendo um problema com um cadastro, pois a inserção está funcionando show de bola, já a exclusão nem dá erro e nem exclui
O código de inserção é o seguinte:
private void btCadastrarActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
//Inserindo dados digitados no JTextField para que seja usado
//no comando SQL
nome = txNome.getText();
sobrenome = txSobrenome.getText();
//O campo código por ser autoincrementado no SQL, não entra nessa
//instrução pois ele é gerado pelo próprio banco, no caso MySQL
String strSQL = "INSERT INTO Autor (nome, sobrenome)"+
"VALUES (?, ?)";
//Cria um objeto conexão para poder comunicar com a classe Conexao
Conexao c = new Conexao();
//Cria um objeto Coonection ligado a classe Conexão
//e buscando a váriavel do tipo Connection da classe conexão
Connection conn = c.getConexao();
try
{
//Passa o comando SQL para a consulta no Banco de Dados
PreparedStatement stmt = conn.prepareStatement(strSQL);
//Altera os dados digitados nos TexFields no Banco de dados
//"1" é o indice do campo e "nome" é o nome do campo na tabela
stmt.setString(1, nome);
stmt.setString(2, sobrenome);
stmt.executeUpdate();
stmt.close();
conn.close();
//Se o procedimento for efetuado com sucesso, exibe:
JOptionPane.showMessageDialog(rootPane, "Registro Efetuado com sucesso");
}
catch (SQLException sqlex)
{
sqlex.getMessage();
}
/*
try
{
c.fecharConexao();
}
catch (Exception e)
{
throw new java.lang.RuntimeException("Erro Fechar");
}*/
}
O código de exclusão:
[code]private void btRemoverActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
//Verifica se não foi digitado nada
if ((txNome.getText().length() == 0) && (txSobrenome.getText().length() ==0))
{
JOptionPane.showMessageDialog(rootPane, "Digite o nome autor");
} //fim do if
else
{
//ShowConfirmDialog retorna inteiro dependendo da opção escolhida
int resp = JOptionPane.showConfirmDialog(rootPane, "Tem certeza"+
"que deseja excuir esse registro?");
if (resp == 0)
{
//instrução SQL
String strSQL = "DELETE FROM Autor"+
"WHERE nome =" +txNome.getText();
Conexao c = new Conexao();
Connection conn = c.getConexao();
try
{
PreparedStatement stmt = conn.prepareStatement(strSQL);
stmt.setString(1, nome);
stmt.executeUpdate(strSQL);
stmt.close();
conn.close();
}
catch (SQLException e)
{
e.getMessage();
}
}
}
}
[/code]
Espero que possam me ajudar, pois já estou batendo cabeça… rsrsrs. Abraço e muito sucesso a todos
se simplesmente não exclui o registro e também não aparece stack, manda imprimir o preparedsttement antes de executar
System.out.println(stmt.toString());
dae pega o q imprimir e executa direto no banco… veja o que acontece.
Se estiver imprimindo um stacktrace, cola ae pra gente ver.
String strSQL = "DELETE FROM Autor"+
"WHERE nome =" +txNome.getText();
mude para
// coloquei espaço apos o "Autor" e apos "nome =", pq ao concatenar a String ficaria "DELETE FROM AutorWHERE nome =NOMEAUTOR"
String strSQL = "DELETE FROM Autor "+
"WHERE nome = " +txNome.getText();
Aqui você pega o int da resposta
int resp = JOptionPane.showConfirmDialog(rootPane, "Tem certeza"+
"que deseja excuir esse registro?");
String strSQL = "DELETE FROM Autor"+
"WHERE nome =" +txNome.getText();
Porem em momento algum vc definiu o parametro “?” e sim está pegando do proprio componente.
Tente alterar o seu SQL para isto String strSQL = "DELETE FROM Autor "+
" WHERE nome = ?";
Assim faz sentido vc passar o parametro
Oi pessoal… Consegui resolver meu problema e até incrementei de deletar por nome e sobrenome, como podem ver no código abaixo:
[code]private void btCadastrarActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
//Inserindo dados digitados no JTextField para que seja usado
//no comando SQL
nome = txNome.getText();
sobrenome = txSobrenome.getText();
//O campo código por ser autoincrementado no SQL, não entra nessa
//instrução pois ele é gerado pelo próprio banco, no caso MySQL
String strSQL = "INSERT INTO Autor (nome, sobrenome)"+
"VALUES (?, ?)";
//Cria um objeto conexão para poder comunicar com a classe Conexao
Conexao c = new Conexao();
//Cria um objeto Coonection ligado a classe Conexão
//e buscando a váriavel do tipo Connection da classe conexão
Connection conn = c.getConexao();
try
{
//Passa o comando SQL para a consulta no Banco de Dados
PreparedStatement stmt = conn.prepareStatement(strSQL);
//Altera os dados digitados nos TexFields no Banco de dados
//"1" é o indice do campo e "nome" é o nome do campo na tabela
stmt.setString(1, nome);
stmt.setString(2, sobrenome);
stmt.execute(); //Porque para cadastrar tenho que usar executeUpdate() e para deletar lá em baixo uso execute()?
stmt.close();
conn.close();
//Se o procedimento for efetuado com sucesso, exibe:
JOptionPane.showMessageDialog(rootPane, "Registro Efetuado com sucesso");
}
catch (SQLException sqlex)
{
sqlex.getMessage();
}
/*
try
{
c.fecharConexao();
}
catch (Exception e)
{
throw new java.lang.RuntimeException("Erro Fechar");
}*/
}
private void btRemoverActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
//Verifica se não foi digitado nada
if ((txNome.getText().length() == 0) && (txSobrenome.getText().length() ==0))
{
JOptionPane.showMessageDialog(rootPane, "Digite o nome e sobrenome autor");
} //fim do if
else
{
//ShowConfirmDialog retorna inteiro dependendo da opção escolhida
int resp = JOptionPane.showConfirmDialog(rootPane, "Tem certeza"+
"que deseja excuir esse registro?");
if (resp == 0)
{
//instrução SQL
//String strSQL = "DELETE FROM Autor "+
// "WHERE nome = ?";
Conexao c = new Conexao();
Connection conn = c.getConexao();
nome = txNome.getText();
sobrenome = txSobrenome.getText();
String strSQL = "DELETE FROM Autor where nome = ? "+
"AND sobrenome = ?";
try
{
PreparedStatement stmt = conn.prepareStatement(strSQL);
stmt.setString(1, nome);
stmt.setString(2, sobrenome);
System.out.println(stmt.toString());
stmt.execute(); //Porque para deletar tenho que usar execute() e para cadastrar lá em cima uso executeUpdate()?
stmt.close();
conn.close();
}
catch (SQLException e)
{
e.getMessage();
}
}
}
} [/code]
Deu tudo certinho. Más agora surgiu uma nova dúvida… Porque para Cadastrar usei executeUpdate() e para remover usei execute()… Abri um post novo aonde essa pergunta pode ser respondida para ajudar o pessoal da comunidade quando procurar por essa dúvida específica. O link do post é //http://www.guj.com.br/posts/list/0/227726.java#1166902?
Agora como faço a parte de Update. Tô encontrando dificuldades pois quero inserir o nome a ser atualizado em meu JTextField txnome e logo depois inserir o novo nome… Más não estou conseguindo sucesso…