展示一個輕量級的資料庫操作封裝 DB 類別,搭配 HttpServlet 完成 CRUD 流程。程式碼採用回呼風格處理查詢結果,並示範連線池基本設定。
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String action = req.getParameter("action");
switch (action != null ? action : "") {
case "show": findAll(req, resp); break;
case "del": del(req, resp); break;
case "edit": find(req, resp); break;
case "update": update(req, resp); break;
case "insert": insert(req, resp); break;
default: resp.sendError(HttpServletResponse.SC_BAD_REQUEST);
}
}
@Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
// 查詢全部(非同步回呼風格)
private void findAll(HttpServletRequest req, HttpServletResponse resp) {
DB db = getDB();
db.findAll(new DB.QueryAllCallback() {
@Override public void callback(List<Map<String, Object>> list) {
req.setAttribute("userList", list);
forward(req, resp, "/index.jsp");
}
}, "*");
}
// 刪除
private void del(HttpServletRequest req, HttpServletResponse resp) {
DB db = getDB();
db.where(new ContentValues().put("id", req.getParameter("id"))).del();
db.close();
findAll(req, resp);
}
// 查詢單筆(編輯頁)
private void find(HttpServletRequest req, HttpServletResponse resp) {
DB db = getDB();
db.find(new DB.QueryCallback() {
@Override public void callback(Map<String, Object> map) {
req.setAttribute("user", map);
forward(req, resp, "/edit.jsp");
}
}, "id", "name", "birthday");
db.close();
}
// 新增
private void insert(HttpServletRequest req, HttpServletResponse resp) {
DB db = getDB();
db.insert(Utils.params2Array(req, 3, "null", "user", "birth", "pwd"));
db.close();
findAll(req, resp);
}
// 更新
private void update(HttpServletRequest req, HttpServletResponse resp) {
DB db = getDB();
db.where(new ContentValues().put("id", req.getParameter("id")))
.update(new ContentValues()
.put("name", req.getParameter("user"))
.put("pwd", Utils.md5(req.getParameter("pwd")))
.put("birthday", req.getParameter("birth")));
db.close();
findAll(req, resp);
}
private DB getDB() {
DB.URI = "jdbc:mysql://localhost:3306/forjava";
DB.connect("utf-8");
return DB.init("users");
}
private void forward(HttpServletRequest req, HttpServletResponse resp, String path) {
try { req.getRequestDispatcher(path).forward(req, resp); }
catch (Exception e) { e.printStackTrace(); }
}
}
db.where(...).del()、db.where(...).update(...) 讓 SQL 組裝更直觀。Utils.params2Array 將 HttpServletRequest 參數快速映射為陣列。