首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

jsp增删改查实验

JSP(Java Server Pages)是一种基于Java技术的服务器端编程技术,用于生成动态网页内容。增删改查(CRUD)是数据库操作中最基本的四种操作,分别是创建(Create)、读取(Retrieve)、更新(Update)和删除(Delete)。下面我将详细介绍如何在JSP中进行增删改查实验,并提供一些示例代码。

基础概念

  1. JSP:Java Server Pages,是一种用于创建动态网页的技术,允许在HTML或XML文档中嵌入Java代码。
  2. CRUD操作
    • Create(创建):向数据库中插入新记录。
    • Retrieve(读取):从数据库中查询记录。
    • Update(更新):修改数据库中的现有记录。
    • Delete(删除):从数据库中删除记录。

相关优势

  • 易于学习:JSP结合了HTML和Java,使得开发者可以快速上手。
  • 灵活性:可以在JSP页面中直接嵌入Java代码,便于实现复杂的业务逻辑。
  • 可维护性:通过将业务逻辑与页面展示分离,提高了代码的可维护性。

类型与应用场景

  • 类型
    • 简单JSP页面:用于显示静态内容和简单的动态内容。
    • JSP+Servlet:通过Servlet处理业务逻辑,JSP负责页面展示。
    • MVC架构:使用Model-View-Controller模式,将业务逻辑、数据和展示层分离。
  • 应用场景
    • Web应用:如电子商务网站、论坛、博客等。
    • 企业应用:如CRM系统、ERP系统等。

示例代码

假设我们有一个简单的学生管理系统,包含学生的增删改查功能。

数据库表结构

代码语言:txt
复制
CREATE TABLE students (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100),
    age INT,
    grade VARCHAR(10)
);

1. 创建(Create)

addStudent.jsp

代码语言:txt
复制
<%@ page import="java.sql.*" %>
<html>
<head>
    <title>Add Student</title>
</head>
<body>
    <h2>Add Student</h2>
    <form action="addStudentProcess.jsp" method="post">
        Name: <input type="text" name="name"><br>
        Age: <input type="text" name="age"><br>
        Grade: <input type="text" name="grade"><br>
        <input type="submit" value="Add Student">
    </form>
</body>
</html>

addStudentProcess.jsp

代码语言:txt
复制
<%@ page import="java.sql.*" %>
<%
    String name = request.getParameter("name");
    int age = Integer.parseInt(request.getParameter("age"));
    String grade = request.getParameter("grade");

    Connection conn = null;
    PreparedStatement pstmt = null;
    try {
        Class.forName("com.mysql.jdbc.Driver");
        conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testdb", "username", "password");
        String sql = "INSERT INTO students (name, age, grade) VALUES (?, ?, ?)";
        pstmt = conn.prepareStatement(sql);
        pstmt.setString(1, name);
        pstmt.setInt(2, age);
        pstmt.setString(3, grade);
        pstmt.executeUpdate();
        response.sendRedirect("students.jsp");
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (pstmt != null) pstmt.close();
        if (conn != null) conn.close();
    }
%>

2. 读取(Retrieve)

students.jsp

代码语言:txt
复制
<%@ page import="java.sql.*" %>
<html>
<head>
    <title>Students List</title>
