jsp+servlet+jdbc实现对数据库的增删改查

首先,我们需要明确一下技术栈的概念:

  • JSP (Java Server Pages):基于Java语言的服务器端网页开发技术;
  • Servlet:是Java Web应用程序的核心,位于服务端,负责处理浏览器发送过来的HTTP请求并返回响应结果;
  • JDBC (Java Database Connectivity):Java数据库连接,Java语言操作关系型数据库的标准接口。

下面是JSP+servlet+JDBC实现对数据库增删改查的完整攻略。

第一步:搭建开发环境

开发环境需要:

  • JDK 1.8 或以上版本;
  • Tomcat 8 或以上版本;
  • MySQL 5.7 或以上版本;
  • Eclipse 或 IntelliJ IDEA。

第二步:建立数据库

在MySQL数据库中,新建一个数据库,例如sampledb,然后创建一个用户,并且为该用户授权访问database中的表。

第三步:建表

在sampledb中建立一个表,例如userinfo,userinfo表有三个字段,分别为id、name、age,其中id为主键。

CREATE TABLE `userinfo` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(45) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

第四步:实现业务逻辑

编写Java类,通过JDBC连接数据库,实现对数据库的增删改查操作,具体流程如下:

1. 配置数据库连接

在项目中创建一个database.properties文件,配置如下:

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/sampledb
username=root
password=root

2. 编写工具类

创建一个JdbcUtils工具类,在该类中实现数据库的连接与关闭操作。

public class JdbcUtils {
    private static String driver;
    private static String url;
    private static String username;
    private static String password;
    private Connection conn;

