【发布时间】:2015-06-10 06:52:42
【问题描述】:
所以在应用程序中,我创建了一个search for name 页面,用户将在其中输入名称,并作为user types(每次按下键)运行SQL 语句,它将获取记录@ 987654324@.
这很好用,但是当用户每次按下键时将值放入table 时,append 会将找到的结果放到表中,而不是替换值。这意味着每次按下一个键...都会生成重复的行。
所以我想知道是否有人有解决方案来阻止行被复制并替换为新值?我使用默认表模型:
private DefaultTableModel tModel = new DefaultTableModel(0, 0);
我的代码:
@Override
public void keyReleased(KeyEvent e) {
updateTable();
table.setModel(tModel);
formPanel.add(table);
tModel.fireTableDataChanged();
}
public void updateTable(){
System.out.println("Save member 1");
try{
//CHANGE THE VALUES SO WHEN CLICKS SAVE MEM
/*-------------------------------------*/
//Connection + Statement
conDB = getConnection();
stmt = conDB.createStatement();
String searchSql = "select * from members where name "
+ " LIKE '" + txtName.getText() +"%'";
if(!txtName.getText().equals(""))
{
r = stmt.executeQuery(searchSql);
}
System.out.println("searching");
tModel.setColumnIdentifiers(columnNames);
while(r.next()){
tModel.addRow(new Object[] {
r.getString("name")
});
}
}
catch(SQLException er){
System.out.println("Error was: " + er);
}
}
public searchBoth(){
super("Search");
this.setBounds(400, 500, 854,400);
this.setVisible(true);
mainCon.add(formPanel);
formPanel.add(lblName);
formPanel.add(txtName);
txtName.addActionListener(this);
addKeyListener(this);
txtName.addKeyListener(this);
}
【问题讨论】:
-
为了更好的帮助,请尽快发布 SSCCE/MCVE,简短、可运行、可编译
-
1.这里没有什么关于表模型的事情,2. KeyEvents 触发 JDBC 的原因,3. XxxTableModel 是可重用的,4. 为什么有 formPanel.add(table);,5. 为什么有 tModel.fireTableDataChanged();跨度>
标签: java sql swing jtable defaulttablemodel