You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
lsispig/Attendanceimpl.java

190 lines
7.2 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.system.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import com.system.dao.AttendanceDao;
import com.system.javaBean.Attendance;
import com.system.utils.DB;
public class Attendanceimpl implements AttendanceDao {
private Connection conn;
private DB dataBase = new DB();
@Override
public List<Attendance> statisticsAttendance(String sno) throws SQLException {
List<Attendance> statistics = new ArrayList<>();
conn = dataBase.getConnection();
try (PreparedStatement pstmt = conn.prepareStatement("SELECT cno, COUNT(*) as total_attendance, " +
"SUM(CASE WHEN status = 'Present' THEN 1 ELSE 0 END) as present_count, " +
"SUM(CASE WHEN status <> 'Present' THEN 1 ELSE 0 END) as absent_count " +
"FROM attendance WHERE sno = ? GROUP BY cno")) {
pstmt.setString(1, sno);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
Attendance attendance = new Attendance();
attendance.setCourseCno(rs.getString("cno"));
attendance.setId(rs.getString("id")); // 注意这里假设id字段用来存储总考勤次数
attendance.setStatus(rs.getString("present_count") + "/" + rs.getString("absent_count"));
statistics.add(attendance);
}
} catch (SQLException e) {
throw new SQLException("Error calculating attendance statistics", e);
} finally {
if (conn != null) {
conn.close();
}
}
return statistics;
}
@Override
public boolean deleteAttendance(String id) throws SQLException {
try {
conn = dataBase.getConnection();
Statement stat = null;
stat = conn.createStatement();
String sql = "DELETE FROM attendance WHERE id = '"+id+"' ";
if ( stat.executeUpdate(sql)==1 ){
return true;
}
} catch (Exception e) {
e.printStackTrace();
}
conn.close();
return false;
}
public List<Attendance> queryByStudentId(String studentId) {
List<Attendance> attendanceList = new ArrayList<>();
// 假设您有一个可以执行数据库操作的数据库访问对象例如使用JDBC
String sql = "SELECT id, sno, name,cno, date, status " +
"FROM attendance " +
"WHERE sno = ?";
try (Connection conn = dataBase.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setString(1, studentId);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
Attendance attendance = new Attendance();
attendance.setId(rs.getString("id"));
attendance.setStudentId(rs.getString("sno"));
attendance.setName(rs.getString("name"));
attendance.setCourseCno(rs.getString("cno"));
attendance.setDate(rs.getString("date"));
attendance.setStatus(rs.getString("status"));
attendanceList.add(attendance);
}
} catch (SQLException e) {
// 处理异常
e.printStackTrace();
}
return attendanceList;
}
public Attendance select(String sno) {
Attendance attendance = null;
String sql = "SELECT id, sno, cno, date, status, name " +
"FROM attendance " +
"WHERE sno = ?";
try (Connection conn = dataBase.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setString(1, sno);
ResultSet rs = pstmt.executeQuery();
if (rs.next()) {
attendance = new Attendance();
String id = rs.getString("id");
String name = rs.getString("name");
String cno = rs.getString("cno");
String date = rs.getString("date"); // 这里假设数据库中的日期是以字符串形式存储的
String status = rs.getString("status");
attendance.setId(id);
// 如果您的数据库中的日期是以LocalDate形式存储的您需要进行相应的转换
// 例如LocalDate.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
attendance.setDate(date);
attendance.setStudentId(sno); // 已经作为查询条件,可以直接赋值
attendance.setName(name);
attendance.setCourseCno(cno);
attendance.setStatus(status);
}
} catch (SQLException e) {
// 处理异常
e.printStackTrace();
}
return attendance;
}
// 更新课程
@Override
public boolean updateById(String id, String sno, String name, String cno, String date, String status) throws SQLException {
try {
conn = dataBase.getConnection();
// 使用PreparedStatement来防止SQL注入
String sql = "UPDATE attendance SET sno = ?, name = ?, cno = ?, date = ?, status = ? WHERE id = ?";
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
// 按顺序设置参数值
pstmt.setString(1, sno);
pstmt.setString(2, name);
pstmt.setString(3, cno);
pstmt.setString(4, date);
pstmt.setString(5, status);
pstmt.setString(6, id); // WHERE条件
// 执行更新操作
int affectedRows = pstmt.executeUpdate();
// 检查是否至少有一行被更新
return affectedRows > 0;
}
} catch (SQLException e) {
e.printStackTrace();
throw e; // 重新抛出异常,以便调用者可以处理它
}
}
// 更新课程中的查找
@Override
public Attendance selectById(String id) throws SQLException {
// 编写SQL查询语句
String sql = "SELECT * FROM attendance WHERE id = ?";
try (Connection conn = dataBase.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setString(1, id);
ResultSet rs = pstmt.executeQuery();
if (rs.next()) {
Attendance attendance = new Attendance();
// 填充Attendance对象的数据
attendance.setId(rs.getString("id"));
attendance.setStudentId(rs.getString("sno"));
attendance.setName(rs.getString("name"));
attendance.setCourseCno(rs.getString("cno"));
attendance.setDate(rs.getString("date"));
attendance.setStatus(rs.getString("status"));
return attendance;
}
} catch (SQLException e) {
throw new SQLException("Error selecting attendance record", e);
}
return null; // 如果没有找到记录
}
}