JDBC---查询所有学生信息的页面运行后报错:

news/2024/11/24 13:25:42/

原代码:

<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.DriverManager" %>
<%@ page import="java.sql.PreparedStatement" %>
<%@ page import="java.sql.ResultSet" %><%--Created by IntelliJ IDEA.User: CaptainDongDate: 2023/4/4Time: 21:35To 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 url="jdbc:mysql://localhost:3306/students";String username="root";String password="123";Class.forName("com.mysql.cj.jdbc.Driver");Connection connection= DriverManager.getConnection(url,username,password);String sql="select *from stu_info";PreparedStatement preparedStatement=connection.prepareStatement(sql);ResultSet resultSet=preparedStatement.executeQuery();resultSet.last();//移动到最后一条记录
%>
<div>你要查的学生数据表中共有
</div>
<font size="5" color="red">
<%=resultSet.getRow()
%>人
</font>
<div><table border="2" bgcolor="ccceee" width="650"><tr bgcolor="CCCCCC"><td>记录条数</td><td>学号</td><td>姓名</td><td>性别</td><td>年龄</td><td>体重</td><td>身高</td></tr><%resultSet.beforeFirst();//移动到第一条记录之前while (resultSet.next()){%><tr align="center"><td><%=resultSet.getRow()%></td><td><%=resultSet.getString("id")%></td><td><%=resultSet.getString("name")%></td><td><%=resultSet.getString("sex")%></td><td><%=resultSet.getString("age")%></td><td><%=resultSet.getString("weight")%></td><td><%=resultSet.getString("height")%></td></tr><% }%></table>
</div>
</center>
<%if (resultSet!=null)resultSet.close();if (preparedStatement!=null)preparedStatement.close();if (connection!=null)connection.close();
%>
</body>
</html>

查询所有学生信息的页面运行后报错:

类型 异常报告

消息 在 [30] 行处理 [/find_stu_info.jsp] 时发生异常

描述 服务器遇到一个意外的情况,阻止它完成请求。

.。。

例外情况

org.apache.jasper.JasperException: 在 [30] 行处理 [/find_stu_info.jsp] 时发生异常

27:   PreparedStatement preparedStatement=connection.prepareStatement(sql);
28:   ResultSet resultSet=preparedStatement.executeQuery();
29: 
30:   resultSet.last();//移动到最后一条记录
31: %>
32: <div>
33:   你要查的学生数据表中共有Stacktrace:org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:610)org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:489)org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:379)org.apache.jasper.servlet.JspServlet.service(JspServlet.java:327)javax.servlet.http.HttpServlet.service(HttpServlet.java:596)org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

根本原因。

javax.servlet.ServletException: java.sql.SQLException: Operation not allowed for a result set of type ResultSet.TYPE_FORWARD_ONLY.org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:655)org.apache.jsp.find_005fstu_005finfo_jsp._jspService(find_005fstu_005finfo_jsp.java:258)org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)javax.servlet.http.HttpServlet.service(HttpServlet.java:596)org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:466)org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:379)org.apache.jasper.servlet.JspServlet.service(JspServlet.java:327)javax.servlet.http.HttpServlet.service(HttpServlet.java:596)org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

 

原因:

这个错误是因为在ResultSet对象上尝试执行无效的操作,而该对象的类型为ResultSet.TYPE_FORWARD_ONLY。默认情况下,JDBC返回的ResultSet对象是TYPE_FORWARD_ONLY类型,并且只允许以单向模式遍历一次结果集,即无法回滚或重新定位。在这段代码中,查询完记录总数后,指针移动到了结果集的最后一条记录,而后续再次对结果集进行遍历时,由于该对象已经在末尾,所以会出现上述异常。

为了解决这个问题,可以在创建PreparedStatement对象时,通过设置ResultSet对象的类型为TYPE_SCROLL_INSENSITIVE或者TYPE_SCROLL_SENSITIVE,从而支持在结果集中进行滚动或重新定位。

具体来说,加入preparedStatement=connection.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);语句后,即可将查询出的结果集类型设置为TYPE_SCROLL_INSENSITIVE类型,以支持结果集的滚动操作。

修改后的代码示例如下:

改代码: 

