不少新手学完 JSP 基础语法后,一到整合数据库就卡壳:写了半天代码连不上数据库,好不容易连上了查询数据又报错,想做个简单的用户管理系统却不知道从哪下手。其实啊,JSP 和 MySQL 整合是动态网页开发的核心,学会了就能做带数据存储的实用项目。今天兔子哥就带大家做个完整案例 —— 用户管理系统,从数据库设计到 JSP 页面开发全流程讲解,保证零基础也能跟着做出来。
准备工作:整合数据库前,这些 “装备” 得备好
在开始之前,咱们得把基础工具准备好,就像做饭前要先买菜一样,缺一样都做不成。
第一步:装 MySQL 数据库,数据得有地方存
首先得有 MySQL 数据库,新手推荐装 MySQL 8.0 版本,官网能直接下载。安装时记得设个简单好记的密码,比如 “root123”,别设太复杂回头忘了。装完后用 Navicat 或 MySQL Workbench 连接测试一下,能连上说明数据库没问题。
然后咱们创建一个用于案例的数据库和表。打开 MySQL 命令行,输入这些命令:
sql
CREATE DATABASE jspdemo; -- 创建数据库USE jspdemo; -- 切换到这个数据库-- 创建用户表CREATE TABLE user (id INT PRIMARY KEY AUTO_INCREMENT, -- 自增IDusername VARCHAR(50) NOT NULL UNIQUE, -- 用户名,唯一password VARCHAR(50) NOT NULL, -- 密码age INT, -- 年龄email VARCHAR(100) -- 邮箱);-- 插两条测试数据INSERT INTO user(username, password, age, email)VALUES ('zhangsan', '123456', 20, 'zs@test.com'),('lisi', '654321', 22, 'ls@test.com');执行完这些,数据库和表就建好了,后面咱们的 JSP 页面就要操作这张表的数据。
第二步:下 MySQL 驱动包,JSP 和数据库得 “搭个桥”
JSP 要操作 MySQL,得有个驱动包(JDBC 驱动)当 “桥梁”。去 MySQL 官网下载 “MySQL Connector/J”,选对应版本的 JAR 包,比如 8.0.30 版本。下载后不用安装,把 JAR 包复制到咱们 JSP 项目的 “WebContent/WEB-INF/lib” 文件夹下,Eclipse 会自动识别这个驱动。
有朋友问,驱动包放错地方会怎样?放错了 JSP 会提示 “ClassNotFoundException”,根本连不上数据库,所以这步一定要仔细,lib 文件夹别找错了。
核心步骤:写个 JDBC 工具类,连接数据库更方便
每次操作数据库都要写连接代码太麻烦,咱们封装一个 JDBC 工具类,以后连接、关闭数据库直接调用就行,能省不少事。
工具类代码怎么写?关键参数别填错
新建一个 Java 类,命名为 “DBUtil.java”,放在 “src/com/util” 包下(没有包就新建一个):
java
package com.util;import java.sql.*;public class DBUtil {// 数据库连接参数,根据自己的情况改private static String url = "jdbc:mysql://localhost:3306/jspdemo?useSSL=false&serverTimezone=UTC";private static String user = "root";private static String password = "root123"; // 你设的密码private static String driver = "com.mysql.cj.jdbc.Driver";// 加载驱动static {try {Class.forName(driver);} catch (ClassNotFoundException e) {e.printStackTrace();System.out.println("驱动加载失败!");}}// 获取连接public static Connection getConnection() throws SQLException {return DriverManager.getConnection(url, user, password);}// 关闭资源public static void close(Connection conn, PreparedStatement pstmt, ResultSet rs) {if (rs != null) {try { rs.close(); } catch (SQLException e) { e.printStackTrace(); }}if (pstmt != null) {try { pstmt.close(); } catch (SQLException e) { e.printStackTrace(); }}if (conn != null) {try { conn.close(); } catch (SQLException e) { e.printStackTrace(); }}}}这里有几个参数必须填对:url 里的 “jspdemo” 是咱们创建的数据库名,user 是 MySQL 用户名(一般是 root),password 是你安装时设的密码。刚开始我也犯过这错,后来发现是 URL 里的数据库名写错了,改完立马就连上了。
为什么要封装工具类?不封装会怎样?
封装工具类能减少重复代码,每次连接数据库只要调用
getConnection(),用完调用close()关闭就行。要是不封装,每个 JSP 页面都得写连接代码,不仅麻烦,还容易漏关资源导致数据库连接耗尽,到时候连数据库都连不上了。实战案例:用户管理系统开发,功能一步步实现
咱们做个简单的用户管理系统,包含三个功能:用户登录、查看用户列表、添加新用户。每个功能对应一个 JSP 页面,一步步来做。
功能一:用户登录 —— 验证用户名密码是否正确
首先做登录页面(login.jsp),用户输入用户名密码,提交到后台验证:
jsp
<%@ page contentType="text/html; charset=UTF-8" %>然后写验证逻辑(loginCheck.jsp),查询数据库比对用户名密码:
jsp
<%@ page import="java.sql.*, com.util.DBUtil" %><%@ page contentType="text/html; charset=UTF-8" %><%String username = request.getParameter("username");String password = request.getParameter("password");Connection conn = null;PreparedStatement pstmt = null;ResultSet rs = null;boolean loginSuccess = false;try {conn = DBUtil.getConnection(); // 获取连接// SQL查询语句,用?占位符防止注入String sql = "SELECT * FROM user WHERE username=? AND password=?";pstmt = conn.prepareStatement(sql);pstmt.setString(1, username); // 给第一个?赋值pstmt.setString(2, password); // 给第二个?赋值rs = pstmt.executeQuery(); // 执行查询if (rs.next()) { // 有结果说明登录成功loginSuccess = true;session.setAttribute("loginUser", username); // 存登录状态}} catch (SQLException e) {e.printStackTrace();out.println("登录失败,数据库错误!");} finally {DBUtil.close(conn, pstmt, rs); // 一定要关闭资源}if (loginSuccess) {response.sendRedirect("userList.jsp"); // 登录成功跳用户列表} else {out.println("用户名或密码错误!返回");}%>这里用
PreparedStatement代替Statement,能防止 SQL 注入,安全性更高,新手一定要养成这习惯。功能二:查看用户列表 —— 从数据库查数据展示到页面
登录成功后跳转到用户列表页(userList.jsp),显示所有用户信息:
jsp
<%@ page import="java.sql.*, com.util.DBUtil" %><%@ page contentType="text/html; charset=UTF-8" %><%// 判断是否登录,没登录就跳回登录页if (session.getAttribute("loginUser") == null) {response.sendRedirect("login.jsp");return;}%>用户列表
ID 用户名 年龄 邮箱 <%Connection conn = null;PreparedStatement pstmt = null;ResultSet rs = null;try {conn = DBUtil.getConnection();String sql = "SELECT * FROM user";pstmt = conn.prepareStatement(sql);rs = pstmt.executeQuery();while (rs.next()) { // 循环遍历结果集%><%=rs.getInt("id")%> <%=rs.getString("username")%> <%=rs.getInt("age")%> <%=rs.getString("email")%> <%}} catch (SQLException e) {e.printStackTrace();out.println("查询失败!");} finally {DBUtil.close(conn, pstmt, rs);}%>
添加新用户这段代码先判断用户是否登录,没登录不让看列表,然后从数据库查询所有用户,用循环把数据显示在表格里,很直观吧?
功能三:添加新用户 —— 往数据库插入数据
做个添加用户页面(addUser.jsp),提交表单保存到数据库:
jsp
<%@ page contentType="text/html; charset=UTF-8" %>然后写处理添加的逻辑(addUserCheck.jsp):
jsp
<%@ page import="java.sql.*, com.util.DBUtil" %><%@ page contentType="text/html; charset=UTF-8" %><%String username = request.getParameter("username");String password = request.getParameter("password");String ageStr = request.getParameter("age");int age = ageStr.isEmpty() ? 0 : Integer.parseInt(ageStr); // 处理空值String email = request.getParameter("email");Connection conn = null;PreparedStatement pstmt = null;try {conn = DBUtil.getConnection();String sql = "INSERT INTO user(username, password, age, email) VALUES(?, ?, ?, ?)";pstmt = conn.prepareStatement(sql);pstmt.setString(1, username);pstmt.setString(2, password);pstmt.setInt(3, age);pstmt.setString(4, email);int rows = pstmt.executeUpdate(); // 执行插入,返回影响行数if (rows > 0) {response.sendRedirect("userList.jsp"); // 添加成功跳列表} else {out.println("添加失败!返回");}} catch (SQLException e) {e.printStackTrace();out.println("添加失败,可能用户名已存在!返回");} finally {DBUtil.close(conn, pstmt, null);}%>这里要注意处理可能的异常,比如用户名重复(因为表中设了 UNIQUE),所以 catch 块里给了提示。
常见问题:整合时最容易踩的坑,教你怎么解决
坑一:连不上数据库,提示 “Communications link failure”
这多半是 URL、用户名或密码错了。检查 DBUtil 里的 url 是否正确,特别是数据库名;用户名是不是 root;密码是不是你设的那个,别输错了。还有 MySQL 服务得启动着,没启动也连不上。
坑二:查询或插入时提示 “Column count doesn't match value count”
这是 SQL 语句里的字段数和值的数量对不上,比如插入时写了 4 个字段却传了 3 个值。仔细核对 SQL 里的?数量和 setXxx 的次数,保证一样多。
坑三:中文乱码,数据库里的中文显示问号
在 DBUtil 的 url 里加
characterEncoding=UTF-8,改成:url = "jdbc:mysql://localhost:3306/jspdemo?useSSL=false&serverTimezone=UTC&characterEncoding=UTF-8";同时 JSP 页面顶部加
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>。个人心得:多动手试,问题一个个解决
兔子哥刚开始学整合的时候,连数据库连了三天才成功,一会儿驱动包没放对,一会儿密码记错了,后来发现只要耐心排查每个参数,其实没那么难。做这个案例时,建议大家一步一步来:先保证数据库能连上,再做查询功能,最后做添加功能,每个功能跑通了再往下走。
其实 JSP 和 MySQL 整合的核心就是 “用 JDBC 操作数据库,用 JSP 展示数据”,掌握了这个逻辑,不管是做用户管理、商品列表还是博客系统,都能举一反三。遇到报错别慌,先看错误提示里的关键词,比如 “SQLSyntaxErrorException” 就是 SQL 语句写错了,“NullPointerException” 可能是没获取到参数,针对性排查就行。
希望这个案例能帮到刚开始学动态网页开发的朋友,动手做起来比光看教程有用多了。做完这个案例,你会发现自己已经能做简单的实用项目了,成就感满满~
标签: 'zhangsan' 数据库
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~