2015-07-10 190 views
0

我的Java代碼是這樣的:Java和MySQL查詢日期

public void FillCombo_Disp(){ 
    java.sql.Date fromDate = new java.sql.Date(jDateChooser_Date1.getDate().getTime()); 
    java.sql.Date toDate= new java.sql.Date(jDateChooser_Date2.getDate().getTime()); 
    String space = jComboBox_Space.getSelectedItem().toString(); 
    String [] space_split = space.split(" "); 
    String id_space = space_split[0]; 
    String query = "SELECT ID FROM Rent WHERE ID_Space = '" + id_space + "' AND Date1 BETWEEN ? AND ? OR Dat2 BETWEEN ? AND ?"; 
    try { 
     pst = conn.Connection().prepareStatement(query); 
     pst.setDate(1, fromDate); 
     pst.setDate(2, toDate); 
     pst.setDate(3, fromDate); 
     pst.setDate(4, toDate); 

     ResultSet res = pst.executeQuery(); 
     int ID = 0; 
     while(res.next()) { 
      ID = res.getInt("ID"); 
     } 

     if(ID!=0) 
      jTextField_Disp.setText("Rented"); 
     else 
      jTextField_Disp.setText("Free"); 
    } catch(Exception e) { 
     JOptionPane.showMessageDialog(null, e); 
    } 
} 

我的功能是控制由用戶輸入的兩個日期,並比較他們的數據庫。如果日期在時間範圍內,您應該讓我回到id_rent。 但我不明白爲什麼不能while循環進入:

while(res.next()) { 
    ID = res.getInt("ID"); 
} 

幫幫我!

+0

你能澄清你所說的 「爲什麼不能while循環進入:」 是什麼意思? – dbillz

+0

您的SQL語句是可疑的。在MySQL中,「AND」運算符的優先級高於「OR」運算符。例如「**'費用並且或者** **」相當於「**」(費用和費用)或者「**」。我懷疑你想添加一些parens:「**'fee和(fi或fo)'**'。我也很好奇爲什麼** id_space **的值被包含在SQL文本中,而不是一個綁定佔位符(如日期值)。我建議您驗證您的SQL語句是否正常工作(來自另一個客戶端) – spencer7593

+0

while循環用於確定我的問題查詢和我是否可以返回數據。我檢查了MySQL的工作臺我的查詢 – Simone94

回答

2

您在查詢中犯了拼寫錯誤,因此它不返回任何行。當我相信它應該是「Date2」時,你會放上「Dat2」這個詞。

電流:

String query = "SELECT ID FROM Rent WHERE ID_Space = '" + id_space + "' AND Date1 BETWEEN ? AND ? OR Dat2 BETWEEN ? AND ?"; 

新:

String query = "SELECT ID FROM Rent WHERE ID_Space = '" + id_space + "' AND Date1 BETWEEN ? AND ? OR Date2 BETWEEN ? AND ?"; 
+0

謝謝Baseball435 :)我糾正了錯誤,但它不工作相同:( – Simone94