从数据库刷新jTable

问题描述

我用jTable制作了一个swing应用程序。使用类构造函数中的以下函数数据库获取数据,并将其显示在表中。

public void Updatetable(){
        try{
            
            String query = "SELECT * FROM stock;";
           pst = connection.prepareStatement(query);
            rs = pst.executeQuery();
            jTable1.setModel(dbutils.resultSetToTableModel(rs));
        }
        catch (Exception e){
            e.printstacktrace();
        }
    }

代码在这里可以正常工作。然后,我实现了删除功能。它接受选定的行,并从数据库删除相应的数据。它可以完美地做到这一点,并从数据库删除数据。现在我还需要刷新表。为此,我使用相同的Updatetable()函数,但是这次我收到错误,程序挂起并且没有响应。 这是删除方法

 try{
        int row = jTable1.getSelectedRow();
       
       String cell = jTable1.getModel().getValueAt(row,0).toString();
       String sql = "DELETE from stock WHERE id=" + cell;
      
           pst = connection.prepareStatement(sql);
           pst.execute();
           JOptionPane.showMessageDialog(null,"Deleted successfully");
           
       }
       catch (Exception e){
           JOptionPane.showMessageDialog(null,"An error occured");
       }
       
        
       
        Updatetable(); //here i have called the same function.
       
       
    }                                         

这是代码以及构造函数的开始

public class mainpage extends javax.swing.JFrame {



Connection connection;
ResultSet rs;
PreparedStatement pst;

 cardlayout cl;

public mainpage() {
    initComponents();
  
     pack();
    setLocationRelativeto(null);
    connection = database.Connector();
    if (connection==null) System.exit(1);
    show_product();
    combo();
    combomain();
    editcombo();
}

这是数据库类:

public class database {
         public String conn;
    public static Connection Connector(){
        try{
            Class.forName("org.sqlite.JDBC");
            
            Connection conn = DriverManager.getConnection("jdbc:sqlite:users.db");
            return conn;
        } catch (Exception e){
             return null;
        }
       
     }
    
}

错误跟踪如下:

Exception in thread "AWT-EventQueue-0" java.lang.Arrayindexoutofboundsexception: 1 >= 1
    at java.util.Vector.elementAt(Vector.java:477)
    at javax.swing.table.DefaultTableModel.getValueAt(DefaultTableModel.java:648)
    at javax.swing.JTable.getValueAt(JTable.java:2720)
    at javax.swing.JTable.prepareRenderer(JTable.java:5712)
    at javax.swing.plaf.synth.SynthTableuI.paintCell(SynthTableuI.java:683)
    at javax.swing.plaf.synth.SynthTableuI.paintCells(SynthTableuI.java:580)
    at javax.swing.plaf.synth.SynthTableuI.paint(SynthTableuI.java:364)
    at javax.swing.plaf.synth.SynthTableuI.update(SynthTableuI.java:275)
    at javax.swing.JComponent.paintComponent(JComponent.java:780)
    at javax.swing.JComponent.paint(JComponent.java:1056)
    at javax.swing.JComponent.paintToOffscreen(JComponent.java:5210)
    at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1579)
    at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1502)
    at javax.swing.RepaintManager.paint(RepaintManager.java:1272)
    at javax.swing.JComponent._paintImmediately(JComponent.java:5158)
    at javax.swing.JComponent.paintImmediately(JComponent.java:4969)
    at javax.swing.RepaintManager$4.run(RepaintManager.java:831)
    at javax.swing.RepaintManager$4.run(RepaintManager.java:814)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:814)
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:789)
    at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:738)
    at javax.swing.RepaintManager.access$1200(RepaintManager.java:64)
    at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1732)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
    at java.awt.EventdispatchThread.pumpOneEventForFilters(EventdispatchThread.java:205)
    at java.awt.EventdispatchThread.pumpEventsForFilter(EventdispatchThread.java:116)
    at java.awt.EventdispatchThread.pumpEventsForHierarchy(EventdispatchThread.java:105)
    at java.awt.EventdispatchThread.pumpEvents(EventdispatchThread.java:101)
    at java.awt.EventdispatchThread.pumpEvents(EventdispatchThread.java:93)
    at java.awt.EventdispatchThread.run(EventdispatchThread.java:82)

任何有关如何处理此问题的建议将不胜感激。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)