Estou fazendo uma aplicação simples, com uma tabela que carrega os dados de livros de um banco de dados em Access
Fiz uma classe LivroDAO com um método para excluir:
[code]public void excluirLivro(int codigo, JPanel j){
String sql=“Delete FROM Livro WHERE Codigo=?”;
try{
con = new Conexao().criaConexao();
pstm =con.prepareStatement(sql);
pstm.setInt(1,codigo);
pstm.executeUpdate();
JOptionPane.showMessageDialog(j, "Livro Excluído");
this.desconectar();
}
catch (SQLException e){
JOptionPane.showMessageDialog(null, "Problema ao conectar na classe LivroDAO! "+e.getMessage());
}
}[/code]
e ele me da este erro, mandei o painel de parametro tambem só para o JOptionPane ficar no centro do painel, pois o frame é pequeno
e tenho outros métodos da classe DAO que funcionam, só este não funciona, a unica diferença é que este é um campo do tipo int, os outros são String
aqui a chamada deste método:
LivroDAO li=new LivroDAO();
Integer codigo=(Integer) tabela_livro.getValueAt(tabela_livro.getSelectedRow(), 0);
int cod=codigo.intValue();
// fiz este JOptionPane só para testar, e ele me mostra o numero corretamente
JOptionPane.showMessageDialog(rootPane, ""+cod);
li.excluirLivro(cod, jPanel1);
Só neste método me da este erro, os outros funcionam normalmente, só que os campos que passo de parâmetros nos outros são do tipo String
Alguem pode me ajudar?
Posta a exception, brother.
[]'s
a exception é essa.
aqui o PrintStackTrace
java.sql.SQLException: [Microsoft][Driver ODBC Microsoft Access] Parâmetros insuficientes. Eram esperados 2.
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6957)
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7114)
at sun.jdbc.odbc.JdbcOdbc.SQLExecute(JdbcOdbc.java:3149)
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.execute(JdbcOdbcPreparedStatement.java:216)
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.executeUpdate(JdbcOdbcPreparedStatement.java:138)
at sistema_biblioteca.LivroDAO.excluirLivro(LivroDAO.java:91)
at sistema_biblioteca.Form_Livro.btn_excluirActionPerformed(Form_Livro.java:345)
at sistema_biblioteca.Form_Livro.access$300(Form_Livro.java:27)
at sistema_biblioteca.Form_Livro$4.actionPerformed(Form_Livro.java:191)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6216)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
at java.awt.Component.processEvent(Component.java:5981)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4583)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4413)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4556)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4220)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4150)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2475)
at java.awt.Component.dispatchEvent(Component.java:4413)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Estranho, tentei inserir o comando SQL direto no Access:
Delete from Livro where codigo=3
mas quando executo, ele abre uma janelinha escrito:
“Inserir valor do Parâmetro”
o nome do campo código
e um campo pra poder digitar
Não estou entendendo isso, talvez por isso ele dava o erro
mesmo mandando o codigo 3 para excluir a linha, ele pede esse parâmetro, ai se eu digitar 3 nesta caixinha, ele apaga todas as linhas
se eu digitar qualquer outro número, ele não apaga nada :shock:
alguem sabe o que é isso?
Me parece que o problema esta ai, e não na aplicação
O Campo Codigo estava com acento na tabela,
ja mudei e funcionou