当前位置: 首页 > ai >正文

web第四次课后作业--页面操作实现数据库的增删查改

一、环境配置

1. 创建一个java web(maven构建)的项目2.  配置tomcat3. 连接数据库

二、页面呈现

  • 登录页面
    在这里插入图片描述

  • 详细信息
    在这里插入图片描述

  • 删除一条信息后
    在这里插入图片描述

  • 更新
    在这里插入图片描述

  • 更新后的信息
    在这里插入图片描述


三、目录结构

在这里插入图片描述

四、代码实现

4.1 denglu.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><html>
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>用户登录</title><link rel="stylesheet" type="text/css" href="../css/style.css">
</head>
<body><div class="form-container"><h2>用户登录</h2><form action="zhuce/denglu_submit.jsp" method="post"><div class="form-group"><label for="username">账号:</label><input type="text" id="username" name="username" /></div><div class="form-group"><label for="pwd">密码:</label><input type="password" id="pwd" name="pwd" /></div><input type="submit" value="登陆" /></form></div>
</body>
</html>

4.2 denglu_submit.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8" import="java.sql.*" %>
<%request.setCharacterEncoding("UTF-8"); // 确保正确处理POST请求中的中文字符String name = request.getParameter("username");String password = request.getParameter("pwd");String message = "";boolean success = false;Connection conn = null;PreparedStatement pstmt = null;try {Class.forName("com.mysql.cj.jdbc.Driver"); // 更新驱动类名conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/demo?characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC","root", "1234"); // 添加 useSSL=false 和 serverTimezone=UTC 推荐参数String sql = "INSERT INTO denglu (username, password) VALUES (?, ?)";//SQL 语句中应该使用问号 ?作为参数的占位符。pstmt = conn.prepareStatement(sql);pstmt.setString(1, name);pstmt.setString(2, password);int r = pstmt.executeUpdate();if (r > 0) {System.out.println("成功插入 " + r + " 条记录: username=" + name);// 设置成功消息,可以通过 session 传递给下一个页面session.setAttribute("dbMessage", "用户 " + name + " 注册成功!" + r + "条记录已插入。");success = true;} else {System.out.println("插入失败,没有记录被影响: username=" + name);message = "用户注册失败,请重试。";}} catch (ClassNotFoundException e) {e.printStackTrace();message = "数据库驱动加载失败: " + e.getMessage();System.err.println("数据库驱动加载失败: " + e.getMessage());} catch (SQLException e) {e.printStackTrace();message = "数据库操作失败: " + e.getMessage();System.err.println("数据库操作失败: " + e.getMessage() + " SQLState: " + e.getSQLState());} finally {if (pstmt != null) {try {pstmt.close();} catch (SQLException e) {e.printStackTrace();}}if (conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}if (success) {response.sendRedirect("user_select.jsp");} else {// 如果失败,可以重定向回注册页面并显示错误,或者在本页显示错误// 这里我们选择在本页显示错误,因为没有明确的错误展示页
%>
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>注册结果</title>
</head>
<body><h2>注册处理结果</h2><p style="color:red;"><%= message %></p><p><a href="zhuce/denglu.jsp">返回注册页面</a></p>
</body>
</html>
<%}
%>

4.3 user_select.jsp

