单表增删改查

news/2025/2/7 3:13:12/文章来源:https://www.cnblogs.com/dahais4c/p/18584763

学习前,请先搞定数据库的驱动和连接,具体看黑马课程《java web》。
idea
先配置好Tomcat才可以进行,具体可以在CSDN上找教程
差旅费的简单单表增删改查
以下是数据库

以下是控制台代码。
其中部分代码看不懂的话,可以在B站中《JAVA JDBC》中搞定
其中数据库的操作因人而异,根据自己的用户名和密码进行操作
import javax.servlet.; // 导入Servlet包,用于创建Servlet
import javax.servlet.http.
; // 导入HTTP Servlet包,用于处理HTTP请求和响应
import java.io.IOException; // 导入IOException,用于处理输入输出异常
import java.io.PrintWriter; // 导入PrintWriter,用于向客户端发送字符文本
import java.sql.*; // 导入SQL包,用于数据库操作
import java.util.ArrayList;
import java.util.List;

public class CourseServlet extends HttpServlet { // 定义CourseServlet类,继承自HttpServlet
private Connection connect = null; // 声明一个Connection对象,用于数据库连接

public void init() { // Servlet初始化方法try {// 数据库连接信息String url = "jdbc:mysql://localhost:3306/data"; // 数据库URLString user = "root"; // 数据库用户名String password = "167183"; // 数据库密码// 加载MySQL JDBC驱动程序Class.forName("com.mysql.cj.jdbc.Driver"); // 加载MySQL JDBC驱动System.out.println("驱动加载成功"); // 打印驱动加载成功的消息// 建立与数据库的连接connect = DriverManager.getConnection(url, user, password); // 连接到数据库System.out.println("数据库连接成功"); // 打印数据库连接成功的消息} catch (SQLException e) { // 捕获SQL异常System.out.printf("数据库连接失败"); // 打印连接失败的错误消息e.printStackTrace(); // 打印堆栈跟踪,用于调试} catch (ClassNotFoundException e) { // 捕获ClassNotFound异常System.out.println("驱动加载失败"); // 打印驱动加载失败的错误消息e.printStackTrace(); // 打印堆栈跟踪,用于调试}
}public void destroy() { // Servlet销毁方法try {if (connect != null) { // 检查连接是否不为nullconnect.close(); // 关闭数据库连接}} catch (SQLException e) { // 捕获SQL异常e.printStackTrace(); // 打印堆栈跟踪,用于调试}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("UTF-8"); // 设置请求字符编码为UTF-8response.setCharacterEncoding("UTF-8"); // 设置响应字符编码为UTF-8response.setContentType("text/html; charset=UTF-8"); // 设置响应内容类型为HTML,并指定UTF-8字符集String action = request.getParameter("action"); // 从请求中获取action参数if ("add".equals(action)) { // 如果action为"add"addCourse(request, response); // 调用addCourse方法} else if ("update".equals(action)) { // 如果action为"update"updateCourse(request, response); // 调用updateCourse方法} else if ("delete".equals(action)) { // 如果action为"delete"deleteCourse(request, response); // 调用deleteCourse方法}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("UTF-8"); // 设置请求字符编码为UTF-8response.setCharacterEncoding("UTF-8"); // 设置响应字符编码为UTF-8response.setContentType("text/html; charset=UTF-8"); // 设置响应内容类型为HTML,并指定UTF-8字符集String action = request.getParameter("action"); // 从请求中获取action参数if ("view".equals(action)) { // 如果action为"view"viewCourses(request, response); // 调用viewCourses方法} else if ("search".equals(action)) { // 如果action为"search"searchCourses(request, response); // 调用searchCourses方法}
}
private void addCourse(HttpServletRequest request, HttpServletResponse response) throws IOException {int id = Integer.parseInt(request.getParameter("id"));String name= request.getParameter("name");String department = request.getParameter("department");String destination = request.getParameter("destination");String departuredate = request.getParameter("departuredate");String returndate = request.getParameter("returndate");String type = request.getParameter("type");String reason = request.getParameter("reason");try {String sql = "INSERT INTO courses (id, name,department ,destination, departuredate,returndate,type,reason) VALUES (?, ?, ?, ?, ?,?,?,?)";PreparedStatement stmt = connect.prepareStatement(sql);stmt.setInt(1, id);stmt.setString(2, name);stmt.setString(3, department);stmt.setString(4,destination);stmt.setString(5, departuredate);stmt.setString(6, returndate);stmt.setString(7, type);stmt.setString(8, reason);int rowsAffected = stmt.executeUpdate();response.getWriter().write("ID为: " + id);} catch (SQLException e) {e.printStackTrace();response.getWriter().write("出错");}
}
private void updateCourse(HttpServletRequest request, HttpServletResponse response) throws IOException {// 从请求参数中获取详情String id = request.getParameter("id");String name = request.getParameter("name");String department = request.getParameter("department");String destination = request.getParameter("destination");String departuredate = request.getParameter("departuredate");String returndate = request.getParameter("returndate");String Type = request.getParameter("Type");String Reason = request.getParameter("Reason");try {// SQL查询用于更新数据库中现有String sql = "UPDATE courses SET destination = ?, departuredate = ?, returndate = ?, Type = ?, Reason = ? WHERE id = ?"; // SQL更新语句// 使用 try-with-resources 自动管理资源try (PreparedStatement stmt = connect.prepareStatement(sql)) {stmt.setString(1, destination);stmt.setString(2, departuredate);stmt.setString(3, returndate);stmt.setString(4, Type);stmt.setString(5, Reason);stmt.setString(6, id); // 设置IDint rowsAffected = stmt.executeUpdate(); // 执行更新,并获取受影响的行数if (rowsAffected > 0) { // 如果有行被更新response.getWriter().write("更新成功,ID为 " + id); // 响应成功消息} else {response.getWriter().write("未找到ID为 " + id); // 响应未找到课程的消息}}} catch (SQLException e) { // 捕获SQL异常e.printStackTrace(); // 打印堆栈跟踪,用于调试response.getWriter().write("出错: " + e.getMessage()); // 响应错误消息,包含异常信息}
}private void deleteCourse(HttpServletRequest request, HttpServletResponse response) throws IOException {String name= request.getParameter("name");try {// SQL查询用于删除数据库中的课程String sql = "DELETE FROM courses WHERE name = ?"; // SQL删除语句PreparedStatement stmt = connect.prepareStatement(sql); // 准备SQL语句stmt.setString(1, name);int rowsAffected = stmt.executeUpdate(); // 执行更新,并获取受影响的行数if (rowsAffected > 0) { // 如果有行被删除response.getWriter().write("删除成功,名字为 " + name); // 响应成功消息} else {response.getWriter().write("未找到名字为 " + name); // 响应未找到的消息}} catch (SQLException e) { // 捕获SQL异常e.printStackTrace(); // 打印堆栈跟踪,用于调试response.getWriter().write("出错"); // 响应错误消息}
}private void viewCourses(HttpServletRequest request, HttpServletResponse response) throws IOException {response.setContentType("text/html"); // 设置响应内容类型为HTMLPrintWriter out = response.getWriter(); // 获取用于输出的PrintWriter对象out.println("<html><body>"); // 输出HTML开头out.println("<h2>差旅费报销列表</h2>"); // 输出标题out.println("<ul>"); // 开始无序列表try {// SQL查询用于从数据库中获取课程列表String sql = "SELECT * FROM courses"; // SQL查询语句PreparedStatement stmt = connect.prepareStatement(sql); // 准备SQL语句ResultSet rs = stmt.executeQuery(); // 执行查询,并获取结果集while (rs.next()) { // 遍历结果集// 输出每一门课程的详细信息out.println("<li>ID: " + rs.getString("id") + ", 姓名: " + rs.getString("name") + ", 部门: " + rs.getInt("department") +", 目的地: " + rs.getString("destination") +", 出差日期: " + rs.getString("departuredate") +", 返回日期: " + rs.getString("returndate") +",出差类别: " + rs.getString("Type")+", 出差事由: " + rs.getString("Reason") + "</li>");}} catch (SQLException e) { // 捕获SQL异常e.printStackTrace(); // 打印堆栈跟踪,用于调试}out.println("</ul>"); // 结束无序列表out.println("</body></html>"); // 输出HTML结束
}private void searchCourses(HttpServletRequest request, HttpServletResponse response) throws IOException {String departuredate = request.getParameter("departuredate"); // Get departure date from requestString reason = request.getParameter("Reason"); // Get reason from requestresponse.setContentType("text/html"); // Set response content type to HTMLPrintWriter out = response.getWriter(); // Get PrintWriter object for outputout.println("<html><body>"); // Output HTML starttry {// Start building SQL queryStringBuilder sql = new StringBuilder("SELECT * FROM courses WHERE 1=1"); // Use 1=1 for easier appendingList<String> parameters = new ArrayList<>();// Add Reason parameter if providedif (reason != null && !reason.isEmpty()) {sql.append(" AND Reason LIKE ?");parameters.add("%" + reason + "%");}// Add departuredate parameter if providedif (departuredate != null && !departuredate.isEmpty()) {sql.append(" AND departuredate LIKE ?");parameters.add("%" + departuredate + "%");}// Prepare SQL statementtry (PreparedStatement stmt = connect.prepareStatement(sql.toString())) {// Set parametersfor (int i = 0; i < parameters.size(); i++) {stmt.setString(i + 1, parameters.get(i));}try (ResultSet rs = stmt.executeQuery()) { // Execute query and get result setif (rs.next()) { // Process records if anyout.println("<h2>查询结果</h2>"); // Output results headerout.println("<ul>"); // Start unordered listdo {out.println("<li>ID: " + rs.getString("id") + ", 姓名: " + rs.getString("name") + ", 部门: " + rs.getInt("department") +", 目的地: " + rs.getString("destination") +", 出差日期: " + rs.getString("departuredate") +", 返回日期: " + rs.getString("returndate") +", 出差类别: " + rs.getString("Type") +", 出差事由: " + rs.getString("reason") + "</li>");} while (rs.next()); // Loop through all resultsout.println("</ul>"); // End unordered list} else {out.println("<h2>未找到符合条件的出差申请</h2>"); // No results found message}}}} catch (SQLException e) { // Catch SQL exceptionse.printStackTrace(); // Print stack trace for debuggingout.println("<li>查询出错: " + e.getMessage() + "</li>"); // Output error message}out.println("</body></html>"); // Output HTML end
}

}
以下是页面

(1)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

添加出差申请

添加出差申请

id:
部门:
姓名:
目的地:
出发日期:
返回日期:
出差类别:
出差事由:
(2) <%@ page contentType="text/html;charset=UTF-8" language="java" %>编辑出差申请

编辑出差申请

ID:
出差日期:
出差事由:
(3) <%@ page contentType="text/html;charset=UTF-8" language="java" %>出差管理系统

出差管理系统

(4) <%@ page contentType="text/html;charset=UTF-8" language="java" %>搜索出差申请

搜索出差申请

出差时间:
出差事由:
(5) <%@ page contentType="text/html;charset=UTF-8" language="java" %>修改出差申请

修改出差申请

ID:
目的地:
出差日期:
返回日期
出差类别:
出差事由:
(6) <%@ page contentType="text/html;charset=UTF-8" language="java" %>出差申请列表

出差申请列表

查看所有出差申请效果图 ![](https://img2024.cnblogs.com/blog/3474905/202412/3474905-20241203184055988-353520428.png) ![](https://img2024.cnblogs.com/blog/3474905/202412/3474905-20241203184121431-1736602986.png) ![](https://img2024.cnblogs.com/blog/3474905/202412/3474905-20241203184158067-1984955709.png) ![](https://img2024.cnblogs.com/blog/3474905/202412/3474905-20241203184216018-24012872.png) ![](https://img2024.cnblogs.com/blog/3474905/202412/3474905-20241203184234657-961065658.png) ![](https://img2024.cnblogs.com/blog/3474905/202412/3474905-20241203184253389-623768540.png) 基本上所有单表的增删改查都可以套模板。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/846253.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JDBC连接数据库实现增删改查前端交互

实现交互最终要的是这个web.xml,其实我们新版本已经可以直接使用@这个CourseSevlet是前后端实现交互的映射,只有这个东西配置好了,才能实现前后端的交互,前端界面随便写写就行,主要就是那个意思

VScode中配置 C/C++ 环境

## VScode中配置 C/C++ 环境 1. 下载编译器MinGW并解压官网页面:https://www.mingw-w64.org/下载页面:https://sourceforge.net/projects/mingw-w64/files/下载页面中选择 x86_64-win32-seh 下载(目前已经更新,页面中没有,需要找很麻烦)MinGW直接下载地址 https://wwn.la…

hot100-一刷-04子串(共3道题)

560. 和为 K 的子数组 题目链接 题目描述代码实现 分析:暴力:还是有点技巧的,如果单纯暴力,外层fori循环遍历起始下标start,内层forj循环遍历末尾end,里面还需要个循环,计算从i加到j,最坏会到\(O(n^3)\)。考虑固定某一个边界,比如固定end,从end往前算。点击查看代码 c…

JDBC链接数据库

1.首先我们需要下载mysql的官网jar包 https://dev.mysql.com/downloads/connector/j/ 这个版本比较新 然后打开idea 创建一个项目 下面是链接代码,记得看注释 package com.stu.jdbc;//我的包的名字叫com.stu.jdbc,报错可以删除 import java.sql.*; public class JDBC {//这个…

欧拉路/欧拉回路 学习笔记【未完工】

欧拉路判定 有向图 首先这张图将所有的有向边转为无向边之后图连通。 反例: 其次,我们知道当且仅当所有点的入度和出度都相等,才会有欧拉回路。因为一个点进去之后一定会出来,所以入度一定等于出度。 同理,我们也可以知道入度和出度差 \(1\) 时,才会有欧拉路。因为不要从…

XPT8871模块的使用

该模块引脚如下所示:由于XPT8871为单声道功放,因此只能连接1个喇叭。需要注意的是电源不能反接,否则会让芯片直接烧毁。另外该模块有个问题就是电流声很大,即使是5W的喇叭仍能听见较大的电流声。 但是该模块的价格还是蛮便宜的,只要1-2块钱就可以了。

JWT规范及使用

JWT结构 JWT由三部分组成:Header Payload SignatureJWT通常如下所示: xxxxx.yyyyy.zzzzz JWT结构部分说明 Header 报头通常由两部分组成:TOKEN的类型,即JWT,以及所使用的签名算法,如HMAC SHA256或RSA。 例如: { "alg": "HS256", "typ": &…

习题9.4

点击查看代码 import numpy as np import pandas as pd import scipy.stats as ss import statsmodels.api as sm data = np.loadtxt(F:\python数学建模与算法\源程序\《Python数学建模算法与应用》程序和数据\第9章 数据的描述性统计方法/ti9_4.txt) x1 = np.tile(np.arange(…

习题9.5

点击查看代码 import numpy as np import statsmodels.api as sm data = np.loadtxt(F:\python数学建模与算法\源程序\《Python数学建模算法与应用》程序和数据\第9章 数据的描述性统计方法/ti9_5.txt) x1 = np.vstack([np.ones((4, 4)), np.ones((4, 4))*2, np.ones((4, 4))*…

20222420 2021-2022-2 《网络与系统攻防技术》实验七实验报告

1.实验内容 1.1实验内容简述 本实践的目标为理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法。 (1)简单应用SET工具建立冒名网站 (2)ettercap DNS spoof (3)结合应用两种技术,用DNS spoof引导特定访问到冒名网站。 (4)提出具体防范方法 1.2近期学习内…

Ubuntu22.04 LTS 基于docker部署思源笔记

Ubuntu22.04 LTS 基于docker部署思源笔记 官网地址: https://b3log.org/siyuan/GitHub地址: https://github.com/siyuan-note/siyuan1. 启动docker容器 docker run -d \-v workspace_dir_host:workspace_dir_container \-p 6806:6806 \--restart always \b3log/siyuan \--wor…