O que há de errado? Você tem dois elementos na lista e tenta remover o da posição três (lembre-se, inicia-se em 0, portanto, 0-1-2), e gera aquela exceção.
Por isso o machado disse que pode ser algo antes do remove
Abraços.[/quote]
Eu me refiro a um provável e possível erro em alguma parte do DAO, seja ao buscar o Driver, ao criar a Connection, ao criar a PreparedStatement ou ao executá-la.
Isto pelo fato de toda esta parte ser anterior à exception lançada quando há a tentativa de eliminar a linha selecionada.
O que há de errado? Você tem dois elementos na lista e tenta remover o da posição três (lembre-se, inicia-se em 0, portanto, 0-1-2), e gera aquela exceção.
Por isso o machado disse que pode ser algo antes do remove
Abraços.[/quote]
Eu me refiro a um provável e possível erro em alguma parte do DAO, seja ao buscar o Driver, ao criar a Connection, ao criar a PreparedStatement ou ao executá-la.
Isto pelo fato de toda esta parte ser anterior à exception lançada quando há a tentativa de eliminar a linha selecionada.[/quote]
Há perfeito, fui mais especifico a exceção do Exception in thread “AWT-EventQueue-0” java.lang.ArrayIndexOutOfBoundsException: Array index out of range: -1.
Patricia, se concentra primeiramente no que o Machado disse.
O que eu exemplifiquei foi que tu postou uma exceção, essa:
Conectando ao banco
Conectando ao banco
Conectando ao banco
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: Array index out of range: -1
at java.util.Vector.removeElementAt(Vector.java:515)
at javax.swing.table.DefaultTableModel.removeRow(DefaultTableModel.java:446)
at projetofinalpatriciass.excluirproduto.excluirproduto(excluirproduto.java:442)
at projetofinalpatriciass.excluirproduto.jButtonexcluirprodutoActionPerformed(excluirproduto.java:319)
at projetofinalpatriciass.excluirproduto.access$000(excluirproduto.java:27)
at projetofinalpatriciass.excluirproduto$1.actionPerformed(excluirproduto.java:113)
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:6288)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6053)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4651)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4481)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4481)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:643)
at java.awt.EventQueue.access$000(EventQueue.java:84)
at java.awt.EventQueue$1.run(EventQueue.java:602)
at java.awt.EventQueue$1.run(EventQueue.java:600)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
at java.awt.EventQueue$2.run(EventQueue.java:616)
at java.awt.EventQueue$2.run(EventQueue.java:614)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:613)
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)
Conectando ao banco
A exceção ocorre aqui at projetofinalpatriciass.excluirproduto.excluirproduto(excluirproduto.java:442).
É muito provavel que tu esteja dando um remove na sua DefaultTableModel em uma posição inexistente, entende?
Como se tu tivesse 5 itens na sua TableModel e tentasse remover o item de número 6. Veja quantos valores há inseridos nela e a posição que está passando para ser removida.
Eu costumo fazer os testes do DAO antes de implementar em qualquer lugar.
Crie um main e faça o teste. Se passar pelo menos no main vc saberá que o problema não
é o DAO.
//DAO
public boolean deletarProduto(Produto produto) throws SQLException {
String sql = "select * from produto";
PreparedStatement ps = factory.getConnection().prepareStatement(sql);
ResultSet rs = ps.executeQuery();
while(rs.next()){
if(rs.getInt(1) == produto.getPkproduto()){
sql = "DELETE FROM produto WHERE pkproduto = ?";
ps = factory.getConnection().prepareStatement(sql);
ps.setInt(1, produto.getPkproduto());
ps.execute();
ps.close();
return true;
}
}
ps.close();
return false;
}
//Main
public static void main(String[] args) {
ProdutoDao dao = new ProdutoDao();
Produto produto = new Produto();
produto.setPkproduto(6);
try {
if(dao.deletarProduto(produto)){
System.out.println("deletado");
}else{
System.out.println("Id não encontrado");
}
} catch (SQLException e) {
e.printStackTrace();
}
}
[quote=Master.Abs]Eu costumo fazer os testes do DAO antes de implementar em qualquer lugar.
Crie um main e faça o teste. Se passar pelo menos no main vc saberá que o problema não
é o DAO.
//DAO
public boolean deletarProduto(Produto produto) throws SQLException {
String sql = "select * from produto";
PreparedStatement ps = factory.getConnection().prepareStatement(sql);
ResultSet rs = ps.executeQuery();
while(rs.next()){
if(rs.getInt(1) == produto.getPkproduto()){
sql = "DELETE FROM produto WHERE pkproduto = ?";
ps = factory.getConnection().prepareStatement(sql);
ps.setInt(1, produto.getPkproduto());
ps.execute();
ps.close();
return true;
}
}
ps.close();
return false;
}
//Main
public static void main(String[] args) {
ProdutoDao dao = new ProdutoDao();
Produto produto = new Produto();
produto.setPkproduto(6);
try {
if(dao.deletarProduto(produto)){
System.out.println("deletado");
}else{
System.out.println("Id não encontrado");
}
} catch (SQLException e) {
e.printStackTrace();
}
}
Faça o teste ai. valeu[/quote]
Sempre faço isso mesmo.
Geralmente, meu DAO contém todas as possibilides do CRUD, então, já insiro, pesquiso e removo.
Deu certo, to programando…