<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.DriverManager" %>
<%@ page import="java.sql.PreparedStatement" %>
<%@ page import="java.sql.ResultSet" %><%--Created by IntelliJ IDEA.User: CaptainDongDate: 2023/4/4Time: 21:35To 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 url="jdbc:mysql://localhost:3306/students";String username="root";String password="123";Class.forName("com.mysql.cj.jdbc.Driver");Connection connection= DriverManager.getConnection(url,username,password);String sql="select *from stu_info";PreparedStatement preparedStatement=connection.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);ResultSet resultSet=preparedStatement.executeQuery();resultSet.last();//移动到最后一条记录
%>
<div>你要查的学生数据表中共有
</div>
<font size="5" color="red">
<%=resultSet.getRow()
%>人
</font>
<div><table border="2" bgcolor="ccceee" width="650"><tr bgcolor="CCCCCC"><td>记录条数</td><td>学号</td><td>姓名</td><td>性别</td><td>年龄</td><td>体重</td><td>身高</td></tr><%resultSet.beforeFirst();//移动到第一条记录之前while (resultSet.next()){%><tr align="center"><td><%=resultSet.getRow()%></td><td><%=resultSet.getString("id")%></td><td><%=resultSet.getString("name")%></td><td><%=resultSet.getString("sex")%></td><td><%=resultSet.getString("age")%></td><td><%=resultSet.getString("weight")%></td><td><%=resultSet.getString("height")%></td></tr><% }%></table>
</div>
</center>
<%if (resultSet!=null)resultSet.close();if (preparedStatement!=null)preparedStatement.close();if (connection!=null)connection.close();
%>
</body>
</html>

运行结果:

 对比数据库中的:

 


http://www.ppmy.cn/news/37888.html

相关文章

Python 自动化指南(繁琐工作自动化)第二版:零、前言

关于作者 Al Sweigart 是一名软件开发人员和技术书籍作者。Python 是他最喜欢的编程语言&#xff0c;他是该语言的几个开源模块的开发者。他的其他书籍可以在他的网站上根据知识共享许可免费获得。他的猫现在重 11 磅。 关于技术评审 Philip James 从事 Python 工作已经超过…

【Go基础】一篇文章带你全面了解学习—切片

目录 1、切片注意点 2、声明切片 3、切片初始化 4、切片的内存布局

P5717 【深基3.习8】三角形分类

题目描述 给出三条线段 a,b,ca,b,c 的长度&#xff0c;均是不大于 1000010000 的正整数。打算把这三条线段拼成一个三角形&#xff0c;它可以是什么三角形呢&#xff1f; 如果三条线段不能组成一个三角形&#xff0c;输出Not triangle&#xff1b;如果是直角三角形&#xff0c;…

[Java]SpringBoot配置参数

偶尔忘记怎么获取配置的参数&#xff0c;备忘一下。 Spring Boot会自动识别正确的配置文件&#xff08;.properties或.yml&#xff09;并加载其中的属性。 例如&#xff1a;application.properties与application.yml读取机制为 Environment &#xff0c;它将配置抽象为Propert…

Java摘要算法学习日记

Java摘要算法学习日记摘要的作用MD家族的摘要算法sha(安全散列算法)MAC(含有秘钥的散列函数算法)摘要的作用 摘要的作用主要是验证数据的完整性 举个例子: 我们去apche下载jar包时网页上有个sha512的链接&#xff0c;点击后会看到一串sha512摘要值 b6d517db15aedc424d112b8f3…

代码随想录算法训练营第四十九天| 121 买卖股票的最佳时机 122 买卖股票的最佳时机II

代码随想录算法训练营第四十九天| 121 买卖股票的最佳时机 122 买卖股票的最佳时机II LeetCode 121 买卖股票的最佳时机 题目: 121.买卖股票的最佳时机 动规五部曲&#xff1a; 确定dp数组以及下标的含义 **dp[i][0] 表示第i天持有股票所得最多现金 ** 确定递推公式 dp[…

超详细WindowsJDK1.8与JDK11版本切换教程

文章目录一、JDK生效原理二、安装配置JDK11三、切换JDK11版本四、查看切换JDK11版本是否成功五、再次切换至JDK8版本六、查看切换JDK8版本是否成功一、JDK生效原理 想必大家都在为如何流畅的切换JDK版本问题而来&#xff0c;那么在此篇文章开始之前&#xff0c;首先我们来思考一…

蓝桥杯:阶乘约数

蓝桥杯&#xff1a;阶乘约数https://www.lanqiao.cn/problems/1020/learning/ 目录 题目描述 填空题&#xff1a;答案是 39001250856960000 题目分析 AC代码(Java) 暴力 线性筛 题目描述 填空题 定义阶乘 n!123⋅⋅⋅n。 请问 100! &#xff08;100 的阶乘&#xff09;有…