<%@ page import="java.sql.*" %><%--Created by IntelliJ IDEA.User: huaweiDate: 2025/4/28Time: 12:05To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>用户信息</title><link rel="stylesheet" type="text/css" href="../css/style.css">
</head>
<body>
<div class="form-container"><h2>用户列表</h2><table class="data-table"><tr><th>id</th><th>姓名</th><th>密码</th><th>操作</th></tr><%try {Class.forName("com.mysql.jdbc.Driver");} catch (ClassNotFoundException e) {e.printStackTrace();}try (Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/demo?characterEncoding=UTF-8","root", "1234");Statement s = c.createStatement();) {String sql = "select * from denglu";// 执行查询语句,并把结果集返回给ResultSetResultSet rs = s.executeQuery(sql);
/*        if(rs.next())System.out.println("账号密码正确");elseSystem.out.println("账号密码错误");*//*        //输出到控制台while (rs.next()){out.println(rs.getString(2)+","+rs.getString(3)+";;");}*/while (rs.next()){//输出到页面表格中int id=rs.getInt(1);%><tr><td><%=id%></td><td><%=rs.getString(2)%></td><td><%=rs.getString(3)%></td><td><a href="user_delete.jsp?id=<%=id%>">删除</a> &nbsp;&nbsp; <a href="user_update.jsp?id=<%=id%>">修改</a></td></tr><%}rs.close();c.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}%></table>
</div>
</body>
</html>

4.4 user_delelte.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8" import="java.sql.*" %>
<%request.setCharacterEncoding("UTF-8");String paramId = request.getParameter("id");String message = "";boolean deleteSuccess = false;int userId = -1;if (paramId == null || paramId.trim().isEmpty()) {message = "错误:ID 不能为空。";} else {try {userId = Integer.parseInt(paramId);} catch (NumberFormatException e) {message = "错误:ID 格式不正确 (" + paramId + ")。";}}Connection conn = null;PreparedStatement pstmt = null;if (message.isEmpty()) { // 只有在初始参数校验通过后才执行数据库操作try {Class.forName("com.mysql.cj.jdbc.Driver");conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/demo?characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC","root", "1234");String sql = "DELETE FROM denglu WHERE id = ?";pstmt = conn.prepareStatement(sql);pstmt.setInt(1, userId);int rowsAffected = pstmt.executeUpdate();if (rowsAffected > 0) {deleteSuccess = true;message = "ID " + userId + " 的用户删除成功!影响行数: " + rowsAffected;System.out.println(message);} else {message = "用户删除失败,未找到对应 ID (" + userId + ")。";System.out.println(message);}} catch (ClassNotFoundException e) {message = "数据库驱动加载失败: " + e.getMessage();e.printStackTrace();} catch (SQLException e) {message = "数据库操作失败: " + e.getMessage();e.printStackTrace();} finally {if (pstmt != null) {try {pstmt.close();} catch (SQLException e) {e.printStackTrace();}}if (conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}}// 无论成功与否(只要不是初始的严重错误),都设置消息并重定向session.setAttribute("dbMessage", message);response.sendRedirect("user_select.jsp");
%>

4.5 user_update.jsp

<%@ page import="java.sql.*" %><%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>更新用户信息</title><link rel="stylesheet" type="text/css" href="../css/style.css">
</head>
<body>
<%String id = request.getParameter("id");String name = ""; // Initialize to prevent errors if user not foundString pwd = "";  // Initialize to prevent errors if user not foundboolean userFound = false;try {Class.forName("com.mysql.jdbc.Driver");} catch (ClassNotFoundException e) {e.printStackTrace();}try (Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/demo?characterEncoding=UTF-8","root", "1234");Statement s = c.createStatement();) {String sql = "select * from denglu where id="+id;ResultSet rs = s.executeQuery(sql);if (rs.next()){ // Use if instead of while, as we expect only one user or noneuserFound = true;name = rs.getString(2);pwd = rs.getString(3);}rs.close();// Connection and statement will be closed automatically by try-with-resources} catch (SQLException e) {e.printStackTrace();// Optionally, set an error message to display to the user}
%><div class="form-container"><h2>更新用户信息</h2><% if (userFound) { %><form action="user_update_submit.jsp" method="post"><input type="hidden" name="id" value="<%=id%>"><div class="form-group"><label for="username">账号:</label><input type="text" id="username" name="username" value="<%=name%>" /></div><div class="form-group"><label for="pwd">密码:</label><input type="password" id="pwd" name="pwd"  value="<%=pwd%>" /></div><input type="submit" value="更新" /></form><% } else { %><p>未找到ID为 <%=id%> 的用户,或加载用户信息时发生错误。</p><p><a href="user_select.jsp">返回用户列表</a></p><% } %>
</div></body>
</html>

4.6 user_update_submit.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8" import="java.sql.*" %>
<%request.setCharacterEncoding("UTF-8");String paramId = request.getParameter("id");String name = request.getParameter("username");String password = request.getParameter("pwd");String message = "";boolean updateSuccess = false;int userId = -1;if (paramId == null || paramId.trim().isEmpty() || name == null || name.trim().isEmpty() || password == null || password.trim().isEmpty()) {message = "错误:ID、用户名和密码均不能为空。";} else {try {userId = Integer.parseInt(paramId);} catch (NumberFormatException e) {message = "错误:ID 格式不正确。";}}Connection conn = null;PreparedStatement pstmt = null;if (message.isEmpty()) { // 只有在初始参数校验通过后才执行数据库操作try {Class.forName("com.mysql.cj.jdbc.Driver");conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/demo?characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC","root", "1234");String sql = "UPDATE denglu SET username = ?, password = ? WHERE id = ?";pstmt = conn.prepareStatement(sql);pstmt.setString(1, name);pstmt.setString(2, password);pstmt.setInt(3, userId);int rowsAffected = pstmt.executeUpdate();if (rowsAffected > 0) {updateSuccess = true;message = "用户信息更新成功!影响行数: " + rowsAffected;System.out.println(message);session.setAttribute("dbMessage", message); // 为重定向后页面准备消息} else {message = "用户信息更新失败,未找到对应 ID 或数据无变化。";System.out.println(message);}} catch (ClassNotFoundException e) {message = "数据库驱动加载失败: " + e.getMessage();e.printStackTrace();} catch (SQLException e) {message = "数据库操作失败: " + e.getMessage();e.printStackTrace();} finally {if (pstmt != null) {try {pstmt.close();} catch (SQLException e) {e.printStackTrace();}}if (conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}}if (updateSuccess) {// 更新成功后重定向到用户列表页面response.sendRedirect("user_select.jsp"); // 假设 user_select.jsp 是显示用户列表的页面} else {// 如果失败,在此页面显示错误信息
%>
<!DOCTYPE html>
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>用户更新结果</title>
</head>
<body><h2>用户更新处理结果</h2><p style="color:red;"><%= message %></p><p><a href="user_select.jsp">返回用户列表</a></p> <%-- 或者链接到具体的修改页面 user_update.jsp?id=<%=userId%> --%>
</body>
</html>
<%}
%>
http://www.xdnf.cn/news/6314.html

相关文章:

  • 高精度降压稳压技术在现代工业自动化中的应用
  • 鸿蒙OSUniApp开发的商品详情展示页面(鸿蒙系统适配版)#三方框架 #Uniapp
  • 校园网规划与设计方案
  • 西门子 Teamcenter13 Eclipse RCP 开发 1 工具栏
  • 双目立体视觉
  • MCP本地高效与云端实时:stdio 与 HTTP+SSE 传输机制深度对比
  • 工业场景轮式巡检机器人纯视觉识别导航的优势剖析与前景展望
  • 医院网络安全托管服务(MSS)深度解读与实践路径
  • Vue 3 实现后端 Excel 文件流导出功能(Blob 下载详解)
  • Day 21 训练
  • [Harmony]获取资源文件中.txt文件中的字符串
  • U-Mail邮件系统的安全性和可扩展性
  • 【python】字典:: a list of dictionaries
  • 硬盘坏了电脑会出现哪些明显现象?机械和固态可不一样
  • 【C/C++】深度解析C++ Allocator:优化内存管理的关键
  • 对心理幸福感含义的探索 | 幸福就是一切吗?
  • ArcGIS Pro调用多期历史影像
  • 桃芯ingchips——windows HID键盘例程无法同时连接两个,但是安卓手机可以的问题
  • K8S Gateway AB测试、蓝绿发布、金丝雀(灰度)发布
  • ubuntu服务器版启动卡在start job is running for wait for...to be Configured
  • leetcode0767. 重构字符串-medium
  • 第一个优化
  • 【测试工具】selenium和playwright如何选择去构建自动化平台
  • STC8H系列单片机STC8H_H头文件功能注释
  • Linux进程通讯和原子性
  • MYSQL基本命令
  • 商业架构 2.0 时代:ZKmall开源商城前瞻性设计如何让 B2B2C 平台领先同行 10 年?
  • Quic如何实现udp可靠传输
  • TypeScript:类
  • 康复训练:VR 老年虚拟仿真,趣味助力恢复​