Java TableModel 重复行 - 如何阻止这种情况发生?

标签 java sql swing jtable defaulttablemodel

因此,在应用程序中,我创建了一个搜索名称页面,用户将在其中输入名称并作为用户类型(每次按下按键时)运行SQL语句将获取如“name%”的记录。

这工作正常,但是当用户每次按下按键时将值放入时,它都会附加找到的结果到表中而不是替换值。这意味着每次按下一个键...都会生成重复的行。

所以我想知道是否有人有解决方案来阻止行重复并替换为新值?我使用默认表模型:

私有(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);
    }

最佳答案

rowCount 设置为 0 并添加行。这将删除现有行并添加新行

tModel.setRowCount(0);

代码

System.out.println("searching");
tModel.setRowCount(0);// *********************remove current rows to replace
tModel.setColumnIdentifiers(columnNames);
while(r.next()){
    tModel.addRow(new Object[] { 
        r.getString("name")
    });
}

关于Java TableModel 重复行 - 如何阻止这种情况发生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30749081/

相关文章:

java - 用于输出和工作的 SwingWorker,还是各 1 个?

java - 从文件夹中读取所有日志文件

java - 非 react 性客户端(RestTemplate)是否可以使用 react 性 REST API(WebFlux)

sql - 同一列变量在查询中多次出现

sql - 使用单个 SQL 语句检索两个 COUNT

java - JFrame关闭后如何执行操作?

JavaFX SpringBoot SpringJDBC SQLite CRUD 应用程序 - 配置

java - java中的组和模式匹配

mysql - 连接多个表和 GROUP_CONCAT

java - Java 的 Swing 真的是 "memory hog"吗?