记录6

JavaWeb每日学习记录(第6天):数据库操作与JDBC

今天是JavaWeb学习的第九天,我主要学习了如何在JavaWeb中进行数据库操作。数据库是Web应用的核心组成部分,而JDBC(Java Database Connectivity)是Java中用于操作数据库的标准API。通过今天的实践,我掌握了如何在JavaWeb中连接数据库、执行SQL语句以及处理结果集。


一、JDBC基础与数据库连接

在JavaWeb中,JDBC是操作数据库的核心技术。通过JDBC,可以实现对数据库的增、删、改、查操作。为了更好地理解JDBC的使用,我首先学习了如何连接数据库。

示例1:连接MySQL数据库

1.引入MySQL驱动依赖(Maven配置)

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.28</version>
</dependency>

2.数据库连接工具类(DBUtil.java)
为了方便管理数据库连接,我编写了一个工具类DBUtil,用于获取和关闭数据库连接。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DBUtil {
    private static final String URL = "jdbc:mysql://localhost:3306/mydatabase?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8";
    private static final String USER = "root";
    private static final String PASSWORD = "password";

    static {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(URL, USER, PASSWORD);
    }

    public static void close(Connection conn) {
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

通过这个工具类,我可以方便地获取和关闭数据库连接,避免重复代码。


二、执行SQL语句

在JavaWeb中,可以通过JDBC执行SQL语句来操作数据库。我重点学习了如何执行INSERTUPDATEDELETESELECT语句。

示例2:用户信息的增删改查

1.创建用户表
在MySQL数据库中,我创建了一个users表,用于存储用户信息。

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    password VARCHAR(50) NOT NULL,
    email VARCHAR(100)
);

2.用户操作类(UserDAO.java)
我编写了一个用户操作类UserDAO,用于实现用户信息的增删改查。

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class UserDAO {
    // 添加用户
    public void addUser(String username, String password, String email) {
        String sql = "INSERT INTO users (username, password, email) VALUES (?, ?, ?)";
        try (Connection conn = DBUtil.getConnection();
             PreparedStatement ps = conn.prepareStatement(sql)) {
            ps.setString(1, username);
            ps.setString(2, password);
            ps.setString(3, email);
            ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    // 删除用户
    public void deleteUser(int id) {
        String sql = "DELETE FROM users WHERE id = ?";
        try (Connection conn = DBUtil.getConnection();
             PreparedStatement ps = conn.prepareStatement(sql)) {
            ps.setInt(1, id);
            ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    // 更新用户信息
    public void updateUser(int id, String username, String password, String email) {
        String sql = "UPDATE users SET username = ?, password = ?, email = ? WHERE id = ?";
        try (Connection conn = DBUtil.getConnection();
             PreparedStatement ps = conn.prepareStatement(sql)) {
            ps.setString(1, username);
            ps.setString(2, password);
            ps.setString(3, email);
            ps.setInt(4, id);
            ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    // 查询所有用户
    public void listUsers() {
        String sql = "SELECT * FROM users";
        try (Connection conn = DBUtil.getConnection();
             PreparedStatement ps = conn.prepareStatement(sql);
             ResultSet rs = ps.executeQuery()) {
            while (rs.next()) {
                System.out.println("ID: " + rs.getInt("id") +
                                   ", Username: " + rs.getString("username") +
                                   ", Email: " + rs.getString("email"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

3.测试数据库操作
main方法中,我测试了用户信息的增删改查操作。

public class Main {
    public static void main(String[] args) {
        UserDAO userDAO = new UserDAO();

        // 添加用户
        userDAO.addUser("Alice", "123", "alice@example.com");
        userDAO.addUser("Bob", "456", "bob@example.com");

        // 查询所有用户
        userDAO.listUsers();

        // 更新用户信息
        userDAO.updateUser(1, "Alice", "123", "alice_new@example.com");

        // 删除用户
        userDAO.deleteUser(2);

        // 查询所有用户
        userDAO.listUsers();
    }
}

通过这些操作,我成功实现了用户信息的增删改查,并验证了数据库操作的正确性。


三、在Web应用中使用JDBC

在Web应用中,通常需要结合Servlet和JSP来实现数据库操作。我编写了一个简单的用户管理功能,用户可以通过Web页面添加、删除和查看用户信息。

示例3:用户管理功能

1.添加用户Servlet(AddUserServlet.java)

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/addUser")
public class AddUserServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String email = request.getParameter("email");

        UserDAO userDAO = new UserDAO();
        userDAO.addUser(username, password, email);

        response.sendRedirect("listUsers");
    }
}

2.用户列表Servlet(ListUsersServlet.java)

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

@WebServlet("/listUsers")
public class ListUsersServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        UserDAO userDAO = new UserDAO();
        List<User> users = new ArrayList<>();
        try (ResultSet rs = userDAO.listUsers()) {
            while (rs.next()) {
                User user = new User(
                        rs.getInt("id"),
                        rs.getString("username"),
                        rs.getString("password"),
                        rs.getString("email")
                );
                users.add(user);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }

        request.setAttribute("users", users);
        request.getRequestDispatcher("/userList.jsp").forward(request, response);
    }
}

3.用户列表页面(userList.jsp)

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
    <title>用户列表</title>
</head>
<body>
    <h1>用户列表</h1>
    <table border="1">
        <tr>
            <th>ID</th>
            <th>用户名</th>
            <th>邮箱</th>
            <th>操作</th>
        </tr>
        <c:forEach items="${users}" var="user">
            <tr>
                <td>${user.id}</td>
                <td>${user.username}</td>
                <td>${user.email}</td>
                <td>
                    <a href="deleteUser?id=${user.id}">删除</a>
                </td>
            </tr>
        </c:forEach>
    </table>
</body>
</html>

通过这些代码,我实现了一个简单的用户管理系统,用户可以通过Web页面添加、删除和查看用户信息。


四、总结

今天我学习了JavaWeb中的数据库操作。通过JDBC,我掌握了如何连接数据库、执行SQL语句以及处理结果集。同时,我将JDBC与Servlet、JSP结合,实现了一个简单的用户管理系统,进一步巩固了数据库操作的使用。

数据库操作是Web应用的核心功能

posted @ 2025-02-20 19:10  马瑞鑫03  阅读(8)  评论(0)    收藏  举报