<% String code = request.getParameter("YYM"); if (code == null || code.isEmpty()) { %> <a href="Admin.jsp">请输入预约码,点击返回签到</a> <% } else { Connection conn = SQLConn.openDB(); final String SELECT_SQL = "SELECT ACode FROM User_ZC JOIN YuYue ON User_ZC.UserId = YuYue.UserId WHERE Login = 1 AND State = 1 AND Arrive IS NULL"; final String UPDATE_SQL = "UPDATE YuYue SET Arrive =1 WHERE ACode = ?"; PreparedStatement pstmtSelect = conn.prepareStatement(SELECT_SQL); ResultSet rs = pstmtSelect.executeQuery(); int count = 0; while (rs.next()) { String Acode = rs.getString("ACode"); if (Acode.equals(code)) { try { PreparedStatement pstmtUpdate = conn.prepareStatement(UPDATE_SQL); pstmtUpdate.setString(1, code); count = pstmtUpdate.executeUpdate(); pstmtUpdate.close(); } catch (SQLException e) { e.printStackTrace(); } break; } } if (count > 0){ %> <a href="Admin.jsp">签到成功</a> <% } else { %> <a href="Admin.jsp">签到失败</a> <% } rs.close(); pstmtSelect.close(); conn.close(); } %>为什么总是跳转到“签到失败”页面,请找出bug
时间: 2024-02-15 22:27:44 浏览: 73
在代码中没有检查数据库连接是否成功打开。如果连接失败,会导致在执行SELECT语句时抛出SQLException异常。因此,建议在打开连接之后添加一个if语句来检查连接是否成功打开。另外,还需要检查是否有与该预约码相匹配的记录。如果没有,则也会导致跳转到“签到失败”页面。因此,建议添加一个else语句,在其中输出“该预约码无效”。
相关问题
<% String str=request.getParameter("i"); double n=Double.parseDouble(str); double s=0; s= %>
这是一个 JSP 脚本块,用于在 JSP 页面中编写 Java 代码。具体来说,这段代码的作用是从 HTTP 请求中获取名为 `i` 的参数,并将其转换为 `double` 类型的变量 `n`;然后声明一个 `double` 类型的变量 `s` 并对其进行计算。
在 `s=` 的后面应该接上一段计算表达式,才能正确地计算变量 `s` 的值。例如,如果想计算 `n` 的平方,可以将 `s=` 后面的空白部分改为 `n * n;`:
```jsp
<%
String str = request.getParameter("i");
double n = Double.parseDouble(str);
double s = 0;
s = n * n;
%>
```
这样就可以将 `i` 参数值的平方赋值给变量 `s`,后续可以在 JSP 页面中使用该变量。需要注意的是,JSP 脚本块中的代码会在服务器端执行,并将输出结果作为 HTML 页面的一部分返回给客户端。因此,在编写 JSP 页面时,需要注意保护用户隐私和防止代码注入等安全问题。
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@page import="com.util.SQLConn"%> <%@page import="java.sql.*" %> <%@page import="java.sql.Statement" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <html> <body> <% // 获取前端数据 String username = request.getParameter("username"); String usernum = request.getParameter("usernum"); String userpwd = request.getParameter("userpwd"); // 执行数据库操作 Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; int count = 0; try { conn = SQLConn.openDB(); String sql = "INSERT INTO User_ZC(UserID, Name, Code, Power) VALUES (?, ?, ?, ?)"; pstmt = conn.prepareStatement(sql); pstmt.setString(1, usernum); pstmt.setString(2, username); pstmt.setString(3, userpwd); pstmt.setInt(4, 1); count = pstmt.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } finally { SQLConn.closeDB(conn, pstmt, rs); } // 根据执行结果进行相应的操作 if (count > 0) { request.getRequestDispatcher("ZCS.jsp").forward(request,response); } else { request.getRequestDispatcher("ZCB.jsp").forward(request,response); } %> </body> </html>,优化代码
首先,需要对代码进行分层,将数据库操作和前端数据获取分离。然后可以使用 try-with-resources 语句来代替传统的 try-catch-finally 语句,避免代码冗余。最后,可以将 SQL 语句提取为常量,方便代码维护。
优化后的代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@page import="com.util.SQLConn"%>
<%@page import="java.sql.*" %>
<%@page import="java.sql.Statement" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<body>
<%-- 获取前端数据 --%>
<%
String username = request.getParameter("username");
String usernum = request.getParameter("usernum");
String userpwd = request.getParameter("userpwd");
%>
<%-- 执行数据库操作 --%>
<%
int count = 0;
try (Connection conn = SQLConn.openDB();
PreparedStatement pstmt = conn.prepareStatement(INSERT_SQL)) {
pstmt.setString(1, usernum);
pstmt.setString(2, username);
pstmt.setString(3, userpwd);
pstmt.setInt(4, 1);
count = pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
%>
<%-- 根据执行结果进行相应的操作 --%>
<%
if (count > 0) {
request.getRequestDispatcher("ZCS.jsp").forward(request, response);
} else {
request.getRequestDispatcher("ZCB.jsp").forward(request, response);
}
%>
<%-- SQL 语句常量 --%>
<%
private static final String INSERT_SQL = "INSERT INTO User_ZC(UserID, Name, Code, Power) VALUES (?, ?, ?, ?)";
%>
</body>
</html>
阅读全文