Java 无法清除以前的表数据

Java 无法清除以前的表数据,java,swing,jdbc,applet,jtable,Java,Swing,Jdbc,Applet,Jtable,我制作了一个具有搜索引擎功能的小程序。这里的问题是,当我试图首先使用关键字进行搜索时,以JTable格式打开一个新的JFrame可以正确地显示它。但当我关闭该框架并在搜索表单中输入其他内容以搜索其他内容时,它不仅显示我搜索过的最新内容,还显示我以前搜索过的内容。在水平方向上,它也不断重复表列。以下是截图: 首先,我搜索Dosa: 然后我关闭该框架并搜索Idli,看看它是如何出现的: 谁能帮我一下,告诉我哪里出了问题?这是我的数据库活动和检索代码 search.addActionListene

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

首先,我搜索Dosa:

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

谁能帮我一下,告诉我哪里出了问题?这是我的数据库活动和检索代码

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);
                }
                }
            });
search.addActionListener(新ActionListener(){
已执行的公共无效行动(行动事件ae){
试一试{
s=field.getText();
连接con=null;
Class.forName(“com.mysql.jdbc.Driver”);
con=(连接)DriverManager.getConnection(“jdbc:mysql://localhost:3306/delikat", 
"根",;
语句st=(语句)con.createStatement();
ResultSet rs=(ResultSet)st.executeQuery(“从delicious中选择*,其中名称='“+s+””);
ResultSetMetaData md=(ResultSetMetaData)rs.getMetaData();
int columns=md.getColumnCount();
对于(int i=1;i尝试:

以前

  while (rs.next()) {...
尝试:

以前

  while (rs.next()) {...
  • 需要重新初始化
    data=new Vector
    如果重用
    Vector data=new Vector
    (伪代码),则旧的2D数组是新的,没有旧元素

  • 使用重新创建整个阵列,可以作为标准的可能方法

      • 需要重新初始化
        data=new Vector
        如果重用
        Vector data=new Vector
        (伪代码),则旧的2D数组是新的,没有旧元素

      • 使用重新创建整个阵列,可以作为标准的可能方法


      是的,它清除了以前的数据,但列名水平显示了两次。是的,在for循环之前添加了columnNames.clear();非常感谢。)如果找不到要搜索的内容,您知道如何显示错误吗?自定义消息。不止一种方式-查看我如何在此处实现状态以及它之间的关系如何?请您解释一下。我尝试检查数据是否为空,如果为空,则弹出一个弹出窗口,否则显示表格。似乎不起作用。您能告诉我吗检查我正在搜索的数据是否为空的条件?是的,它清除了以前的数据,但列名水平显示了两次。是的,在for循环之前添加了columnNames.clear();非常感谢。:)如果找不到要搜索的内容,您知道如何显示错误吗?自定义消息。不止一种方式-查看我如何在此处实现状态以及它之间的关系如何?请您解释一下。我尝试检查数据是否为空,如果为空,则弹出一个弹出窗口,否则显示表格。似乎不起作用。您能告诉我吗检查我正在搜索的数据是否为空的条件?我已修复了它,谢谢。替代方法也起作用。如果在表中找不到要搜索的对象,请帮助我显示错误。我已更新了我尝试的代码,但它不起作用。zhins与您一样简单…,ResultSet不是empty如果while(rs.next()){中的代码行被执行,但是否有超过2k行将这些数据加载到内存中,请使用JTable中的标准筛选(请参阅我回答中的链接)或在JTable+行排序器(变体排序、表行排序器等)中搜索fpr详细信息,我修复了它,谢谢。替代方法也有效。如果在表中找不到要搜索的对象,请帮助我显示一个错误。我已更新了我尝试的代码,但它不起作用。zhins与您一样简单…,如果代码行在while(rs.next())中,ResultSet不是空的{已执行,但是否有超过2k行将这些数据加载到内存中,在JTable中使用标准筛选(请参阅我回答中的链接)或在这里使用fpr详细信息搜索JTable+rowsorter(变体排序、tablerowsorter等),