    static{
        try {
            Properties props = new Properties();
            InputStream is = JdbcUtils.class.getClassLoader().getResourceAsStream("database.properties");
            props.load(is);

            driver = props.getProperty("driver");
            url = props.getProperty("url");
            username = props.getProperty("username");
            password = props.getProperty("password");

            Class.forName(driver);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public Connection getConnection() throws SQLException {
        if(conn==null)
            return DriverManager.getConnection(url, username, password);
        else
            return conn;
    }

    public void closeConnection() throws SQLException{
        if(conn!=null){
            conn.close();
            conn = null;
        }
    }
}

3. 编写实体类

创建实体类UserInfo,用于封装从数据库中取出的数据。

public class UserInfo {
    private int id;
    private String name;
    private int age;

    // 构造函数
    public UserInfo() {
    }

    public UserInfo(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    // Getter 和 Setter
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

4. 编写DAO层

创建UserInfoDao类,封装对数据库的增删改查操作。

public class UserInfoDao {
    private Connection getConnection() throws SQLException {
        return new JdbcUtils().getConnection();
    }

    public boolean addUserInfo(UserInfo userInfo) {
        Connection conn = null;
        String sql = "INSERT INTO userinfo(name,age) VALUES (?,?)";
        PreparedStatement ps = null;
        try {
            conn = getConnection();
            ps = conn.prepareStatement(sql);
            ps.setString(1, userInfo.getName());
            ps.setInt(2, userInfo.getAge());
            ps.executeUpdate();
            return true;
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                ps.close();
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return false;
    }

    public boolean removeUserInfo(int id) {
        Connection conn = null;
        String sql = "DELETE FROM userinfo WHERE id = ?";
        PreparedStatement ps = null;
        try {
            conn = getConnection();
            ps = conn.prepareStatement(sql);
            ps.setInt(1, id);
            ps.executeUpdate();
            return true;
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                ps.close();
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return false;
    }

    public boolean updateUserInfo(UserInfo userInfo) {
        Connection conn = null;
        String sql = "UPDATE userinfo SET name = ?, age = ? WHERE id = ?";
        PreparedStatement ps = null;
        try {
            conn = getConnection();
            ps = conn.prepareStatement(sql);
            ps.setString(1, userInfo.getName());
            ps.setInt(2, userInfo.getAge());
            ps.setInt(3, userInfo.getId());
            ps.executeUpdate();
            return true;
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                ps.close();
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return false;
    }

    public List<UserInfo> findAllUserInfo() {
        Connection conn = null;
        String sql = "SELECT * FROM userinfo";
        PreparedStatement ps = null;
        ResultSet rs = null;
        List<UserInfo> userInfoList = new ArrayList<>();
        try {
            conn = getConnection();
            ps = conn.prepareStatement(sql);
            rs = ps.executeQuery();
            while(rs.next()){
                UserInfo userInfo = new UserInfo();
                userInfo.setId(rs.getInt("id"));
                userInfo.setName(rs.getString("name"));
                userInfo.setAge(rs.getInt("age"));
                userInfoList.add(userInfo);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                rs.close();
                ps.close();
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return userInfoList;
    }
}

5. 编写Servlet类

编写WebServlet类,用于处理客户端请求,调用DAO层实现增删改查。

@WebServlet(name = "UserInfoServlet", urlPatterns = {"/UserInfoServlet"})
public class UserInfoServlet extends HttpServlet {

    private UserInfoDao userInfoDao;

    public void init() {
        userInfoDao = new UserInfoDao();
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        String methodName = request.getParameter("methodName");

        switch (methodName) {
            case "addUserInfo":
                addUserInfo(request, response);
                break;
            case "removeUserInfo":
                removeUserInfo(request, response);
                break;
            case "updateUserInfo":
                updateUserInfo(request, response);
                break;
            case "findAllUserInfo":
                findAllUserInfo(request, response);
                break;
        }
    }

    protected void addUserInfo(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String name = request.getParameter("name");
        int age = Integer.parseInt(request.getParameter("age"));

        UserInfo userInfo = new UserInfo();
        userInfo.setName(name);
        userInfo.setAge(age);

        if (userInfoDao.addUserInfo(userInfo)) {
            response.sendRedirect("/success.jsp");
        } else {
            response.sendRedirect("/error.jsp");
        }
    }

    protected void removeUserInfo(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        int id = Integer.parseInt(request.getParameter("id"));

        if (userInfoDao.removeUserInfo(id)) {
            response.sendRedirect("/success.jsp");
        } else {
            response.sendRedirect("/error.jsp");
        }
    }

    protected void updateUserInfo(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        int id = Integer.parseInt(request.getParameter("id"));
        String name = request.getParameter("name");
        int age = Integer.parseInt(request.getParameter("age"));

        UserInfo userInfo = new UserInfo();
        userInfo.setId(id);
        userInfo.setName(name);
        userInfo.setAge(age);

        if (userInfoDao.updateUserInfo(userInfo)) {
            response.sendRedirect("/success.jsp");
        } else {
            response.sendRedirect("/error.jsp");
        }
    }

    protected void findAllUserInfo(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        List<UserInfo> userInfoList = userInfoDao.findAllUserInfo();
        request.setAttribute("userInfoList", userInfoList);
        request.getRequestDispatcher("/userinfo.jsp").forward(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }

    public void destroy() {
        userInfoDao = null;
    }
}

6. 编写JSP页面

使用JSP页面实现UserInfoServlet的视图。

write.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Add User</title>
</head>
<body>
    <form action="UserInfoServlet" method="post">
        <input type="text" placeholder="Name" name="name"/><br/>
        <input type="text" placeholder="Age" name="age"/><br/>
        <input type="hidden" name="methodName" value="addUserInfo"/>
        <input type="submit" value="Add User"/>
    </form>
</body>
</html>

userinfo.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>User Info</title>
</head>
<body>
    <table border="1">
        <tr>
            <td>ID</td>
            <td>Name</td>
            <td>Age</td>
            <td>Actions</td>
        </tr>
        <%
            List<UserInfo> userInfoList = (List<UserInfo>)request.getAttribute("userInfoList");
            for (UserInfo userInfo : userInfoList) {
        %>
        <tr>
            <td><%=userInfo.getId()%></td>
            <td><%=userInfo.getName()%></td>
            <td><%=userInfo.getAge()%></td>
            <td>
                <form action="UserInfoServlet" method="post">
                    <input type="hidden" name="id" value="<%=userInfo.getId()%>"/>
                    <input type="hidden" name="name" value="<%=userInfo.getName()%>"/>
                    <input type="hidden" name="age" value="<%=userInfo.getAge()%>"/>
                    <input type="hidden" name="methodName" value="updateUserInfo"/>
                    <input type="submit" value="Edit"/>
                </form>
                <form action="UserInfoServlet" method="post">
                    <input type="hidden" name="id" value="<%=userInfo.getId()%>"/>
                    <input type="hidden" name="methodName" value="removeUserInfo"/>
                    <input type="submit" value="Remove"/>
                </form>
            </td>
        </tr>
        <% } %>
    </table>
    <br/><br/>
    <form action="write.jsp">
        <input type="submit" value="Add User"/>
    </form>
</body>
</html>

第五步:测试运行

将项目程序打包并放置在Tomcat服务器中运行,通过浏览器访问JSP页面,验证新增、修改、删除和查询等操作是否能够正常进行。

示例

下面给出以下两个示例:

示例1:新增用户

客户端访问write.jsp页面,输入用户信息,点击“Add User”按钮。UserInfoServlet通过POST请求获取数据,并通过DAO层调用JDBC向数据库插入新数据。

示例2:查询用户信息

客户端访问userinfo.jsp页面,UserInfoServlet通过DAO层调用JDBC从数据库中取出所有用户信息,返回JSP页面供用户查看。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jsp+servlet+jdbc实现对数据库的增删改查 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Java的Hello World详解

    Java的Hello World详解 简介 Hello World是学习任何编程语言的第一步,也是最基本的程序代码。在Java语言中,Hello World程序是Java学习者入门的必修课程。 安装Java环境 在开始编写Java程序之前,需要先安装Java编程环境。可以从Oracle官网下载并安装JDK(Java Development Kit)。安装过程…

    Java 2023年5月20日
    00
  • 在Java中String和Date、Timestamp之间的转换

    在Java中,String、Date和Timestamp之间的转换十分常见。本篇攻略将详细介绍如何在它们之间转换。 1. String –> Date/Timestamp 1.1 String –> Date 要将字符串转换为日期,我们可以使用SimpleDateFormat类。SimpleDateFormat支持各种日期格式,比如”yyyy…

    Java 2023年5月20日
    00
  • 关于Java反射机制 你需要知道的事情

    关于Java反射机制你需要知道的事情 什么是Java反射机制 Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;并且能够调用这个类的任意方法或属性。这种动态获取类信息以及动态调用对象方法的功能称为Java反射机制。 Java反射机制的背景 在开发过程中,Java程序需要经常对各种类文件进行操作。例如,获取一个类的构造函数、获取…

    Java 2023年5月26日
    00
  • ubuntu安装配置java环境(图)

    请耐心阅读以下攻略。 Ubuntu安装配置Java环境 前言 Java是一种跨平台编程语言,具有高效、稳定、安全等特点,因此被广泛应用于各种应用开发中。 在Ubuntu系统上安装Java环境,可以使你在本地搭建Java开发环境,同时也能够便于你在服务器上部署Java应用。 本文将介绍在Ubuntu系统上安装配置Java环境的完整步骤。(以下内容是针对Ubun…

    Java 2023年5月26日
    00
  • 老生常谈java中cookie的使用

    针对“老生常谈java中cookie的使用”的问题,我将分为以下几个部分进行讲解: 1. 什么是Cookie Cookie 是浏览器在客户端保存数据的一种机制,通过向客户端发送 Cookie,并且在客户端保存了 Cookie 之后,在下次客户端请求时会自动携带这个 Cookie,以此来实现持续的服务端对客户端的标识与状态保持。 2. Java 中 Cooki…

    Java 2023年6月16日
    00
  • Java运算符的知识点与代码汇总

    Java运算符的知识点与代码汇总 1. 概述 Java运算符是Java语言中用于完成各种算数、关系和逻辑运算的符号。在Java程序中,运算符经常被用于各种运算表达式中,通过运算符可以组合复杂的逻辑表达式,完成各种数据计算和判断。本文将详细讲解Java运算符的知识点和一些常见的使用示例。 2. 分类 Java运算符可分为以下几类: 算术运算符 赋值运算符 自增…

    Java 2023年5月30日
    00
  • OpenGL ES 矩阵变换及其数学原理详解(五)

    “OpenGL ES 矩阵变换及其数学原理详解(五)”这篇文章主要讲解了OpenGL ES中矩阵变换的相关知识和数学原理。文章详细介绍了矩阵变换的分类、矩阵乘法的实现方法以及如何将多个矩阵相乘得到最终的变换矩阵。本文也涉及了矩阵的分解以及常见的变换操作,如缩放、平移、旋转等。同时,本文还通过示例展示了如何使用矩阵变换实现精灵动画效果。 本文通过多个示例详细说…

    Java 2023年5月26日
    00
  • Spring整合Dubbo框架过程及原理解析

    下面是关于“Spring整合Dubbo框架过程及原理解析”的完整攻略: 1. Dubbo框架简介 Dubbo是一款开源的、高性能的Java RPC框架。Dubbo提供了完整的服务治理方案,包括服务注册与发现、服务路由、负载均衡、容错机制等。Dubbo的核心是基于高效的序列化与网络通信框架实现的高性能远程过程调用(RPC)。 2. Spring整合Dubbo …

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部