我已经尝试了很多方法,但是总是出现此错误。
实际上,我正在尝试访问其他类的结果集值,并且对于数据库查询,我创建了一个单独的类。
请不要将其标记为先前询问的内容,因为我仅获得单一类的解决方案。
这是我的DBVerification类
public class DBVerification {
private static String DB_URL = PropertyManager.getInstance().getDB_URL();
private static String DB_USER= PropertyManager.getInstance().getDB_USER();
private static String DB_PASSWORD= PropertyManager.getInstance().getDB_PASSWORD();
private static String DBClass= PropertyManager.getInstance().getDBClass();
private static Connection connection;
public static ArrayList<ResultSet> executeStoredProcedure(String query) throws ClassNotFoundException, SQLException
{
ArrayList<ResultSet> resultset = new ArrayList<ResultSet>();
Class.forName(DBClass);
connection= DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
CallableStatement cstmt = connection.prepareCall( "{ call " + query+" }" );
//System.out.println("{ call " + query+" }");
try {
boolean results = cstmt.execute();
int rsCount = 0;
do {
if(results) {
ResultSet rs = cstmt.getResultSet();
resultset.add(rs);
rsCount++;
System.out.println("RESULT SET #" + rsCount);
// rs.close();
}
System.out.println();
results = cstmt.getMoreResults();
} while(results);
//cstmt.getMoreResults(Statement.KEEP_CURRENT_RESULT);
//cstmt.close();
}
catch (Exception e) {
e.printStackTrace();
}
return resultset;
}
public static void closeDB() throws SQLException
{
connection.close();
}
}
这是我的第二堂课报销班
public class Reimbursement
{
ArrayList<ResultSet> result = DBVerification.executeStoredProcedure("getreimbursements");
for (ResultSet curInstance: result) {
if(result.indexOf(curInstance) == 0)
{
while(curInstance.next())
{
String branchName=curInstance.getString("BranchName");
String department=curInstance.getString("DepartmentName");
String employee=curInstance.getString("EmployeeName");
String title=curInstance.getString("Title");
String claimdate=ValueConverter.DateFormat(curInstance.getString("Date"));
}
curInstance.close();
}
if(result.indexOf(curInstance) == 1)
{
while(curInstance.next())
{
String category=curInstance.getString("Category");
String expensedate=ValueConverter.DateFormat(curInstance.getString("ExpenseDate"));
String description=curInstance.getString("Description");
String approvedby=curInstance.getString("ApprovedBy");
}
curInstance.close();
}
}
DBVerification.closeDB();
}
请不要寻找main方法,因为这是用于测试类,因此我已经在xml文件中使用了该类。
请给我建议,我做错了什么,会给我错误消息“结果集已关闭”。
异常图像实际上是我的测试类,因此它只会以这种形式显示错误,我已经编辑了指示的行
exception message
答案 0 :(得分:1)
我认为,您的问题可能如下
不幸的是,我认为cstmt.getMoreResults()
的操作会先关闭所有打开的结果集,然后再移至下一个结果集。您最终得到的是封闭的ResultSet对象的数组列表。当您尝试从中读取内容时,出现错误消息“结果集已关闭”
来自Java文档
boolean getMoreResults() 抛出SQLException
移动到此Statement对象的下一个结果,如果它是一个a,则返回true ResultSet对象,并隐式关闭任何当前ResultSet 使用方法getResultSet获得的对象。