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 statisticsAttendance(String sno) throws SQLException { List 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 queryByStudentId(String studentId) { List 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; // 如果没有找到记录 } }