JavaWeb-05-JSP规范-05-在线考试管理系统02-试题信息管理
JavaWeb-05-JSP规范-05-在线考试管理系统02-试题信息管理
用户信息管理模块传送门:用户信息管理
考试管理模块传送门:考试管理
本次项目文件:点击下载
提取码:922w
1.目标
试题信息管理模块
2.功能实现
- 试题信息添加功能
- 试题信息查询功能
- 试题信息更新功能
- 试题信息删除功能
3.准备工作
3.1创建试题信息表(t_question.frm)
drop table if exists t_question;
create table t_question(
questionId int primary key auto_increment,#题目编号
subject varchar(255),#题目 1+1=?
optionA varchar(20), #选项A 1
optionB varchar(20), #选项B 4
optionC varchar(20), #选项C 2
optionD varchar(20), #选项D 5
answer char(1) #正确答案 C
);
insert into t_question(subject,optionA,optionB,optionC,optionD,answer) value('1+1=?','1','4','2','5','C');
select * from t_question;
3.2创建试题信息表对应实体类
package com.tsccg.entity;
/**
* @Author: TSCCG
* @Date: 2021/08/23 22:59
* 试题信息表对应实体类
*/
public class Question {
private Integer questionId;
private String subject;
private String optionA;
private String optionB;
private String optionC;
private String optionD;
private String answer;
/**
* 无参构造
*/
public Question() {
}
/**
* 有参构造
* @param questionId 题目编号
* @param subject 题目
* @param optionA 选项A
* @param optionB 选项B
* @param optionC 选项C
* @param optionD 选项D
* @param answer 正确答案
*/
public Question(Integer questionId, String subject, String optionA,
String optionB, String optionC, String optionD, String answer) {
this.questionId = questionId;
this.subject = subject;
this.optionA = optionA;
this.optionB = optionB;
this.optionC = optionC;
this.optionD = optionD;
this.answer = answer;
}
public Integer getQuestionId() {
return questionId;
}
public void setQuestionId(Integer questionId) {
this.questionId = questionId;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getOptionA() {
return optionA;
}
public void setOptionA(String optionA) {
this.optionA = optionA;
}
public String getOptionB() {
return optionB;
}
public void setOptionB(String optionB) {
this.optionB = optionB;
}
public String getOptionC() {
return optionC;
}
public void setOptionC(String optionC) {
this.optionC = optionC;
}
public String getOptionD() {
return optionD;
}
public void setOptionD(String optionD) {
this.optionD = optionD;
}
public String getAnswer() {
return answer;
}
public void setAnswer(String answer) {
this.answer = answer;
}
}
3.3JdbcUtil工具类
package com.tsccg.util;
import java.sql.*;
import java.util.ResourceBundle;
/**
* @Author: TSCCG
* @Date: 2021/08/14 15:32
* JDBC工具类
* 1.注册驱动*
* 2.获取连接*
* 3.获取预编译的数据库操作对象
* 4.执行sql
* 5.处理查询结果集
* 6.关闭资源*
*/
public class JdbcUtil {
/**
* 创建资源绑定器对象
*/
private static final ResourceBundle BUNDLE = ResourceBundle.getBundle("JDBC");
//1.注册驱动
static {
try {
Class.forName(BUNDLE.getString("driverName"));
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 2.获取连接
* @return 返回连接对象
* @throws SQLException 将SQLException异常上抛
*/
public static Connection connect() throws SQLException {
return DriverManager.getConnection(BUNDLE.getString("url"),
BUNDLE.getString("user"),BUNDLE.getString("password"));
}
/**
* 6.释放资源
* @param conn 连接对象
* @param stmt 数据库操作对象
* @param rs 查询结果集对象
*/
public static void closeAll(Connection conn, Statement stmt, ResultSet rs) {
if(rs != null) {
try {
rs.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if(stmt != null) {
try {
stmt.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if(conn != null) {
try {
conn.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}
4.试题信息添加功能
4.1搭建前台页面【question_add】
在web目录下创建question_add.html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>添加试题信息</title>
<style type="text/css">
* {
font-size: 20px;
}
h2 {
color: green;
font-size: 40px;
}
</style>
</head>
<body>
<center>
<form action="http://localhost:8080/MyWeb/question/add" method="GET">
<h2>添加试题信息</h2>
<table border="1" cellpadding="0" cellspacing="0">
<!-- 题目 -->
<tr>
<td>题目:</td>
<td><input type="text" name="subject"></td>
</tr>
<!-- 选项A -->
<tr>
<td>选项A:</td>
<td><input type="text" name="optionA"></td>
</tr>
<!-- 选项B -->
<tr>
<td>选项B:</td>
<td><input type="text" name="optionB"></td>
</tr>
<!-- 选项C -->
<tr>
<td>选项C:</td>
<td><input type="text" name="optionC"></td>
</tr>
<!-- 选项D -->
<tr>
<td>选项D:</td>
<td><input type="text" name="optionD"></td>
</tr>
<!-- 正确答案 -->
<tr>
<td>正确答案:</td>
<td>
<label>
<input type="radio" name="answer" value="A">A
</label>
<label>
<input type="radio" name="answer" value="B">B
</label>
<label>
<input type="radio" name="answer" value="C">C
</label>
<label>
<input type="radio" name="answer" value="D">D
</label>
</td>
</tr>
<!-- 提交 -->
<tr>
<td><input type="submit" value="添加试题"></td>
<td><input type="reset" value="重置"></td>
</tr>
</table>
</form>
</center>
</body>
</html>
4.2编写Dao类【QuestionDao】
此类的主要作用是通过JDBC连接数据库,对数据库表的数据进行操作。
这里先实现添加功能。
package com.tsccg.dao;
import com.tsccg.entity.Question;
import com.tsccg.util.JdbcUtil;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
/**
* @Author: TSCCG
* @Date: 2021/08/23 23:32
* 通过jdbc连接数据库,对t_question表中数据进行操作
*/
public class QuestionDao {
/**
* 1.添加试题信息
* @param question 需要添加的试题信息
* @return 返回添加结果,成功返回true,失败返回false
*/
public boolean questionAdd(Question question) {
Connection conn = null;
PreparedStatement ps = null;
boolean result = false;
try {
conn = JdbcUtil.connect();
String sql = "insert into t_question(subject,optionA,optionB,optionC,optionD,answer) vlaue(?,?,?,?,?,?)";
//获取预编译的数据库操作对象
ps = conn.prepareStatement(sql);
ps.setString(1,question.getSubject());
ps.setString(2,question.getOptionA());
ps.setString(3,question.getOptionB());
ps.setString(4,question.getOptionC());
ps.setString(5,question.getOptionD());
ps.setString(6,question.getAnswer());
//如果插入成功,那么ps.executeUpdate()返回的值一定大于0
if (ps.executeUpdate() > 0) {
result = true;
}
} catch(SQLException e) {
e.printStackTrace();
} finally {
JdbcUtil.closeAll(conn,ps,null);
}
return result;
}
}
4.3编写Servlet接口实现类【QuestionAddServlet】
package com.tsccg.controller;
import com.tsccg.dao.QuestionDao;
import com.tsccg.entity.Question;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @Author: TSCCG
* @Date: 2021/08/24 00:05
* 实现添加试题信息功能
*/
public class QuestionAddServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.定义
String subject,optionA,optionB,optionC,optionD,answer;
Question question = null;
QuestionDao dao = new QuestionDao();
//2.通过请求对象获取请求头中请求参数,也就是试题信息
subject = request.getParameter("subject");
optionA = request.getParameter("optionA");
optionB = request.getParameter("optionB");
optionC = request.getParameter("optionC");
optionD = request.getParameter("optionD");
answer = request.getParameter("answer");
//将试题信息放入实体类对象中
question = new Question(null,subject,optionA,optionB,optionC,optionD,answer);
//3.调用Dao类,将试题信息传进去,然后将insert命令推送到数据库服务器,返回执行结果
boolean result = dao.questionAdd(question);
//4.通过请求转发,向Tomcat请求调用info.jsp,将处理结果写入响应体
if (result) {
request.setAttribute("info","试题添加成功");
} else {
request.setAttribute("info","试题添加失败");
}
request.getRequestDispatcher("/info.jsp").forward(request,response);
}
}
4.4编写JSP文件【info.jsp】
在web目录下新建info.jsp,从当前请求作用域对象中读取试题添加处理结果,然后将处理结果结合html代码写入响应体内。
<%@ page import="static java.awt.SystemColor.info" %><%--
Created by IntelliJ IDEA.
User: Admin
Date: 2021/8/24
Time: 0:39
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>结果</title>
</head>
<body>
<center>
<%
//从当前请求作用域对象中读取处理信息
String result = (String)request.getAttribute("info");
%>
<%--展示处理信息--%>
<font style="font-size: 30px" color="red">
<%=result%>
</font>
</center>
</body>
</html>
4.5在导航页的菜单栏增加试题信息管理按钮
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>left</title>
</head>
<body>
<ul>
<li>用户信息管理
<ol>
<li><a href="/MyWeb/user_add.html" target="right">用户信息注册</a></li>
<li><a href="/MyWeb/user/find" target="right">用户信息查询</a></li>
</ol>
</li>
<li>试题信息管理
<ol>
<li><a href="/MyWeb/question_add.html" target="right">试题信息添加</a></li>
<li><a href="/MyWeb/question/find" target="right">试题信息查询</a></li>
</ol>
</li>
<li>考试管理</li>
</ul>
</body>
</html>
4.6测试添加功能
5.试题信息查询功能
5.1在【QuestionDao】中添加查询方法
package com.tsccg.dao;
import com.tsccg.entity.Question;
import com.tsccg.util.JdbcUtil;
import org.junit.Test;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
/**
* @Author: TSCCG
* @Date: 2021/08/23 23:32
* 通过jdbc连接数据库,对t_question表中数据进行操作
*/
public class QuestionDao {
/**
* 1.添加试题信息
* @param question 需要添加的试题信息
* @return 返回添加结果,成功返回true,失败返回false
*/
public boolean questionAdd(Question question) {...}
/**
* 2.查询全部试题信息
* @return 返回存放试题信息的List集合
*/
public List<Question> findAll() {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
List<Question> questionList = new ArrayList<>();
try {
conn = JdbcUtil.connect();
String sql = "select * from t_question";
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
while (rs.next()) {
Integer questionId = rs.getInt("questionId");
String subject = rs.getString("subject");
String optionA = rs.getString("optionA");
String optionB = rs.getString("optionB");
String optionC = rs.getString("optionC");
String optionD = rs.getString("optionD");
String answer = rs.getString("answer");
Question question = new Question(questionId,subject,optionA,optionB,optionC,optionD,answer);
questionList.add(question);
}
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
JdbcUtil.closeAll(conn,ps,rs);
}
return questionList;
}
}
5.2编写Servlet接口实现类【QuestionFindServlet】
package com.tsccg.controller;
import com.tsccg.dao.QuestionDao;
import com.tsccg.entity.Question;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
/**
* @Author: TSCCG
* @Date: 2021/08/24 13:43
*/
public class QuestionFindServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
QuestionDao dao = new QuestionDao();
//1.调用【Dao】类推送查询命令到数据库,获取所有试题信息
List<Question> questionList = dao.findAll();
//2.将得到的试题信息放入请求作用域对象
request.setAttribute("questionList",questionList);
//3.通过请求转发方式向Tomcat申请调用question_show.jsp将试题信息结合html标签写入响应体
request.getRequestDispatcher("/questionShow.jsp").forward(request,response);
}
}
5.3将试题信息写入响应体
在web目录下新建questionShow.jsp文件
从请求作用域对象中读取所有试题信息,将试题信息结合table标签写入响应体中。
<%@ page import="java.util.List" %>
<%@ page import="com.tsccg.entity.Question" %><%--
Created by IntelliJ IDEA.
User: Admin
Date: 2021/8/24
Time: 13:55
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>试题信息表</title>
</head>
<body>
<center>
<table border="2" cellspacing="0" cellpadding="0" style="font-size: 20px">
<tr>
<th>题目编号</th>
<th>题目描述</th>
<th>A</th>
<th>B</th>
<th>C</th>
<th>D</th>
<th>正确答案</th>
</tr>
<%
//读取所有题目信息
List<Question> questionList = (List<Question>) request.getAttribute("questionList");
for (Question question : questionList) {
%>
<%--将试题信息结合表格标签写入响应体--%>
<tr align="center">
<td><%=question.getQuestionId()%></td>
<td><%=question.getSubject()%></td>
<td><%=question.getOptionA()%></td>
<td><%=question.getOptionB()%></td>
<td><%=question.getOptionC()%></td>
<td><%=question.getOptionD()%></td>
<td><%=question.getAnswer()%></td>
</tr>
<%
}
%>
</table>
</center>
</body>
</html>
5.4测试查询功能
6.试题信息删除功能
6.1添加删除按钮
在questionShow.jsp文件的table标签中添加删除按钮
<%@ page import="java.util.List" %>
<%@ page import="com.tsccg.entity.Question" %><%--
Created by IntelliJ IDEA.
User: Admin
Date: 2021/8/24
Time: 13:55
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>试题信息表</title>
</head>
<body>
<center>
<table border="2" cellspacing="0" cellpadding="0" style="font-size: 20px">
<tr>
<th>题目编号</th>
<th>题目描述</th>
<th>A</th>
<th>B</th>
<th>C</th>
<th>D</th>
<th>正确答案</th>
<!--添加数据操作-->
<th>操作</th>
</tr>
<%
//读取所有题目信息
List<Question> questionList = (List<Question>) request.getAttribute("questionList");
for (Question question : questionList) {
%>
<%--将试题信息结合表格标签写入响应体--%>
<tr align="center">
<td><%=question.getQuestionId()%></td>
<td><%=question.getSubject()%></td>
<td><%=question.getOptionA()%></td>
<td><%=question.getOptionB()%></td>
<td><%=question.getOptionC()%></td>
<td><%=question.getOptionD()%></td>
<td><%=question.getAnswer()%></td>
<!-- 添加删除按钮 -->
<td><a href="/MyWeb/question/delete?questionId=<%=question.getQuestionId()%>">删除</a></td>
</tr>
<%
}
%>
</table>
</center>
</body>
</html>
6.2在【QuestionDao】类中添加删除方法
package com.tsccg.dao;
import com.tsccg.entity.Question;
import com.tsccg.util.JdbcUtil;
import org.junit.Test;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
/**
* @Author: TSCCG
* @Date: 2021/08/23 23:32
* 通过jdbc连接数据库,对t_question表中数据进行操作
*/
public class QuestionDao {
/**
* 1.添加试题信息
* @param question 需要添加的试题信息
* @return 返回添加结果,成功返回true,失败返回false
*/
public boolean questionAdd(Question question) {...}
/**
* 2.查询全部试题信息
* @return 返回存放试题信息的List集合
*/
public List<Question> findAll() {...}
/**
* 3.删除试题信息
* @param questionId 试题编号
* @return 返回执行结果
*/
public boolean delete(Integer questionId) {
Connection conn = null;
PreparedStatement ps = null;
boolean result = false;
try {
conn = JdbcUtil.connect();
String sql = "delete from t_question where questionId=?";
ps = conn.prepareStatement(sql);
ps.setInt(1,questionId);
if (ps.executeUpdate() > 0) {
result = true;
}
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
JdbcUtil.closeAll(conn,ps,null);
}
return result;
}
}
6.3编写QuestionDeleteServlet
package com.tsccg.controller;
import com.tsccg.dao.QuestionDao;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @Author: TSCCG
* @Date: 2021/08/24 15:07
* 处理删除指定试题请求
*/
public class QuestionDeleteServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Integer questionId =null;
QuestionDao dao = new QuestionDao();
//1.调用请求对象读取请求头中的试题编号
questionId = Integer.parseInt(request.getParameter("questionId"));
//2.调用Dao类中的delete方法,传入试题编号,将删除指令推送到数据库服务器中,返回执行结果
boolean result = dao.delete(questionId);
//3.将执行结果写入请求作用域对象
request.setAttribute("info",result?"删除成功":"删除失败");
//4.请求转发向Tomcat请求调用info.jsp文件
request.getRequestDispatcher("/info.jsp").forward(request,response);
}
}
6.4测试删除功能
7.试题信息更新功能
7.1更改试题信息页面
在进行更新之前,需要把待更新的数据完整地展示给用户,用户进行修改后,点击更新按钮,进行更新。
也就是说,需要根据试题编号查询出对应试题信息。
7.1.1添加打开更改页面按钮
在questionShow.jsp文件的table标签中添加打开更改页面按钮
<%@ page import="java.util.List" %>
<%@ page import="com.tsccg.entity.Question" %><%--
Created by IntelliJ IDEA.
User: Admin
Date: 2021/8/24
Time: 13:55
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>试题信息表</title>
</head>
<body>
<center>
<table border="2" cellspacing="0" cellpadding="0" style="font-size: 20px">
<tr>
<th>题目编号</th>
<th>题目描述</th>
<th>A</th>
<th>B</th>
<th>C</th>
<th>D</th>
<th>正确答案</th>
<!--添加数据操作-->
<th colspan="2">操作</th>
</tr>
<%
//读取所有题目信息
List<Question> questionList = (List<Question>) request.getAttribute("questionList");
for (Question question : questionList) {
%>
<%--将试题信息结合表格标签写入响应体--%>
<tr align="center">
<td><%=question.getQuestionId()%></td>
<td><%=question.getSubject()%></td>
<td><%=question.getOptionA()%></td>
<td><%=question.getOptionB()%></td>
<td><%=question.getOptionC()%></td>
<td><%=question.getOptionD()%></td>
<td><%=question.getAnswer()%></td>
<!-- 添加删除按钮 -->
<td><a href="/MyWeb/question/delete?questionId=<%=question.getQuestionId()%>">删除</a></td>
<!--添加打开更新页面按钮 -->
<td><a href="/MyWeb/question/findById?questionId=<%=question.getQuestionId()%>">更新</a></td>
</tr>
<%
}
%>
</table>
</center>
</body>
</html>
7.1.2在【QuestionDao】类中添加根据试题编号查询方法
package com.tsccg.dao;
import com.tsccg.entity.Question;
import com.tsccg.util.JdbcUtil;
import org.junit.Test;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
/**
* @Author: TSCCG
* @Date: 2021/08/23 23:32
* 通过jdbc连接数据库,对t_question表中数据进行操作
*/
public class QuestionDao {
/**
* 1.添加试题信息
* @param question 试题信息表对应实体类的实例对象
* @return 返回添加结果,成功返回true,失败返回false
*/
public boolean questionAdd(Question question) {...}
/**
* 2.查询全部试题信息
* @return 返回存放试题信息的List集合
*/
public List<Question> findAll() {...}
/**
* 3.删除试题信息
* @param questionId 试题编号
* @return 返回执行结果
*/
public boolean delete(Integer questionId) {...}
/**
* 4.根据试题编号查询试题信息
* @param questionId 试题编号
* @return 返回查询出的试题信息
*/
public Question findById(Integer questionId) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
Question question = null;
try {
conn = JdbcUtil.connect();
String sql = "select * from t_question where questionId=?";
ps = conn.prepareStatement(sql);
ps.setInt(1,questionId);
rs = ps.executeQuery();
while (rs.next()) {
String subject = rs.getString("subject");
String optionA = rs.getString("optionA");
String optionB = rs.getString("optionB");
String optionC = rs.getString("optionC");
String optionD = rs.getString("optionD");
String answer = rs.getString("answer");
question = new Question(questionId,subject,optionA,optionB,optionC,optionD,answer);
}
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
JdbcUtil.closeAll(conn,ps,rs);
}
return question;
}
}
7.1.3编写QuestionFindByIdServlet
此类用于处理查询请求,作用如下:
- 调用读取请求头中的参数信息,得到试题编号
- 调用Dao类,传入试题编号,将查询命令推送给数据库服务器,得到试题信息,然后将试题信息写入当前请求作用域对象
- 请求转发向Tomcat请求调用questionUpdate.jsp将试题信息写入请求体
package com.tsccg.controller;
import com.tsccg.dao.QuestionDao;
import com.tsccg.entity.Question;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @Author: TSCCG
* @Date: 2021/08/24 16:13
*/
public class QuestionFindByIdServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Integer questionId = null;
QuestionDao dao = new QuestionDao();
Question question = null;
//1. 调用读取请求头中的参数信息,得到试题编号
questionId = Integer.parseInt(request.getParameter("questionId"));
//2. 调用Dao类,传入试题编号,将查询命令推送给数据库服务器,得到试题信息
question = dao.findById(questionId);
//将试题信息写入当前请求作用域对象
request.setAttribute("question",question);
//3. 请求转发向Tomcat请求调用questionUpdate.jsp将试题信息写入请求体
request.getRequestDispatcher("questionUpdate").forward(request,response);
}
}
7.1.4编写更改试题信息页面
在web目录下新建questionUpdate.jsp。
读取当前请求作用域对象中的试题信息,结合form表单写入响应体。
<%@ page import="com.tsccg.entity.Question" %><%--
Created by IntelliJ IDEA.
User: Admin
Date: 2021/8/24
Time: 16:23
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html lang="en">
<head>
<title>更改试题信息</title>
<style type="text/css">
* {
font-size: 20px;
}
h2 {
color: green;
font-size: 40px;
}
</style>
</head>
<body>
<%
//获取试题信息
Question question = (Question)request.getAttribute("question");
%>
<%--展示试题信息--%>
<center>
<form action="/MyWeb/question/update" method="GET">
<h2>更改试题信息</h2>
<table border="1" cellpadding="0" cellspacing="0">
<!-- 题目编号 -->
<tr>
<td>题目编号:</td>
<td><input type="text" name="questionId" value="<%=question.getQuestionId()%>" readonly></td>
</tr>
<!-- 题目信息 -->
<tr>
<td>题目信息:</td>
<td><input type="text" name="subject" value="<%=question.getSubject()%>"></td>
</tr>
<!-- 选项A -->
<tr>
<td>选项A:</td>
<td><input type="text" name="optionA" value="<%=question.getOptionA()%>"></td>
</tr>
<!-- 选项B -->
<tr>
<td>选项B:</td>
<td><input type="text" name="optionB" value="<%=question.getOptionB()%>"></td>
</tr>
<!-- 选项C -->
<tr>
<td>选项C:</td>
<td><input type="text" name="optionC" value="<%=question.getOptionC()%>"></td>
</tr>
<!-- 选项D -->
<tr>
<td>选项D:</td>
<td><input type="text" name="optionD" value="<%=question.getOptionD()%>"></td>
</tr>
<!-- 正确答案 -->
<tr>
<td>正确答案:</td>
<td>
<label>
<input type="radio" name="answer" value="A" <%="A".equals(question.getAnswer())?"checked":""%>>A
</label>
<label>
<input type="radio" name="answer" value="B" <%="B".equals(question.getAnswer())?"checked":""%>>B
</label>
<label>
<input type="radio" name="answer" value="C" <%="C".equals(question.getAnswer())?"checked":""%>>C
</label>
<label>
<input type="radio" name="answer" value="D" <%="D".equals(question.getAnswer())?"checked":""%>>D
</label>
</td>
</tr>
<!-- 提交 -->
<tr>
<td><input type="submit" value="更新试题"></td>
<td><input type="reset" value="重置"></td>
</tr>
</table>
</form>
</center>
</body>
</html>
7.1.5测试打开更改信息页面
7.2更新试题信息
7.2.1在【QuestionDao】类中添加更新方法
package com.tsccg.dao;
import com.tsccg.entity.Question;
import com.tsccg.util.JdbcUtil;
import org.junit.Test;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
/**
* @Author: TSCCG
* @Date: 2021/08/23 23:32
* 通过jdbc连接数据库,对t_question表中数据进行操作
*/
public class QuestionDao {
/**
* 1.添加试题信息
* @param question 需要添加的试题信息
* @return 返回添加结果,成功返回true,失败返回false
*/
public boolean questionAdd(Question question) {...}
/**
* 2.查询全部试题信息
* @return 返回存放试题信息的List集合
*/
public List<Question> findAll() {...}
/**
* 3.删除试题信息
* @param questionId 试题编号
* @return 返回执行结果
*/
public boolean delete(Integer questionId) {...}
/**
* 4.根据试题编号查询试题信息
* @param questionId 试题编号
* @return 返回查询出的试题信息
*/
public Question findById(Integer questionId) {...}
/**
* 5.更新试题信息
* @param question 新的试题信息
* @return 返回更新结果
*/
public boolean questionUpdate(Question question) {
Connection conn = null;
PreparedStatement ps = null;
boolean result = false;
try {
conn = JdbcUtil.connect();
String sql = "update t_question set subject=?,optionA=?,optionB=?,optionC=?,optionD=?,answer=? where questionId=?";
//获取预编译的数据库操作对象
ps = conn.prepareStatement(sql);
ps.setString(1,question.getSubject());
ps.setString(2,question.getOptionA());
ps.setString(3,question.getOptionB());
ps.setString(4,question.getOptionC());
ps.setString(5,question.getOptionD());
ps.setString(6,question.getAnswer());
ps.setInt(7,question.getQuestionId());
//如果更新成功,那么ps.executeUpdate()返回的值一定大于0
if (ps.executeUpdate() > 0) {
result = true;
}
} catch(SQLException e) {
e.printStackTrace();
} finally {
JdbcUtil.closeAll(conn,ps,null);
}
return result;
}
}
7.2.2编写QuestionUpdateServlet
此类用于处理更新试题信息请求,作用如下:
- 调用读取请求头中的参数信息,得到新的试题信息
- 调用Dao类,传入新的试题信息,将更新命令推送给数据库服务器,得到处理结果,然后将处理结果写入当前请求作用域对象
- 请求转发向Tomcat请求调用info.jsp将处理结果写入请求体
package com.tsccg.controller;
import com.tsccg.dao.QuestionDao;
import com.tsccg.entity.Question;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @Author: TSCCG
* @Date: 2021/08/24 17:05
* 处理更新试题信息请求
*/
public class QuestionUpdateServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String subject,optionA,optionB,optionC,optionD,answer;
Integer questionId;
Question question = null;
QuestionDao dao = new QuestionDao();
//1. 调用读取请求头中的参数信息,得到新的试题信息
questionId = Integer.parseInt(request.getParameter("questionId"));
subject = request.getParameter("subject");
optionA = request.getParameter("optionA");
optionB = request.getParameter("optionB");
optionC = request.getParameter("optionC");
optionD = request.getParameter("optionD");
answer = request.getParameter("answer");
//将试题信息放入实体类对象中
question = new Question(questionId,subject,optionA,optionB,optionC,optionD,answer);
//2. 调用Dao类,传入新的试题信息,将更新命令推送给数据库服务器,得到处理结果,然后将处理结果写入当前请求作用域对象
boolean result = dao.questionUpdate(question);
//3. 请求转发向Tomcat请求调用info.jsp将处理结果写入请求体
if (result) {
request.setAttribute("info","试题信息更新成功");
} else {
request.setAttribute("info","试题信息更新失败");
}
request.getRequestDispatcher("/info.jsp").forward(request,response);
}
}