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 IO流 文件传输基础

    Java IO流 文件传输基础 IO流是Java中常用的文件传输方式,它以字节流或字符流为单位进行文件的读写操作。一般来说,文件的读入和写出都会用到IO流。本篇攻略主要介绍Java中IO流文件传输的基础知识。 基本功能 Java IO流的基本功能包括: 数据的读入与写出; 字符集的转换; 数据编码与解码; 缓冲区的使用; 字节流和字符流的转换。 文件读写 文…

    Java 2023年5月20日
    00
  • Java实现的权重算法(按权重展现广告)

    Java实现的权重算法(按权重展现广告) 什么是按权重展现广告算法? 按权重展现广告算法是一种广告广泛应用的算法,主要用来按照指定的权重展现广告,以达到给高权重的广告更多展示的目的。简而言之,权重越高的广告展示的概率就越大。 如何实现按权重展现广告算法? 在Java中,我们可以使用以下三种方式实现按权重展现广告算法: 1. 使用Random类的nextInt…

    Java 2023年5月19日
    00
  • Java面向对象选择题总结归纳

    Java面向对象选择题总结归纳 1. 答题技巧 在 Java 面向对象的选择题中,需要重点关注四个方面: 继承 多态 接口 抽象类 在做选择题时,需要结合这四个方面来推断代码的输出结果,而且需要结合实际情况进行分析,不能片面理解。 2. 继承 Java 中可以通过继承实现类的复用。在做选择题时,需要注意以下几点: 子类继承了父类的所有方法和属性,但是并不会继…

    Java 2023年5月26日
    00
  • springboot+spring data jpa实现新增及批量新增方式

    关于“springboot+spring data jpa实现新增及批量新增方式”的完整攻略,具体步骤如下: 步骤一:添加依赖 在pom.xml文件中添加Spring Data JPA的依赖: <dependency> <groupId>org.springframework.data</groupId> <arti…

    Java 2023年6月2日
    00
  • maven配置阿里仓库的方法步骤

    Maven 是一款开源项目建构工具,可以帮助我们更方便地构建、管理和发布项目。默认情况下,Maven 会从 Maven 官方仓库中下载依赖,但是有时候官方仓库的下载速度会受制于网络环境,因此我们需要配置Maven访问阿里仓库以加速依赖的下载。 以下是 Maven 配置阿里仓库的方法步骤: 1. 打开 Maven 的配置文件 Maven 的配置文件为 sett…

    Java 2023年5月20日
    00
  • 纯JSP+DWR实现三级联动下拉选择菜单实现技巧

    纯JSP+DWR实现三级联动下拉选择菜单,可以参考以下步骤: 首先创建一个JSP页面,其中需要引入DWR JavaScript库和JQuery,这里以使用CDN资源为例: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <tit…

    Java 2023年6月15日
    00
  • 带你全面认识Java中的异常处理

    带你全面认识Java中的异常处理 异常处理是 Java 程序中一个非常重要的特性,异常是指程序在运行过程中出现了未被预料的错误,在处理这些错误时就要用到异常处理机制。正确的异常处理可以增强程序健壮性,防止程序崩溃。 异常的分类 Java中异常的分类主要分为两大类:可检查的异常(checked exception)和不可检查的异常(unchecked exce…

    Java 2023年5月20日
    00
  • 关于Java中Json的各种处理

    Java中Json的处理攻略 Json是什么? JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。JSON格式可以用来描述“键值对”(key-value)类别的数据,通常用于Web服务与Web程序之间的数据交换。 Java中Json的处理方法 1. 使用JSON库 Java中有很多处理JSON的库,比如Gson、Ja…

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