如何在 while 循环 java 中检查条件

How to check for a condition within a while loop java

提问人:janet 提问时间:7/25/2023 最后编辑:Abrajanet 更新时间:7/26/2023 访问量:69

问:

String valChecker = "SELECT * FROM `committee_memba` where (Rank= 'Chairperson' or Rank='Vice-Chair') and committee_name='" + jComboBox1.getSelectedItem().toString() + "'";
System.out.println(valChecker);
PreparedStatement stmt = conn.prepareStatement(valChecker);
rs = stmt.executeQuery();
while (rs.next()){
    String rnk = rs.getString("Rank");
    System.err.println(rnk);
    if ((rnk.equals("Chairperson") && rank.equals("Chairperson")) || (rnk.equals("Vice-Chair") && rank.equals("Vice-Chair"))) {
        JOptionPane.showMessageDialog(rootPane, "Your Rank, " + rank + " already Exist, please review your membership or remove "+rank+" before adding another");
    else {
        pst.setString(3, rank);
        pst.execute();
        JOptionPane.showMessageDialog(this, "Saved, OK");
    }

Select 查询检查主席和副主席的现有级别,效果很好。

当且仅当具有上述头衔的候选人不存在时,我想与主席或副主席一起保存新记录,也就是说,您只能有一个主席或副主席,但我的报告很好,但用于插入的 pst.execute() 仍在工作,尽管给出了错误消息。JOPtionpaneJOptionpane

Java MySQL while 循环 逻辑运算符

评论

0赞 Slaw 7/25/2023
在循环之前:.将条件更改为 。确保在适当的时候设置为。至少,这似乎是您想要从描述中得到的。但我不确定代码是否符合您认为的功能(我需要更多的上下文才能确定)。whileboolean exists = false;rs.next() && !existsexiststrue
0赞 Slaw 7/25/2023
顺便说一句,你创造了错误。让它使用 ,然后使用 a 来设置参数。切勿使用字符串串联来设置 SQL 查询的参数。valCheckercommitte_name = ?PreparedStatement
0赞 janet 7/25/2023
字符串 valChecker = “SELECT * FROM where (Rank= 'Chairperson' or Rank='Vice-Chair') and committee_name=?”;pst.setString(1, jComboBox1.getSelectedItem().toString());我收到错误:java.sql.SQLException:未为参数 1 指定值committee_memba
0赞 janet 7/25/2023
使用 if(rs.next()&&!exists){} 将只满足一个条件,例如 Check chairperson 并添加许多副主席,或者如果它检查副主席,则添加许多 Chairperson
0赞 Abra 7/25/2023
你是说你的代码首先显示带有消息 Your Rank already Exist,然后执行 [database] 插入?JOptionPane

答:

0赞 deft artisan 7/25/2023 #1

如果您不希望使用标志,请抽象为布尔方法,并使用 return 语句退出第一个条件。

或者,您可以使用 which 会中断。JOptionPane.showConfirmMessageDialog(rootPane, "Your Rank, " + rank + " already Exist, please review your membership or remove "+rank+" before adding another", JOptionPane.YES_NO_CANCEL_OPTION)

0赞 Maurice Perry 7/25/2023 #2

首先,使用参数化查询,而不是在 SQL 中硬编码参数:

String valChecker = "SELECT * FROM `committee_memba` where Rank= ? and 
 committee_name=?";
PreparedStatement stmt = conn.prepareStatement(valChecker);
stmt.setString(1, rank);
stmt.setString(2, jComboBox1.getSelectedItem().toString());
rs = stmt.executeQuery();

现在,如果您只想在添加排名之前测试排名是否已经在表中,您只需要检查:

boolean exists = rs.next();
stmt.close();

if (exists) {
    JOptionPane.showMessageDialog(rootPane, "Your Rank, " + rank + " already Exist, please review your membership or remove "+rank+" before adding another");
} else {
    pst.setString(3, rank);
    pst.execute();
    JOptionPane.showMessageDialog(this, "Saved, OK");}
}
0赞 janet 7/26/2023 #3

如果有人遇到我遇到的问题,我很乐意分享我在这个论坛之外得到的帮助,也许它可以拯救某人

 String valChecker = "SELECT * FROM `committee_memba` where Rank= '"+rank+"'  and committee_name='"+ jComboBox1.getSelectedItem().toString() + "'";
           
            PreparedStatement stmt = conn.prepareStatement(valChecker);
            rs = stmt.executeQuery();
             
            
                
                    
                    if (rs.next() && (rank.equals("Chairperson") || rank.equals("Vice-Chair"))) {
                        
                        JOptionPane.showMessageDialog(rootPane, "Your Rank, " + rank + " already Exist, please review your membership or remove " + rank + " before adding another");
                    } else {
                        pst.setString(3, rank);
                        pst.execute();
                        JOptionPane.showMessageDialog(this, "Saved, OK");
                    }