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日

相关文章

  • Go Java算法之从英文中重建数字示例详解

    Go Java算法之从英文中重建数字示例详解 概述 本文将为大家详细讲解如何从一段英文中提取数字,并将其重建成原本的数字。本文的实现会使用到Java语言和正则表达式的相关知识,需要读者有一定的Java编程基础和正则表达式的基本理解。 实现过程 步骤一:字母替换 首先,我们需要将英文字符串中的所有与数字无关的字符都去除。这一过程中我们将采用Java的正则表达式…

    Java 2023年5月19日
    00
  • 使用IDEA编写jsp时EL表达式不起作用的问题及解决方法

    使用IDEA编写jsp时EL表达式不起作用,可能是因为IDEA默认的jsp版本过高了,导致EL表达式无法正常解析。本文将分享如何解决此问题。 问题分析 在IDEA中编写jsp时,如果使用${}表达式时没有得到正确的结果,可以检查以下几个方面: 是否引入了正确的JSTL标签库并且使用正确的前缀。 是否在web.xml中配置了正确的JSP版本。 是否需要修改ID…

    Java 2023年6月15日
    00
  • java-synchronized 嵌套使用代码详解

    Java synchronized 嵌套使用代码详解 在Java 中使用synchronized 关键字是实现多线程同步的重要手段之一,它可以锁定共享资源,保证线程安全。有时候可能会遇到需要在方法中嵌套使用synchronized 实现更细粒度的同步控制,这里将详细讲解java-synchronized 嵌套使用的代码实现和使用技巧。 synchronize…

    Java 2023年5月26日
    00
  • Java仿Windows记事本源代码分享

    当我们想要学习一个新的知识点或技能时,最好的方法就是阅读和理解已经存在的代码,在此基础上进行修改和调试。 本篇攻略将带领大家深入了解Java仿Windows记事本的源代码,为大家提供具体的实例说明,帮助大家更好地理解和使用该代码。 1.前置环境要求 要打开并使用这个记事本仿真代码,你需要在你的计算机上预先安装Java环境。你可以从Java官网上下载合适的Ja…

    Java 2023年5月23日
    00
  • Java/Web调用Hadoop进行MapReduce示例代码

    Java/Web调用Hadoop进行MapReduce的完整攻略涉及以下步骤: 准备Hadoop集群在进行Java/Web调用Hadoop进行MapReduce前,首先需要准备好Hadoop集群环境。Hadoop集群环境的准备可以参考Hadoop官方文档或其他网络资料。 编写MapReduce程序MapReduce是Hadoop中一种经典的计算框架,用于处理…

    Java 2023年6月15日
    00
  • java学生管理系统界面简单实现(全)

    下面是“java学生管理系统界面简单实现(全)”的完整攻略。 简介 “java学生管理系统界面简单实现(全)”是一篇教程,它详细介绍了如何使用Java语言实现一个学生信息管理系统。该教程包含的内容主要涉及Java Swing图形界面编程、MySQL数据库使用以及Java与MySQL之间的数据交互等方面。 步骤 下面是实现这个系统的主要步骤: 1. 创建项目并…

    Java 2023年5月19日
    00
  • Idea中tomcat启动源码调试进入到tomcat内部进行调试的方法

    Idea中tomcat启动源码调试进入到tomcat内部进行调试的方法可以通过以下步骤实现: 在Idea中配置tomcat启动参数 首先需要在 Ieda 中配置 tomcat 的启动参数,具体方法为: 在Idea侧边栏中找到「Run/Debug Configuration」,点击「+」按钮,选择「Tomcat Server」,然后在「Server」选项中选择…

    Java 2023年5月19日
    00
  • 详解Java中的防抖和节流

    Title: 详解Java中的防抖和节流 防抖和节流是前端开发中常用的优化方式,可以避免用户输入事件过于频繁导致页面性能下降。在Java开发中,同样可以使用这两种技术进行优化。 什么是防抖和节流 防抖 防抖是指在用户进行操作时,只有停止操作一段时间后才会触发事件并进行相应操作。这种方式可以避免用户频繁地触发事件导致页面反应缓慢,同时也可以避免一些不必要的重复…

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