Java 如何解析结果集的.equals函数的值?

Java 如何解析结果集的.equals函数的值?,java,jdbc,resultset,Java,Jdbc,Resultset,我正在制作一个框架,使用文本字段逐个显示sql表中的记录,如图所示。在为next按钮编写代码时,我需要知道结果集的位置,以便转到下一条记录。为此,我使用了带有if条件的do-while循环。以下是我的代码: try{ Connection conn=null; Statement stmt=null; ResultSet rs=null; String url="jdbc:mysql://localhost/MYORG", user

我正在制作一个框架,使用文本字段逐个显示sql表中的记录,如图所示。在为next按钮编写代码时,我需要知道结果集的位置,以便转到下一条记录。为此,我使用了带有if条件的do-while循环。以下是我的代码:

try{
        Connection conn=null;
        Statement stmt=null;
        ResultSet rs=null;
        String url="jdbc:mysql://localhost/MYORG", userid="root", pwd="shreyansh";
        conn=DriverManager.getConnection(url,userid,pwd);
        stmt=conn.createStatement();
        String query="select * from emp;";
        rs=stmt.executeQuery(query);
        String search=jTextField1.getText();
        String search1=jTextField2.getText();
        double search2=Double.parseDouble(jTextField3.getText());
        String search3=jTextField3.getText();
        rs.first();
        do{
            if(rs.equals(new Object[] {search, search1, search2, search3}))
                break;
        }while(rs.next());
        rs.next();
        String nm=rs.getString("Name");
        String desg=rs.getString("Designation");
        double pay=rs.getDouble("Pay");
        String city=rs.getString("City");
        jTextField1.setText(nm);
        jTextField2.setText(desg);
        jTextField3.setText(pay + "");
        jTextField4.setText(city);
    }catch(Exception e){
        JOptionPane.showMessageDialog(null, e.getMessage());
    }
但它在结果集结束后显示错误。 请帮我做这个。 我们也欢迎您提出任何改进代码的建议。 提前谢谢

您不能为此使用ResultSet.equals,因为这不是合同的目的。它用于检查一个对象是否等于相同或至少兼容类型的另一个对象。因此,结果集永远不会等于对象值数组

看起来您希望从emp表中选择一个与搜索值匹配的行,在这种情况下,正确的解决方案是只向数据库请求该行。在Java应用程序中选择所有行,然后进行过滤是非常低效的,因为数据库必须将所有行发送到应用程序,而查找数据正是数据库擅长的

相反,您应该在准备好的语句中使用where子句:

try Connection=DriverManager.getConnectionurl,userid,pwd; PreparedStatement pstmt=connection.prepareStatement 从emp中选择*其中名称=?名称=?工资=?城市=?{ pstmt.setString1,搜索; pstmt.setString2,search1; pstmt.setDouble3,search2; pstmt.setString4,search3; try ResultSet rs=pstmt.executeQuery{ 如果是下一个{ 字符串nm=rs.getStringName; 字符串设计=rs.getStringDesignation; 双薪=卢比双薪; 字符串城市=rs.getStringCity; jTextField1.setTextnm; jTextField2.setTextdesg; jTextField3.setTextString.valueOfpay; jTextField4.setTextcity; }否则{ //处理未找到的情况 } } }
rs.equals如果用于比较两个结果集。无论这实际上意味着什么,它都不会考虑一组对象与结果集相等。请张贴异常StActTracle。为什么要先调用rs.first并忽略其返回值?在当前逻辑中,循环直到rs.next返回false,然后调用getString,这是不允许的,因为结果集将位于最后一行之后。如果要检查数据库中是否存在某些值,请使用where子句。@MarkRotterVeel非常感谢您的回答!!实际上我是一名学生。我是一名学习者,但根据我的说法,我首先使用rs.first将ResultSet的指针放在表的开头,并开始将其与文本字段中的现有值进行比较,直到找到正确的匹配项。当我找到正确的匹配项时,我打破了循环,并使用rs.next作为下一步按钮的代码。如果我错了,请纠正我。@M.Prokhorov非常感谢您的回复!!我不太明白你的意思。你是说rs.equals不会将结果集的现有值与对象进行比较吗?那我怎么比较呢?如果我错了,请纠正我。你通常不应该调用rs。首先,它只保证在可滚动的结果集上工作。你通常应该只使用rs.next,例如在while循环中。您的代码找不到正确的匹配项,因为您所做的根本不起作用,因此当rs.next返回false时,您将退出循环。@shreyanstiwari在这种情况下,请接受答案。