首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 會議室預約系統:判斷時間段衝突的 SQL 查詢邏輯與實現思路

     編輯:程式設計綜合問答

需求

用戶提交會議室申請 (開始時間、結束時間、會議室名稱),需判斷該時段該會議室是否已被佔用,若衝突則拒絕。

衝突判斷邏輯

兩個時間段 [s1, e1) 和 [s2, e2) 衝突的充要條件:

s1 < e2  AND  s2 < e1

即:新申請開始早於已有結束,**且** 已有開始早於新申請結束。

SQL 實現

SELECT COUNT(*) 
FROM meeting_record 
WHERE room_name = ? 
  AND start_time < ?   -- 已有記錄開始 < 新結束
  AND end_time > ?;    -- 已有記錄結束 > 新開始
-- 參數順序:room_name, new_end, new_start
-- 若 COUNT > 0 則衝突

Java 服務層邏輯

public boolean isConflict(String room, Date start, Date end) {
    String sql = "SELECT 1 FROM meeting_record WHERE room_name=? AND start_time?";
    return jdbcTemplate.queryForObject(sql, Boolean.class, room, end, start);
}

// Controller
if (service.isConflict(room, start, end)) {
    return "該時段會議室已被佔用";
}
service.saveApplication(room, start, end, user);

擴展建議

  • 數據庫層面添加唯一索引或排他約束 (需觸發器/應用層鎖) 防止併發衝突。
  • 前端日曆組件 (如 FullCalendar) 可直觀展示佔用情況。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved