1

我正在将数据库中的数据填充到我的 JTable 中。添加新数据并按刷新按钮后,我想在检索新数据之前删除表上显示的现有行。如何删除现有行?

这是包含数据 [a,1] 的原始表。

原来的

这是我添加新数据 [b,1] 并按下刷新按钮后的表格。原始数据[a,1]仍然显示在表中:

插入后

JButton refreshButton = new JButton("Refresh");
refreshButton.setBounds(188, 248, 101, 23);
panel.add(refreshButton);

refreshButton.addActionListener(new ActionListener() 
{                        
    public void actionPerformed(ActionEvent ae)
    {

    DefaultTableModel model = new DefaultTableModel(data,columnNames);
    int rowCount = model.getRowCount(); 

    for (int x = 0; x <=rowCount; x++)
    {
        model.removeRow(x);
    }


        try
        {                       
            Class.forName("com.mysql.jdbc.Driver");
            Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/watchlist","root","root");

            String sql = "SELECT * FROM watchlist";
            Statement stmt = con.createStatement();
            ResultSet rs = stmt.executeQuery(sql);
            ResultSetMetaData md = rs.getMetaData();    


            int columns = md.getColumnCount();  

            while (rs.next())
            {   
                Vector row = new Vector(columns);

                for (int i=1; i <= columns; i++)
                {
                    row.addElement( rs.getObject(i) );              
                    System.out.println( rs.getObject(i).toString());        
                }                           

                data.addElement(row);   

                table.revalidate(); 
                table.repaint();
                panel.repaint();

            } // end while  

        } // end try

        catch (Exception e){
        }
    }

});
4

4 回答 4

2

我想我看到了这个问题,

1)搜索ResultsetTableModel / TableFromDatabase(更好)

  • (如果数据库连接(如此艰难和懒惰的操作)在应用程序生命周期内未关闭)

a) 替换JTable内容

b) 立即与放置在 Intranet 中的数据库的嵌入式 Db 一起使用

  • 迪斯

所有进程都在 EDT 期间,然后 GUI 等待 SQL 语句

对于移动Xxx.close到 finally 块所需的大多数代码示例

2)您必须使用的最复杂的解决方法SwingWorker,更好和最简单的方法是从Runnable#Thread

3)您可以从 TableModel 中删除行

于 2012-05-14T11:25:20.593 回答
1

您可以删除行(请参阅 DefaultTableModel.removeRow)或将新数据放入新的表模型中,并将表的表模型替换为 JTable.setModel()

于 2012-05-14T11:22:31.470 回答
1

刷新按钮后,调用以下命令:

DefaultTableModel model = new DefaultTableModel(data,col);
model.removeRow(1); // first row in this case

在这种情况下,您需要设法获取数据、列和行数。Data 是您的实际数据,col 是列数。

于 2012-05-14T11:23:43.310 回答
-2

在此处输入图像描述

这个方法我用来填充任何 jTbale 中的数据

在填充新数据之前清除 jtable(刷新)jtable

此行在填充数据之前清除 jatble

mytable.setModel(new DefaultTableModel(null, colname));

public static void FilltableV(JTable mytable, String sql){ Connection con = null;

    Statement Cmd = null;
    ResultSet rs = null;
try {


    con = DriverManager.getConnection("jdbc:mysql://localhost/alserg", "root", "");

    sql="SELECT * FROM products";
    Cmd=con.createStatement();
    rs=Cmd.executeQuery(sql);
    ResultSetMetaData rsmt=rs.getMetaData();
    int colno =rsmt.getColumnCount();
    Vector colname =new Vector();
    DefaultTableModel mytab =new  DefaultTableModel();
    Vector rows =new Vector();
    for(int i=1 ;i< colno;++i){
        colname.addElement(rsmt.getColumnName(i));
        mytab.setColumnIdentifiers(colname);

    }

    while (rs.next()){
        rows= new Vector();
        for (int j=1;j<colno;++j){
            rows.addElement(rs.getString(j));


        }
        mytab.addRow(rows);
        mytable.setModel(new DefaultTableModel(null, colname));
        mytable.setModel(mytab);



    }
} catch (SQLException ex) {
    Logger.getLogger(products.class.getName()).log(Level.SEVERE, null, ex);
}
finally {
    try {
        rs.close();
        Cmd.close();
        con.close();
    } catch (SQLException ex) {
        Logger.getLogger(AlseragLang.class.getName()).log(Level.SEVERE, null, ex);
    }


}

}

于 2016-11-11T19:20:59.950 回答