Java和MySQL查询日期

Java和MySQL查询日期

问题描述:

我的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

您在查询中犯了拼写错误,因此它不返回任何行。当我相信它应该是“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