</head>
<body>
    <h2>Students List</h2>
    <table border="1">
        <tr>
            <th>ID</th>
            <th>Name</th>
            <th>Age</th>
            <th>Grade</th>
            <th>Actions</th>
        </tr>
        <%
            Connection conn = null;
            Statement stmt = null;
            ResultSet rs = null;
            try {
                Class.forName("com.mysql.jdbc.Driver");
                conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testdb", "username", "password");
                stmt = conn.createStatement();
                rs = stmt.executeQuery("SELECT * FROM students");
                while (rs.next()) {
        %>
        <tr>
            <td><%= rs.getInt("id") %></td>
            <td><%= rs.getString("name") %></td>
            <td><%= rs.getInt("age") %></td>
            <td><%= rs.getString("grade") %></td>
            <td>
                <a href="editStudent.jsp?id=<%= rs.getInt("id") %>">Edit</a>
                <a href="deleteStudent.jsp?id=<%= rs.getInt("id") %>">Delete</a>
            </td>
        </tr>
        <%
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (rs != null) rs.close();
                if (stmt != null) stmt.close();
                if (conn != null) conn.close();
            }
        %>
    </table>
    <a href="addStudent.jsp">Add New Student</a>
</body>
</html>

3. 更新(Update)

editStudent.jsp

代码语言:txt
复制
<%@ page import="java.sql.*" %>
<html>
<head>
    <title>Edit Student</title>
</head>
<body>
    <h2>Edit Student</h2>
    <%
        int id = Integer.parseInt(request.getParameter("id"));
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testdb", "username", "password");
            String sql = "SELECT * FROM students WHERE id = ?";
            pstmt = conn.prepareStatement(sql);
            pstmt.setInt(1, id);
            rs = pstmt.executeQuery();
            if (rs.next()) {
    %>
                <form action="editStudentProcess.jsp" method="post">
                    <input type="hidden" name="id" value="<%= rs.getInt("id") %>">
                    Name: <input type="text" name="name" value="<%= rs.getString("name") %>"><br>
                    Age: <input type="text" name="age" value="<%= rs.getInt("age") %>"><br>
                    Grade: <input type="text" name="grade" value="<%= rs.getString("grade") %>"><br>
                    <input type="submit" value="Update Student">
                </form>
    <%
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (rs != null) rs.close();
            if (pstmt != null) pstmt.close();
            if (conn != null) conn.close();
        }
    %>
</body>
</html>

editStudentProcess.jsp

代码语言:txt
复制
<%@ page import="java.sql.*" %>
<%
    int id = Integer.parseInt(request.getParameter("id"));
    String name = request.getParameter("name");
    int age = Integer.parseInt(request.getParameter("age"));
    String grade = request.getParameter("grade");

    Connection conn = null;
    PreparedStatement pstmt = null;
    try {
        Class.forName("com.mysql.jdbc.Driver");
        conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testdb", "username", "password");
        String sql = "UPDATE students SET name = ?, age = ?, grade = ? WHERE id = ?";
        pstmt = conn.prepareStatement(sql);
        pstmt.setString(1, name);
        pstmt.setInt(2, age);
        pstmt.setString(3, grade);
        pstmt.setInt(4, id);
        pstmt.executeUpdate();
        response.sendRedirect("students.jsp");
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (pstmt != null) pstmt.close();
        if (conn != null) conn.close();
    }
%>

4. 删除(Delete)

deleteStudent.jsp

代码语言:txt
复制
<%@ page import="java.sql.*" %>
<%
    int id = Integer.parseInt(request.getParameter("id"));

    Connection conn = null;
    PreparedStatement pstmt = null;
    try {
        Class.forName("com.mysql.jdbc.Driver");
        conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testdb", "username", "password");
        String sql = "DELETE FROM students WHERE id = ?";
        pstmt = conn.prepareStatement(sql);
        pstmt.setInt(1, id);
        pstmt.executeUpdate();
        response.sendRedirect("students.jsp");
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (pstmt != null) pstmt.close();
        if (conn != null) conn.close();
    }
%>

常见问题及解决方法

  1. 数据库连接失败
    • 原因:数据库URL、用户名或密码错误,或者数据库服务未启动。
    • 解决方法:检查数据库配置信息,确保数据库服务正常运行。
  • SQL语句错误
    • 原因:SQL语句语法错误或表名、字段名拼写错误。
    • 解决方法:仔细检查SQL语句,确保语法正确,并核对表名和字段名。
  • 数据类型不匹配
    • 原因:插入或更新数据时,数据类型与数据库字段类型不匹配。
    • 解决方法:确保传入的数据类型与数据库字段类型一致。
  • 资源未关闭
    • 原因:未正确关闭数据库连接、语句或结果集,导致资源泄漏。
    • 解决方法:使用finally块确保资源在使用后被正确关闭。

通过以上步骤和示例代码,你应该能够在JSP中实现基本的增删改查功能。如果在实际操作中遇到其他问题,可以根据错误信息进行排查和解决。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 增删改查入门

    开源地址:https://github.com/NewLifeX/X (求star, 620+) 增删改查入门 新建控制台项目(.NET Core),从nuget引用NewLife.XCode,(也可以从别的项目引用下载后拷贝...XTrace.UseConsole(); // 添加 var user = new UserX { Name = "大石头", Enable = true }; user.Insert(); // 自增字段...日志大意是:自动配置SQLite数据库,下载平台要求的SQLite驱动,建库建表,增删改查 这里特别需要关注的是这几行: 22:57:17.548 1 N - Insert Into User(Name...这就是一个完整的增删改查! 短短的一段代码,也许带给你许多疑问,这些疑问都将在后续文章中得到详细解答: UserX类来自哪里?(XCode内置权限体系Membership) 为何不需要配置数据库?...(这是XCode最为强大的反向工程,2008年开始支持,类似于EF后来的数据迁移) 自增ID。Insert后会即刻取回新插入的自增值 Logins=Logins+1。

    83940

    Servlet框架(servlet+jsp)+Mysql实现的增删改查+分页(功能包学生信息录入、学生信息增删改查、分页等)

    @TOC Servle框架(servlet+jsp)+Mysql实现的增删改查+分页 本系统实现了一个java的servlet框架+jsp的学生信息增删改查+分页的实例,简单易懂,特别适合刚学servlet...学生信息录入 2、录入成功 3、学生信息列表 4、分页 5、学生信息编辑 6、学生信息删除 使用技术 数据库:mysql 开发工具:Eclipse(Myeclispe、Idea也可以) 知识点:servlet+jsp..."+gender+"','"+major+"')"); close(stat,conn); request.getRequestDispatcher("InsertSuccess.jsp...pager); request.setAttribute("subResult", subResult); request.getRequestDispatcher("layout.jsp...request.setAttribute("result", select(id4,"")); request.getRequestDispatcher("update1.jsp

    2.4K10

    MyBatis+JSP+Servlet...MySql实现分页增删改查:代码详细有注释~

    已经可以在 控制台完成 增删改查 了,哈哈哈哈(大佬路过别笑)… 感觉还不错呢. 现在也开始学习在 CSDN上写笔记博客, 哈哈以前都是看其它大佬的....以后有时间也许会想办法吧 笔记都搬到 CSDN上来嘿嘿~ 各位大佬,多多指教; MyBatis+JSP+Servlet…MySql实现分页/增删改查: **回归主题还是继续今天的代码笔记:**对MyBatis...的总结吧:实现基本的增删改查分页… 如果有问题的朋友可以借鉴之前的笔记哦~ 初始MyBatis....-- 因为:这个where会在 查集合/查总行;都用到通过 sql标签提取出来,可以多次使用; 通过 include引用 --> <!...-- 总记录数不是 所有数据,它是根据不同的条件查询对应不同的总行数,在通过总行数获取出总页数 不可能:所有员工有八页 而查姓王的也是八页数据吧..

    17110

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券