SQLException: ResultSet is closed

ResultSet zwrs2 = statement.executeQuery(sql);
while(zwrs2.next()){
outputDate(zwrs2);

}

public void outputDate(ResultSet zwrs2){
ResultSet dbrs = statement.executeQuery(sql);
while(dbrs.next()){
double value = zwrs2.getDouble(db_col);//字段名,当执行到其中一个字段时报错误
}
}

java.sql.SQLException: ResultSet is closed

这与close()有什么关系,我实在找不出什么原因????

我看你这个
rs2 = stmt2.executeQuery("select * from table2;");//rs2由stmt2生成结果

结果集是固定的。你先把这个处理一下,把ResultSet中的结果放到一个list里面,
然后用这个list。这样试试 List中是存的一个个对象(VO)。这个VO就代表你的数据库中的一行。

try {

DBConnection db = new DBConnection();//DBConnection是自定义用于实现JDBC-ODBC数据库连接的类,类
//中实现了 返回Connection 和 Statement 的方法
ResultSet rs1,rs2 ;
Statement stmt = db.getStatement();
rs1 = stmt.executeQuery("select * from table1;");

while(rs1.next()){
rs2 = stmt.executeQuery("select * from table2;");
while(rs2.next()){
/* 一段代码 */
}
}
rs2.close();
rs1.close();
stmt.close();
}catch (SQLException ex) { System.out.println(ex); }

    代码运行后, 就会抛出 java.sql.SQLException: ResultSet is closed 的异常,这是因为程序在while与while的嵌套循环中,每循环到一次rs1的时候,就会循环到一次rs2,而rs1和rs2都是通过stmt生成的结果集,所以在生成rs2的时候,stmt就自动把rs1关掉了,再循环到rs1的时候,系统自然酒会抛出ResultSet is closed 的异常了,解决的方法就是创建两个Statement,rs1和rs2分别由不同的Statement生成,就不会抛出异常了 修改如下 

try {
DBConnection db = new DBConnection();//DBConnection是自定义的用于实现JDBC-ODBC数据库连接的类,类
//中实现了 返回Connection 和 Statement 的方法
ResultSet rs1,rs2;
Statement stmt1,stmt2;
Connection conn = db.getConnection();
stmt1 = conn.createStatement();// 创建两个Statement实例
stmt2 = conn.createStatement();

rs1 = stmt1.executeQuery("select * from table1;");//rs1由stmt1生成结果
while(rs1.next()){
rs2 = stmt2.executeQuery("select * from table2;");//rs2由stmt2生成结果
while(rs2.next()){
/* 一段代码 */
}
}
rs2.close();
rs1.close();
stmt1.close();
stmt2.close();
}catch (SQLException ex) { System.out.println(ex); }

这样运行就不会抛出异常了

[quote] while(dbrs.next()){
double value = zwrs2.getDouble(db_col);//字段名,当执行到其中一个字段时报错误
} [/quote]

还是应该:

while(dbrs.next()){
double value = [color=red]dbrs[/color].getDouble(db_col);//字段名,当执行到其中一个字段时报错误
}

dbrs的结果集和zwrs2中的不一定一样啊,你用dbrs循环,用zwrs2取值不就混了吗?

还有你这个while(zwrs2.next()){
outputDate(zwrs2);

} 标是zwrs2中有多少行就输出多少遍zwrs2?不应该是这个意思吧?

你是不是想如果zwrs2中有数据就输出zwrs2呢。
那么应该这样写
if(zwrs2!=null){
outputDate(zwrs2);

}

然后这里
[code="java"]
public void outputDate(ResultSet zwrs2){
ResultSet dbrs = statement.executeQuery(sql);
while(dbrs.next()){
double value = zwrs2.getDouble(db_col);//字段名,当执行到其中一个字段时报错误
}
}
改成
[code="java"]
public void outputDate(ResultSet zwrs2){
while(zwrs2.next()){
double value = zwrs2.getDouble(db_col);//字段名,当执行到其中一个字段时报错误
}
}
[/code]
[/code]

你这个
select * from SUPPLY_TILTH_SCHEME where bpl_guid ='{41CF37BD-57DD-4643-8A31-EF6106983C5C}'
查出来两条记录?两条的bpl_guid还不一样。太古怪了!

不过和这个关系不大吧。。别管几条记录你的程序应该是通用的。。你试试我说的List方法