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.
library_manage_system/src/servlet/admin/CardList.java

153 lines
4.4 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 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());
}
}