2017-02-24 172 views
0

我使用SQL比較事件布爾方法返回true每次

public static boolean sameDate(String DateString) 
{ 

    PreparedStatement statement = Application.database.newStatement("SELECT * FROM BookShift WHERE id = ? IN (SELECT id FROM Class WHERE Date = ?)"); 

    try 
    { 
     if(statement !=null) 
     { 
      statement.setInt(1, main.id); 
      statement.setString(2, DateTwo); 

      ResultSet results = Application.database.runQuery(statement); 

      if (results != null) 
      { 
       return true; 
      } 
      else { 
      return false; 
      } 
     } 
    } 
    catch (SQLException resultsexception) 
    { 
     System.out.println("Database result processing error: " + resultsexception.getMessage()); 
    } 
    return false; 
    } 

每當我跑我的程序,並嘗試預訂了新的轉變,一個日期,無論它不衝突與否它總是返回它所做的。

+0

你不僅應該檢查結果是否爲空,而且如果它是**空**。 – Fildor

+0

爲什麼你會期望'結果'爲空? –

+0

如果用戶在同一日期沒有任何預訂班次。那麼這正是我心中的想法 – Tilly

回答

2

您需要檢查結果集是否有任何行,而不是檢查它是否爲空。

if (results.next()) 
{ 
    return true; 
} 
else { 
    return false; 
} 

或者,當然,只是

return results.next(); 
+0

它似乎並不喜歡hasNext()方法,但results.next()完美地工作,謝謝! – Tilly

+0

是的,只是注意到了;對於錯字(現在已修復)感到抱歉。 –

0

正如評論說,這是不正確的一般檢查results爲null。我沒有SQL經驗告訴你什麼runQuery()將返回一個查詢失敗,但我懷疑它是空的,我希望它會返回一個空的ResultSet

檢查一下是否爲空不是壞事,實際上是避免NullPointerException拋出的好主意。但是,僅使用該檢查是不夠的。