2026.6.15笔记

一.MySQL安装、建表与JDBC连接实现注册功能学习笔记

1.DBUtil.java:数据库连接工具类

package com.weituotiao.util;

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

public class DBUtil {
    // 数据库连接信息(已配置为本地环境)
    private static final String URL = "jdbc:mysql://localhost:3306/weituotiao?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8mb4";
    private static final String USER = "root";
    private static final String PASSWORD = "123456";

    // 获取数据库连接
    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(URL, USER, PASSWORD);
    }

    // 关闭资源
    public static void close(Connection conn, PreparedStatement pstmt, ResultSet rs) {
        try {
            if (rs != null) rs.close();
            if (pstmt != null) pstmt.close();
            if (conn != null) conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public static void close(Connection conn, PreparedStatement pstmt) {
        close(conn, pstmt, null);
    }
}


###2.User.java:用户实体类
```java
package com.weituotiao.entity;

import java.util.Date;

public class User {
    private Integer id;
    private String username;
    private String password;
    private String role;
    private Integer newsCount;
    private Date createTime;

    // 无参构造、全参构造、Getter/Setter方法省略
}


##3.UserDAO.java:数据访问层
```java
package com.weituotiao.dao;

import com.weituotiao.entity.User;
import com.weituotiao.util.DBUtil;

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

public class UserDAO {
    public boolean register(String username, String password) {
        Connection conn = null;
        PreparedStatement pstmt = null;
        String sql = "INSERT INTO `user`(username, password) VALUES (?, ?)";

        try {
            conn = DBUtil.getConnection();
            pstmt = conn.prepareStatement(sql);
            pstmt.setString(1, username);
            pstmt.setString(2, password);
            int rows = pstmt.executeUpdate();
            return rows > 0;
        } catch (SQLException e) {
            e.printStackTrace();
            return false;
        } finally {
            DBUtil.close(conn, pstmt);
        }
    }
}
#二.1. 前期准备:数据库与表结构搭建
首先在MySQL中创建了weitoutiao数据库,核心表包含两张:

user表:存储用户信息,包含id(自增主键)、username(唯一)、password、role、news_count(发帖数)、create_time等字段;
news表:存储新闻信息,通过user_id与user表建立外键关联,包含title、content、publish_time、view_count等字段。
2. 核心实现:原生JDBC操作
(1)DBUtil工具类封装
编写DBUtil类统一管理数据库连接,核心是通过DriverManager加载MySQL驱动、获取连接,将连接参数(URL、用户名、密码)封装为常量,静态代码块加载驱动,提供getConnection()方法供外部调用,避免重复代码。

(2)用户登录功能(UserDAO)
在UserDAO中编写login方法,使用PreparedStatement预编译SQL(防止注入),通过?占位符绑定用户名和密码,执行executeQuery()获取ResultSet结果集,遍历结果集封装为User实体类返回,核心SQL:

SELECT id, username, role, news_count FROM user WHERE username=? AND password=?
(3)新闻发布(事务保证一致性)
发布新闻需要两步操作:向news表插入数据 + 更新user表的news_count,为避免“插入新闻成功但更新发帖数失败”的不一致问题,开启事务控制:

调用conn.setAutoCommit(false)关闭自动提交;
依次执行插入、更新SQL;
无异常则conn.commit()提交事务,异常则conn.rollback()回滚;
最终在finally中关闭连接、Statement等资源,保证资源释放。
posted @ 2026-06-16 21:49  一口小鑫  阅读(3)  评论(0)    收藏  举报