java - 无法清除之前的表数据

标签 java swing jdbc applet jtable

我制作了一个具有搜索引擎功能的小程序。这里的问题是,当我尝试首先使用关键字进行搜索时,通过打开 JTable 格式的新 JFrame 可以正确显示它。但是,当我关闭该框架并在搜索表单中输入其他内容来搜索其他内容时,它不仅显示我搜索过的最新内容,还显示我之前搜索过的内容。在水平方向上,它也不断重复表格列。以下是截图:

首先我搜索 Dosa: Image 1

然后我关闭该框架并搜索 Idli,看看它是如何出现的: Image 2

谁能帮助我并告诉我哪里出错了?这是我的数据库 Activity 和检索代码。

search.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent ae){
                try {
                     s=field.getText();
                     Connection con = null;
                     Class.forName("com.mysql.jdbc.Driver");
                     con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/delikat", 
                            "root", "");
                     Statement st = (Statement) con.createStatement();
                     ResultSet rs= (ResultSet) st.executeQuery( "SELECT * FROM delicious where name = '"+s+ "'" );
                     ResultSetMetaData md = (ResultSetMetaData) rs.getMetaData();
                     int columns = md.getColumnCount();
                     for (int i = 1; i <= columns; i++) {
                        columnNames.addElement( md.getColumnName(i) );
                        }
                     while (rs.next()) {
                         Vector<Object> row = new Vector<Object>(columns);
                         for (int i = 1; i <= columns; i++) {
                             row.addElement( rs.getObject(i) );
                         }
                         data.addElement( row );
                     }
                     rs.close();
                     st.close();                         
                }
                catch(Exception e) {
                    e.printStackTrace();
                }
                Vector<Vector<Object>> NULL = null;
                if(data==NULL) {
                        JOptionPane.showMessageDialog(frame, "No Data Found");
                }
                    else {
                //Declare a new Frame for the Query Result Display
                JFrame tab=new JFrame();

                //Add the Data and the Column Names to the Table
                JTable table = new JTable(data, columnNames);

                //Add Scroll Pane for instances when more data is to be displayed
                JScrollPane scrollPane = new JScrollPane( table );

                /* Open the Result of the Query in a new Frame, in a Tabular Format with Scroll Pane.
                   Add all the elements to the Frame and set the specifications of the Frame like
                   Size, Visibility, etc.
                */
                tab.add( scrollPane );
                tab.setVisible(true);
                tab.setSize(810,100);
                }
                }
            });

请帮我解决这个问题。谢谢。

最佳答案

  • 需要重新初始化data = new Vector<Vector<Object>>如果Vector<Vector<Object>> data = new Vector<Vector<Object>> (伪代码)被重用,那么旧的二维数组就是一个没有旧元素的新数组

  • 使用XxxTableModel for underlaying data instead重新创建整个数组,可以作为可能方法的标准

关于java - 无法清除之前的表数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16109389/

相关文章:

java - JMS 统计主题域中未决消息的数量

java - 在存在序列化的情况下理解 Java 内存模型下的一个棘手案例

java - JPanel 不需要的位置和/或大小

java - 静态成员的顺序在 Swing 中是否敏感?

java - 有传说的形状食谱?

java - 使用 PopupWindow 的 showAtLocation(View, int, int, int) 时遇到问题

java - 为什么 JtextField.setDocument() 中设置的 PlainDocument() 排除文本中的一个字符

java - hsqldb PreparedStatement参数类型

java - 当表名包含空格时,通过 JDBC 从 FileMaker 表中选择

java - Java MySQL executeUpdate() 为 INSERT ON ON DUPLICATE KEY UPDATE 返回什么?