文章目录
一、为什么选择MySQL?(别再用Excel了!)
看到很多同学还在用Excel管理学生信息(头秃警告⚠️),每次新增数据都要手动调整格式,查询更是要按半天Ctrl+F。是时候升级你的管理方式了!基于MySQL的学生信息管理系统可以实现:
- 数据秒级查询(姓名/学号一键定位)
- 自动生成统计报表(再也不用算平均分算到眼瞎)
- 多用户协同管理(班主任/教务主任各司其职)
- 数据安全备份(再也不怕电脑突然蓝屏)
二、开发环境准备(5分钟搞定)
- 开发工具:Eclipse/IntelliJ IDEA(墙裂推荐后者)
- 数据库:MySQL Community Server 8.0+(社区版完全免费)
- 连接驱动:mysql-connector-java-8.0.xx.jar
- JDK版本:Java11及以上
(重要提醒)安装MySQL时一定要记住root密码!建议创建专用账号:
CREATE USER 'school_admin'@'localhost' IDENTIFIED BY 'Admin123!';
GRANT ALL PRIVILEGES ON student_db.* TO 'school_admin'@'localhost';
三、核心功能模块拆解(附关键代码)
1. 登录模块(防SQL注入版)
public boolean login(String username, String password) {
String sql = "SELECT * FROM users WHERE username=? AND password=?";
try (Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASS);
PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setString(1, username);
pstmt.setString(2, encrypt(password)); // 密码加密函数
ResultSet rs = pstmt.executeQuery();
return rs.next();
} catch (SQLException e) {
System.out.println("登录异常:" + e.getMessage());
return false;
}
}
(避坑指南)一定要用PreparedStatement!直接拼接SQL字符串分分钟被注入攻击!
2. 学生信息管理(CRUD三连)
批量导入技巧:使用LOAD DATA INFILE比逐条insert快100倍!
LOAD DATA INFILE '/var/lib/mysql-files/students.csv'
INTO TABLE student_info
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;
3. 成绩处理模块(事务处理)
public void updateScores(List<Score> scores) throws SQLException {
Connection conn = null;
try {
conn = dataSource.getConnection();
conn.setAutoCommit(false); // 开启事务
String sql = "UPDATE scores SET math=?, english=? WHERE stu_id=?";
PreparedStatement pstmt = conn.prepareStatement(sql);
for (Score s : scores) {
pstmt.setInt(1, s.getMath());
pstmt.setInt(2, s.getEnglish());
pstmt.setString(3, s.getStuId());
pstmt.addBatch();
}
pstmt.executeBatch();
conn.commit(); // 提交事务
} catch (SQLException e) {
if(conn != null) conn.rollback(); // 回滚!!!
throw e;
} finally {
if(conn != null) conn.close();
}
}
(血泪教训)成绩修改必须用事务!避免部分成功部分失败的数据混乱!
四、性能优化技巧(让查询飞起来)
-
索引策略:
ALTER TABLE student_info ADD INDEX idx_class (class_id), -- 班级查询 ADD INDEX idx_name (name(10)); -- 姓名前缀索引
-
查询缓存:在my.cnf中设置
query_cache_type = 1 query_cache_size = 64M
-
分表方案:按年级分表
CREATE TABLE scores_2023 LIKE scores_template; CREATE TABLE scores_2024 LIKE scores_template;
五、常见问题排雷(新手必看)
-
中文乱码问题:
- 创建数据库时指定字符集:
CREATE DATABASE student_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- JDBC连接字符串加上参数:
jdbc:mysql://localhost:3306/student_db?useUnicode=true&characterEncoding=UTF-8
- 创建数据库时指定字符集:
-
时区异常报错:
在连接URL后追加时区参数:&serverTimezone=Asia/Shanghai
-
连接池耗尽:
使用HikariCP配置连接池:HikariConfig config = new HikariConfig(); config.setJdbcUrl("jdbc:mysql://localhost/student_db"); config.setUsername("school_admin"); config.setPassword("Admin123!"); config.setMaximumPoolSize(20); // 根据实际情况调整 HikariDataSource ds = new HikariDataSource(config);
六、项目升级方向(高手进阶)
- 集成Redis缓存热点数据(如班级排名)
- 使用MyBatis-Plus简化DAO层开发
- 接入Spring Security实现权限控制
- 开发微信小程序查询端
- 使用Echarts生成可视化报表
(终极建议)先跑通基础功能再考虑扩展!不要一开始就想着做完美架构,重要的是先让系统跑起来!遇到问题欢迎在评论区交流~