实验 JDBC增删查改操作
一、实验目的
1、掌握JDBC增删查改MySQL或者sql server数据库表的方法。
2、在增删查改页面间跳转
二、实验内容
在MySQL或者sql server中创建一张表,之后使用JDBC进行增删查改。(功能不限),包括:
(1)表设计
(2)JDBC连接到MySQL 或者sql server
(3)suc.jsp页面列出表中所有记录。每行记录后面有删除链接,链接中附加username字段,单击后跳转到delete.jsp。另有插入、查询按钮,单击后分别跳转到insert.jsp、query.jsp。
(4)delete.jsp页面:从URL中提取username字段,删除数据库表中该username对应的记录。删除成功后,显示删除成功,之后重定向到list.jsp。
(5)insert.jsp:设计表单,单击提交按钮后,插入到数据库表中。插入成功后,显示插入成功, 之后重定向到list.jsp。
(6)query.jsp:设计表单,比如查询姓名,单击查询按钮后,检索数据库表记录,用列表显示结果。
三、实验成果
(按序编号列出各项,截图代码及运行结果以验证)
1、数据库表设计截图
-- 创建表
CREATE TABLE UserInfo (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL,
password VARCHAR(50) NOT NULL,
email VARCHAR(100),
age INT
)default CHARSET=utf8;
2、JDBC连接数据库
编写一个Java类,用于连接到MySQL数据库。在该类中,实现数据库连接的方法,以及增删查改的相关方法。
package com.wmc.javabean;
/**
* @version 1.0
* @Author wmc
* @Date 2023/12/6 17:01
* @注释
*/
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBConnector {
static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
throw new RuntimeException("Unable to load MySQL JDBC driver. Check your classpath.");
}
}
private static final String JDBC_URL = "jdbc:mysql://localhost:3306/javaweb?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC";
private static final String JDBC_USER = "root";
private static final String JDBC_PASSWORD = "123456";
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASSWORD);
}
}
3、suc.jsp页面
在suc.jsp页面中,列出表中所有记录,并提供删除、插入、查询的链接。
<%--
Created by IntelliJ IDEA.
User: Lenovo
Date: 2023/12/6
Time: 17:03
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.sql.*" %>
<%@ page import="com.wmc.javabean.DBConnector" %>
<%
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
try {
connection = DBConnector.getConnection();
statement = connection.createStatement();
resultSet = statement.executeQuery("SELECT * FROM UserInfo");
while (resultSet.next()) {
out.println("ID: " + resultSet.getInt("id") + "<br>");
out.println("Username: " + resultSet.getString("username") + "<br>");
out.println("Password: " + resultSet.getString("password") + "<br>");
out.println("Email: " + resultSet.getString("email") + "<br>");
out.println("Age: " + resultSet.getInt("age") + "<br>");
// Add delete link
out.println("<a href='/JdbcCrud/delete.jsp?username=" + resultSet.getString("username") + "'>删除</a><br><br>");
}
%>
<a href="/JdbcCrud/insert.jsp">插入</a><br>
<a href="/JdbcCrud/query.jsp">查询</a><br>
<%
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (resultSet != null) resultSet.close();
if (statement != null) statement.close();
if (connection != null) connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
%>
4、delete.jsp页面
在delete.jsp页面中,从URL中提取username字段,删除数据库表中该username对应的记录。
<%--
Created by IntelliJ IDEA.
User: Lenovo
Date: 2023/12/6
Time: 17:08
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.sql.*" %>
<%@ page import="com.wmc.javabean.DBConnector " %>
<%
String username = request.getParameter("username");
if (username != null) {
Connection connection = null;
PreparedStatement preparedStatement = null;
try {
connection = DBConnector.getConnection();
String deleteQuery = "DELETE FROM UserInfo WHERE username = ?";
preparedStatement = connection.prepareStatement(deleteQuery); // 防止SQL注入
preparedStatement.setString(1, username);
int rowsAffected = preparedStatement.executeUpdate();
if (rowsAffected > 0) {
out.println("删除成功!");
response.sendRedirect("suc.jsp");
} else {
out.println("删除失败!");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (preparedStatement != null) preparedStatement.close();
if (connection != null) connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
%>
5、insert.jsp
在insert.jsp页面中,设计表单,插入数据到数据库表中。
<%--
Created by IntelliJ IDEA.
User: Lenovo
Date: 2023/12/6
Time: 17:11
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ page import="java.sql.*" %>
<%@ page import="com.wmc.javabean.DBConnector " %>
<!-- 前端表单输入框 -->
<%@page language="java" pageEncoding="utf-8"%>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>插入</title>
</head>
<body>
<form action="insert.jsp" method="post">
用户名: <input type="text" name="username" required><br>
密码: <input type="password" name="password" required><br>
邮箱: <input type="email" name="email"><br>
年龄: <input type="number" name="age"><br>
<input type="submit" value="Insert">
</form>
</body>
</html>
<%
if (request.getMethod().equals("POST")) {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
String username = request.getParameter("username");
String password = request.getParameter("password");
String email = request.getParameter("email");
int age = Integer.parseInt(request.getParameter("age"));
Connection connection = null;
PreparedStatement preparedStatement = null;
try {
connection = DBConnector.getConnection();
String insertQuery = "INSERT INTO UserInfo (username, password, email, age) VALUES (?, ?, ?, ?)";
preparedStatement = connection.prepareStatement(insertQuery);
preparedStatement.setString(1, username);
preparedStatement.setString(2, password);
preparedStatement.setString(3, email);
preparedStatement.setInt(4, age);
int rowsAffected = preparedStatement.executeUpdate();
if (rowsAffected > 0) {
out.println("插入成功!");
response.sendRedirect("suc.jsp");
} else {
out.println("插入失败!");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (preparedStatement != null) preparedStatement.close();
if (connection != null) connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
%>
6、query.jsp
在query.jsp页面中,设计表单,查询数据库表记录。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.sql.*" %>
<%@ page import="com.wmc.javabean.DBConnector" %>
<!-- HTML form for query -->
<form action="query.jsp" method="get">
通过用户名查询: <input type="text" name="username" required>
<input type="submit" value="查询">
</form>
<%
if ("GET".equals(request.getMethod())) {
String username = request.getParameter("username");
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
connection = DBConnector.getConnection();
String query = "SELECT * FROM userInfo WHERE username = ?";
preparedStatement = connection.prepareStatement(query);
preparedStatement.setString(1, username);
resultSet = preparedStatement.executeQuery();
// Move resultSet.next() outside the loop to check if there are results
if (resultSet.next()) {
// Print the first row of the result
out.println("ID: " + resultSet.getInt("id") + "<br>");
out.println("Username: " + resultSet.getString("username") + "<br>");
out.println("Password: " + resultSet.getString("password") + "<br>");
out.println("Email: " + resultSet.getString("email") + "<br>");
out.println("Age: " + resultSet.getInt("age") + "<br><br>");
// Loop through the remaining rows
while (resultSet.next()) {
out.println("ID: " + resultSet.getInt("id") + "<br>");
out.println("Username: " + resultSet.getString("username") + "<br>");
out.println("Password: " + resultSet.getString("password") + "<br>");
out.println("Email: " + resultSet.getString("email") + "<br>");
out.println("Age: " + resultSet.getInt("age") + "<br><br>");
}
} else {
out.println("未找到匹配的记录。");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (resultSet != null) resultSet.close();
if (preparedStatement != null) preparedStatement.close();
if (connection != null) connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
%>
运行结果:
主页面:
点击插入:
点击查询:
删除:
三、实验心得
实验总结: 数据库表设计:
了解如何设计数据库表,包括字段的类型、约束、主键等。 设计良好的数据库表结构对数据管理和操作至关重要。 JDBC连接数据库:
了解如何使用JDBC连接MySQL或SQL Server数据库。 JDBC提供了Connection、PreparedStatement等类,用于执行SQL语句。 页面间跳转:
学会使用JSP页面创建用户界面,通过按钮和链接实现页面间的跳转。 使用response.sendRedirect()实现页面跳转。 数据的增删查改:
实现了基本的增删查改功能,了解如何使用SQL语句进行数据操作。 使用PreparedStatement防止SQL注入攻击。 异常处理:
学会在JSP中处理SQL异常,保证程序的稳定性。 使用try-catch块捕获异常,及时定位问题。 页面显示与编码:
确保前端页面和后端代码的字符编码一致,避免中文乱码问题。 设置页面的contentType为UTF-8。 心得体会: 理解数据库设计原则:
学会设计规范的数据库表结构,合理选择字段类型,设定适当的约束。 熟悉JDBC基础操作:
通过实践掌握了JDBC的基本操作,包括连接数据库、执行SQL语句、处理结果集等。 强化编程实践:
实验中涉及了前后端的交互,强化了编程实践和代码调试的能力。 异常处理重要性:
了解异常处理的重要性,能够在程序中添加合适的异常处理代码,增强程序的健壮性。 界面交互设计:
通过实现页面跳转和用户交互,理解了如何设计友好的界面,提升用户体验。 对整个开发流程的认识:
了解了从数据库设计到前后端交互再到页面显示的整个开发流程,对于全栈开发有了更全面的认识。
总体而言,通过实践项目,你应该对JDBC的基本操作、数据库设计和前后端交互有了更深入的理解,这对于进一步学习和实践Java Web开发是很有帮助的。