package servlet.admin; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javabean.Base; import net.sf.json.JSONArray; import net.sf.json.JSONObject; /** * Servlet 实现类,用于获取借阅卡列表 * * 该 Servlet 处理管理员请求获取借阅卡列表的操作。支持分页和条件查询,返回符合条件的借阅卡数据。 */ @WebServlet("/admin/cardList") public class CardList extends HttpServlet { /** * 处理 GET 请求,获取借阅卡列表 * * 该方法处理分页和条件查询,查询借阅卡表中的数据,并返回符合条件的借阅卡信息。 * * @param req 请求对象 * @param resp 响应对象 * @throws ServletException 如果发生 Servlet 错误 * @throws IOException 如果发生 I/O 错误 */ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 设置响应内容类型为 JSON,字符编码为 UTF-8 resp.setContentType("application/json; charset=utf8"); // 接收查询参数:limit, page, condition 和 conditionValue String limit = req.getParameter("limit"); String page = req.getParameter("page"); String condition = req.getParameter("condition"); String conditionValue = req.getParameter("conditionValue"); // 初始化 SQL 查询条件 String where = null; // 无限制条件 // 设置默认值 if (page == null) { page = "1"; } if (limit == null) { limit = "10"; } // 初始化数据库连接和 SQL 语句 Connection connection = null; PreparedStatement pstmt = null; ResultSet resultSet = null; int code = 1; String msg = "error"; int count = 0; String sql = ""; // 准备返回数据的 JSON 对象 JSONObject jsonObject = new JSONObject(); JSONArray jsonArray = new JSONArray(); JSONObject jsonResult = new JSONObject(); try { // 获取数据库连接 connection = (Connection) Base.getConnection(); // 初始 SQL 查询语句 sql = "select id, password, reader, rule_id, status from borrow_card"; // 如果有查询条件,构造 where 子句 if (condition != null && conditionValue != null && !condition.isEmpty() && !conditionValue.isEmpty()) { where = " where " + condition + " like '%" + conditionValue + "%'"; sql = sql + where; } // 构造分页查询 sql += " order by id desc limit ?,?"; pstmt = connection.prepareStatement(sql); try { // 设置分页参数 pstmt.setInt(1, (Integer.parseInt(page) - 1) * Integer.parseInt(limit)); pstmt.setInt(2, Integer.parseInt(limit)); } catch (NumberFormatException | SQLException e1) { // 异常捕获,避免参数错误影响执行 } // 执行查询 resultSet = pstmt.executeQuery(); while (resultSet.next()) { // 构造每一条借阅卡记录的 JSON 数据 jsonObject.put("id", resultSet.getString("id")); jsonObject.put("password", resultSet.getString("password")); jsonObject.put("reader", resultSet.getString("reader")); jsonObject.put("rule_id", resultSet.getString("rule_id")); jsonObject.put("status", resultSet.getString("status")); jsonArray.add(jsonObject); } // 获取借阅卡总数,用于分页 sql = "select count(*) as count from borrow_card"; if (where != null) { sql = sql + where; } pstmt = connection.prepareStatement(sql); resultSet = pstmt.executeQuery(); if (resultSet.next()) { count = resultSet.getInt("count"); } // 判断查询结果是否为空 if (!jsonArray.isEmpty()) { code = 0; msg = "查询成功"; } } catch (ClassNotFoundException e) { msg = "数据库连接失败"; e.printStackTrace(); } catch (SQLException e) { msg = "SQL 错误"; } finally { // 关闭数据库连接和资源 try { Base.closeResource(connection, pstmt, resultSet); } catch (SQLException e) { msg = "资源关闭失败"; } } // 构造返回的 JSON 数据 jsonResult.put("code", code); jsonResult.put("count", count); jsonResult.put("msg", msg); jsonResult.put("data", jsonArray.toString()); // 输出响应 PrintWriter out = resp.getWriter(); out.print(jsonResult.toString()); } }