if语句在为false或为true时执行

时间:2018-03-22 07:36:53

标签: java

所以有点背景: 我正在创建一个管理产品(蜡烛)的程序,我需要在更新数据之前检查蜡烛香水的名称是否存在。 经过一些研究,我写了这个:

try {
        stmt = conn.createStatement();

        //Get a perfumeCode from a perfumeName
        sql = "SELECT Code_Parfum FROM T_Parfum WHERE Nom_Parfum = \"" + tbxPerfumeName.getText() + "\";";
        rs = stmt.executeQuery(sql);
        System.out.println(!rs.next()); // = true if doesn't exists and = false if it does exist
        if (!rs.next()) {
            System.out.println("Ce produit n'exist pas !!"); //prints an error to help me see if this works
        }
    } catch (SQLException e) {

    }

简而言之:它获取我输入的香水的名称(在textField中)并返回一个ResultSet。 使用该结果集,我可以检查香水的代码是否与rs.next()

一起存在

问题是:对于打印......它工作正常!! 如果它不存在,我会 true (因为“”),当它存在时,我会得到 false ! 但是当涉及到if时,它不再起作用了。每次我尝试,if中的打印都会被执行。每次。即使!rs.next()为true或false。这是我得到的输出:

Connection to SQLite has been established.
false
Ce produit n'exist pas !!
DataBase Closed
Connection to SQLite has been established.
true
Ce produit n'exist pas !!
DataBase Closed

你可以看到:我第一次得到 false (我输入了一个存在的名字)而 true 另一个(名字不存在)但是 if 在两种情况下都打印了String。尽管具有与之前的印刷相同的条件。

我错过了什么吗?为什么我没有得到“相同”的结果(如果在打印时为真,那么在if中是真的,反之亦然)? 任何帮助表示赞赏和感谢!

2 个答案:

答案 0 :(得分:5)

你只需要调用class ETQueue: NSObject { static func main(completion: @escaping()->()) { if Thread.isMainThread { // If current thread is main the i am calling the completion handler but execution of this completionHandler //Takes the thread to some other level. completion() }else { DispatchQueue.main.sync { completion() } } } static func main(_ deley: Double, completion: @escaping()->()) { DispatchQueue.main.asyncAfter(deadline: .now() + deley) { completion() } } static func background(completion: @escaping()->()) { DispatchQueue.global(qos: .background).async { completion() } } } 一次,因为下次你调用它时会检查下一行,另外看看PreparedStatement类,你不应该直接连接字符串到查询,因为这可能导致SQLInjection

答案 1 :(得分:2)

每次调用rs.next()都会将光标移动到下一个结果。所以:

    rs = stmt.executeQuery(sql);

现在光标位于-1位置(即第一个结果集之前)。

    System.out.println(!rs.next()); // = true if doesn't exists and = false if it does exist

现在光标位于第一个结果的位置0;此结果存在,因此调用返回true

    if (!rs.next()) {

现在光标位于位置1;因为只返回了一个结果,该位置不存在,并且调用返回false