消息对话框在不正确的时间显示

时间:2011-04-06 17:32:12

标签: java

我有一个搜索表单。在这里,当我在文本框中输入字母表时,我按字母顺序搜索名称,如果我的数据库中有该字母表中的任何名称,则显示找到记录的消息(点击搜索按钮)但是当我输入一个字母时没有任何名字以该字母开头,即使它显示的信息是“找到记录”。

我的代码是:

if(searchby.equals("Name"))

        {
             try
            {

            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            System.out.println("\n Driver loaded");
            Connection con=DriverManager.getConnection("jdbc:odbc:wanisamajDB");

             Statement stmt=con.createStatement();



            ResultSet rs = stmt.executeQuery("SELECT * FROM FAMILYcensus WHERE Name LIKE '"+ tfsearch.getText()+"%'ORDER BY Name ASC");

             StringBuilder sb = new StringBuilder();
             while (rs.next()) {

             String name = rs.getString("Name");
             sb.append(name + System.getProperty("line.separator") );
             }
             String names = sb.toString().trim();


           JOptionPane.showMessageDialog(null, "RECORD FOUND");
           con.close();
           tasearch.setText(names);


           //con.close();

         }
            catch(SQLException eM)
          {
            JOptionPane.showMessageDialog(null,"INVALID RECORD");
           }
          catch(Exception et)
           {
             System.out.println("error:"+et.getMessage());
            }  

3 个答案:

答案 0 :(得分:2)

您的代码既不会检查rs是否为空,也不会在迭代rs之前进行设置,就像搜索失败一样。 SELECT的空结果不会产生异常。

如果RecordSet中没有任何内容,那么无论你想做什么表明没有找到任何记录,你都应该对你的表格做。

答案 1 :(得分:2)

好吧,你永远不会检查你的查询是否返回任何内容。

这样做,并在没有结果时采取相应行动。

编辑:MByD在他对您的问题的直接评论中提出了一个非常好的观点。鉴于您在SO上发布的问题,您似乎并不理解“如果 - 那么 - 其他”的基本概念。从示例中复制和粘贴代码而不了解您正在做的事情可能不是您学习如何编程的最佳方式。编程书的一个很好的基础介绍可能是一项有价值的投资。

答案 2 :(得分:1)

看起来除非抛出异常,否则你会收到该消息。也许测试就像

if(sb.length()==0) JOptionPane.showMessageDialog(null, "NO RECORD FOUND");
else JOptionPane.showMessageDialog(null, "RECORD FOUND");