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方法