我有个请假功能,如果说同一个人已存在相同的开始时间,以及相同的结束时间,相同的时间段(上下午)已有请假数据,则不允许提交数据,使用pg sql 返回true 和false
时间: 2024-04-14 20:26:47 浏览: 9
你可以使用 PostgreSQL 数据库来实现该请假功能,并通过 SQL 查询来判断是否允许提交数据。下面是一个示例的 SQL 查询语句:
```sql
SELECT EXISTS (
SELECT 1
FROM leaves
WHERE employee_id = <employee_id>
AND start_time = <start_time>
AND end_time = <end_time>
AND time_period = <time_period>
);
```
在上面的查询中,`leaves` 是请假表的表名,`employee_id` 是员工ID,`start_time` 是开始时间,`end_time` 是结束时间,`time_period` 是时间段(上下午)。该查询会返回一个布尔值,如果存在匹配的请假数据,则返回 `true`,否则返回 `false`。
你可以在 Java 代码中使用 JDBC 连接到 PostgreSQL 数据库,并执行上述 SQL 查询语句。以下是一个示例代码:
```java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class Main {
public static void main(String[] args) {
String url = "jdbc:postgresql://localhost:5432/your_database";
String username = "your_username";
String password = "your_password";
int employeeId = 123;
String startTime = "2022-01-01 09:00:00";
String endTime = "2022-01-01 12:00:00";
String timePeriod = "上午";
try (Connection conn = DriverManager.getConnection(url, username, password)) {
String sql = "SELECT EXISTS (SELECT 1 FROM leaves WHERE employee_id = ? AND start_time = ? AND end_time = ? AND time_period = ?)";
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setInt(1, employeeId);
stmt.setString(2, startTime);
stmt.setString(3, endTime);
stmt.setString(4, timePeriod);
ResultSet rs = stmt.executeQuery();
if (rs.next()) {
boolean exists = rs.getBoolean(1);
System.out.println(exists);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
```
在上面的示例中,我们首先定义了 PostgreSQL 数据库的 URL、用户名和密码。然后,我们定义了员工ID、开始时间、结束时间和时间段。使用 JDBC 连接到数据库,并执行预处理的 SQL 查询语句。通过设置占位符的参数,将员工ID、开始时间、结束时间和时间段传递给查询。最后,我们获取查询结果中的布尔值,并打印出来。
请注意,示例中的数据库连接信息需要根据你的实际情况进行修改。另外,为了安全起见,建议将数据库连接信息存储在配置文件中,并在代码中读取。