当前位置:首页 > 问答 > 正文

P数据库里头增删那些操作的源码是咋写的,jsp怎么实现数据库增加和删除功能解析

根据网络上常见的JSP教程和代码示例(例如菜鸟教程、CSDN博客等平台上的典型JSP+JDBC案例),实现数据库的增加(Insert)和删除(Delete)功能,通常遵循一个相似的流程,下面将直接解析这个流程和关键的源码片段。

准备工作:连接数据库

无论进行何种操作,第一步永远是建立与数据库的连接,在JSP中,这通常使用JDBC(Java Database Connectivity)技术来完成,源码一般会放在JSP页面的顶部,或者封装在一个单独的Java类中。

一段典型的数据库连接代码如下(来源:常见JSP入门教学):

P数据库里头增删那些操作的源码是咋写的,jsp怎么实现数据库增加和删除功能解析

<%@ page import="java.sql.*" %>
<%
    Connection conn = null;
    PreparedStatement pstmt = null;
    try {
        // 1. 加载数据库驱动,现在通常可以省略这一步,新版JDBC会自动加载
        Class.forName("com.mysql.cj.jdbc.Driver");
        // 2. 定义数据库连接信息
        String url = "jdbc:mysql://localhost:3306/你的数据库名?useSSL=false&serverTimezone=UTC";
        String user = "用户名";
        String password = "密码";
        // 3. 获取数据库连接
        conn = DriverManager.getConnection(url, user, password);
        // ... 后续的增删操作会在这里执行 ...
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        // 4. 在finally块中关闭资源,确保无论是否发生异常都会执行
        try {
            if (pstmt != null) pstmt.close();
            if (conn != null) conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
%>

关键点解析:

  • Class.forName:加载特定的数据库驱动,比如这里是MySQL的驱动。
  • DriverManager.getConnection:这是核心,通过提供的数据库地址、用户名和密码,获得一个活的“连接对象”(Connection),有了这个对象,才能和数据库“对话”。
  • PreparedStatement:这是一个预编译的SQL语句对象,比普通的Statement更安全,能有效防止SQL注入攻击,后面会用到。

增加(Insert)操作源码与解析

增加操作对应SQL语句中的INSERT,通常在用户填写表单(比如注册信息)并提交后,由JSP页面处理。

P数据库里头增删那些操作的源码是咋写的,jsp怎么实现数据库增加和删除功能解析

前端表单(addUser.html/jsp)示例:

<form action="do_add.jsp" method="post">
    用户名:<input type="text" name="username"><br>
    年龄:<input type="text" name="age"><br>
    <input type="submit" value="添加">
</form>

处理增加的JSP页面(do_add.jsp)核心源码: 接在刚才的连接代码conn = DriverManager.getConnection(...);之后:

// 从请求(request)中获取用户提交的表单数据
String username = request.getParameter("username");
int age = Integer.parseInt(request.getParameter("age"));
// 定义要执行的SQL语句,用问号?作为占位符
String sql = "INSERT INTO users (username, age) VALUES (?, ?)";
// 使用连接创建预编译语句对象,并设置参数
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, username); // 第一个问号替换为username的值
pstmt.setInt(2, age);         // 第二个问号替换为age的值
// 执行更新操作,返回值是受影响的行数
int count = pstmt.executeUpdate();
// 根据结果给出提示
if (count > 0) {
    out.println("用户添加成功!");
} else {
    out.println("用户添加失败!");
}

关键点解析:

P数据库里头增删那些操作的源码是咋写的,jsp怎么实现数据库增加和删除功能解析

  • request.getParameter("username"):这是JSP的内置对象,用来获取从表单通过POSTGET方法传递过来的参数值。
  • INSERT INTO ... VALUES (?, ?):SQL插入语句,使用问号占位符是PreparedStatement的关键,它先将SQL语句骨架发送给数据库编译,然后再传入具体值。
  • pstmt.setString(1, username):将第一个问号占位符设置成变量username的值,这种方法避免了SQL注入,因为用户输入的内容只会被当作数据,而不会被当作SQL代码执行。
  • executeUpdate():用于执行INSERTUPDATEDELETE等会改变数据库内容的SQL语句,它返回一个整数,表示有多少行数据受到了影响。

删除(Delete)操作源码与解析

删除操作对应SQL语句中的DELETE,通常通过传递一个唯一标识(如用户ID)来指定要删除哪条记录。

触发删除的方式(listUsers.jsp)示例: 通常在一个用户列表页面,每条记录后面会有一个“删除”链接。

<%
// ... 假设这里有一段代码从数据库查询出所有用户列表,放在ResultSet rs中 ...
while (rs.next()) {
    int id = rs.getInt("id");
    String name = rs.getString("username");
%>
    <tr>
        <td><%= name %></td>
        <td><a href="do_delete.jsp?id=<%= id %>" onclick="return confirm('确定删除吗?')">删除</a></td>
    </tr>
<%
}
%>

处理删除的JSP页面(do_delete.jsp)核心源码: 同样接在数据库连接代码之后:

// 从请求的URL参数中获取要删除的用户ID
int id = Integer.parseInt(request.getParameter("id"));
// 定义删除的SQL语句
String sql = "DELETE FROM users WHERE id = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, id); // 将SQL中的问号替换为具体的id值
int count = pstmt.executeUpdate();
if (count > 0) {
    out.println("用户删除成功!");
    // 通常这里会重定向回列表页面
    // response.sendRedirect("listUsers.jsp");
} else {
    out.println("用户删除失败,可能该用户已不存在。");
}

关键点解析:

  • request.getParameter("id"):这里是从超链接href="do_delete.jsp?id=<%= id %>"的URL中获取名为id的参数。
  • DELETE FROM users WHERE id = ?:SQL删除语句,通过ID精准定位要删除的行。WHERE条件非常重要,如果没有条件,会删除整个表的数据,非常危险。
  • onclick="return confirm(...)":这是前端的JavaScript确认对话框,是一种良好的实践,防止用户误操作,只有用户点击“确定”,才会真正跳转到删除页面。

总结一下 从上面的源码可以看出,JSP实现数据库增删的核心模式是:获取用户输入 -> 建立数据库连接 -> 组装并执行SQL语句 -> 根据执行结果反馈给用户,虽然现在的Java Web开发更倾向于使用Servlet和MVC框架(如Spring MVC)来更好地分离逻辑和界面,但JSP直连数据库的这种形式是理解Web操作数据库原理最直接的方式,关键是要注意使用PreparedStatement防止SQL注入,以及妥善管理数据库连接,及时关闭以避免资源泄露。