java - 如何在 Java 中返回结果集
问题描述
我正在尝试返回给定学生 ID 的结果集并显示 gpa。但是,当结果集关闭时,我无法执行该操作。这是我的代码:
/**
* Returns a ResultSet with a row containing the computed GPA (named as gpa) for a given student id.
* You must use a PreparedStatement.
*
* @return
* ResultSet containing computed GPA
*/
public ResultSet computeGPA(String studentId) throws SQLException
{
ResultSet rst;
// TODO: Use a PreparedStatement
try(Connection con = connect()){
String sql = "SELECT gpa FROM student WHERE sid=?";
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setString(1, studentId);
rst = pstmt.executeQuery();
while(rst.next()){
System.out.println(rst.getString("gpa"));
}
}
return rst;
}
这是我得到的结果
连接到数据库。2.96 线程“主”java.sql.SQLException 中的异常:在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java 的 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078) 处关闭 ResultSet 后不允许操作:989) 在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975) 在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920) 在 com.mysql.jdbc.ResultSetImpl.checkClosed(ResultSetImpl. java:804) 在 com.mysql.jdbc.ResultSetImpl.getMetaData(ResultSetImpl.java:3107) 在 EnrollJDBC.resultSetToString(EnrollJDBC.java:500) 在 EnrollJDBC.main(EnrollJDBC.java:59)
解决方案
当你的块完成时,你使用try-with-resources
which closes 。在 Java 中,当您关闭时,您还会自动关闭与该连接关联的所有对象。这就是异常告诉你的。您正在尝试使用 closed 。因此,您需要更改代码以仅在完全处理后关闭连接。Connection
try
Connection
ResultSet
ResultSet
ResultSet
由于您SELECT
按 id 执行,因此您会得到一条记录或没有记录。那么为什么不只返回那个值,如果它存在或者null
(或空字符串)如果学生不存在这样的 id 而不是从方法返回ResultSet
对象呢?computeGPA()
推荐阅读
- node.js - 如何在 node express mongo 中定位数据
- python-3.x - 在 Python 3 中将图像转换为傅里叶图像
- typescript - 定义类型为 null 或 undefined 的变量时类型不匹配
- javascript - 使用jquery单击眼睛图标时如何显示和隐藏密码
- php - 如何将值从日期范围选择器传递到 SQL?
- angular - chartjs 高度不跟随父容器
- node.js - Google 2 Factor Authentication with Angular and NodeJS
- javascript - 使用 angularjs 显示/隐藏级联 tr
- javascript - 在页面加载时替换所有 img src - Javascript
- javascript - 如何定义 Django 视图