我正在将数据库中的数据填充到我的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){
}
}
});
答案 0 :(得分:2)
我认为我看到了这个问题,
1)搜索ResultsetTableModel / TableFromDatabase
(更好)
a)替换JTable
内容
b)与嵌入在Intranet中的数据库的嵌入式Db一起工作
所有进程都在EDT中,然后GUI等待SQL语句
对于将Xxx.close
移动到finally块
2)您必须使用SwingWorker
最复杂的解决方法,更好,最简单的方法是从Runnable#Thread
加载数据
答案 1 :(得分:1)
您可以删除该行(请参阅DefaultTableModel.removeRow) 或者将新数据放入新的表模型中,并用JTable.setModel()
替换表的表模型答案 2 :(得分:1)
刷新按钮后,请拨打以下电话:
DefaultTableModel model = new DefaultTableModel(data,col);
model.removeRow(1); // first row in this case
在这种情况下,您需要设法获取数据,列和行计数.Data是您的实际数据,col是列数。
答案 3 :(得分:-2)
这个方法我曾经在任何jTbale中填充数据
此行清除jatble befor填充数据
public static void FilltableV(JTable mytable,String sql){ 连接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);
}
}
}