簡體   English   中英

在數據庫中的條目之間循環問題

[英]Issue With Cycling Through Entries In Database

我正在嘗試使用Java瀏覽Access數據庫,以檢查日期范圍是否落在另一個日期范圍之間,以避免重復的保留。 我遇到一個SQL錯誤,提示“ ResultSet已關閉”。 我相信這是因為我正在使用兩個resultSet以便使用一個while循環檢查兩個不同的日期。 這是代碼:

String date1Query = "SELECT checkIn FROM Reservation WHERE roomLocation LIKE '" + room + "'";
String date2Query = "SELECT checkOut FROM Reservation WHERE roomLocation LIKE '" + room + "'";

ResultSet date1RS = statement.executeQuery(date1Query);
ResultSet date2RS = statement.executeQuery(date2Query);
    while (date1RS.next()) {
        date1 = date1RS.getDate("checkIn");
        date2 = date2RS.getDate("checkOut");
        dateCheckBool = dateCheck.dateCheck(date1, date2, checkIn, checkOut);    

        if (dateCheckBool == true)
            break;
    }

我還可以如何格式化它以實現相同的功能(能夠根據數據庫中已經存在的日期由用戶檢查輸入日期)卻沒有收到錯誤? 如果這還不夠清楚,我會嘗試做什么,我將嘗試根據要求進一步澄清。 謝謝!

編輯:根據要求這里是dateCheck代碼:

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class dateCheck {
    public boolean dateCheck(Date date1, Date date2, String date3, String 
date4){
    DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
    Date dateCheck1;
    Date dateCheck2;
    boolean dateRange1 = false;
    boolean dateRange2 = false;
    try {
        dateCheck1 = dateFormat.parse(date3);
        dateCheck2 = dateFormat.parse(date4);

        if(dateCheck1.before(date1) || dateCheck1.after(date2))
            dateRange1 = false;
        else
            dateRange1 = true;
        if(dateCheck2.after(date2))
            dateRange2 = false;
        else
            dateRange2 = true;
    } catch (ParseException e) {
        e.printStackTrace();
    }
    if(dateRange1 == false && dateRange2 == false)
        return false;
    else
        return true;
    }
}

為什么僅在SQL可以給您結果時就擺弄?

如果您想知道預訂是否已經到位,只需詢問數據庫。

 SELECT id as result From reservations
 Where (
        ([RoomLocation] like ?)
        And (
            (? between [checkin] and [checkout])
            OR (? between [checkin] and [checkout])
        ) 
);

在您的Java中:

statement.setString(1,room);
statement.setDate(2,date1);
statement.setDate(3,date2);

..執行..

如果有任何預訂,您將收到預訂ID。 如果不為null。 您還可以在另一個選擇命令中的SQL上方放置並返回true或false值。 如果您遇到日期格式不兼容的問題,則可能必須格式化日期並將其作為字符串傳遞。

附:從移動電話接聽,請仔細檢查SQL中是否有錯字。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM