public ResultSet DB_select(String sqlcmd)
{
try {
Connection con = ds.getConnection();
System.out.println(con.isClosed()); Statement smt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
ResultSet set = smt.executeQuery(sqlcmd);
ResultSet set1 = smt.executeQuery(sqlcmd);
//con.close();
try {
while(set.next())
{
String str = set.getString(1);
System.out.println(str);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(!set1.next()) return null;
return set;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}我调用这段代码后 编译器提示异常java.sql.SQLException: Invalid state, the ResultSet object is closed.
有大牛知道怎么解决不 

解决方案 »

  1.   

    Statement smt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
    你明白自己写的这句话的意思么?
    ResultSet.CONCUR_READ_ONLY你把它在rs里面设置成只读了,所以说state得状态是invalid的
    然后你执行sqlcmd,我没看到你的sqlcmd再哪里,反正你是当参数传进来的,所以其他的不好说
    你把这个去掉再试下
      

  2.   

    java2核心技术的数据库编程那一章中这样说:每个Connection对象都可以创建一个或一个以上的Statement对象。同一个Statement对象可以用于多个不相关的命令和查询。但是,一个Statement对象最多只能打开一个结果集。如果需要执行多个查询操作,且需要同时分析查询结果,那么必须创建多个Statement对象。
      

  3.   

    ResultSet set = smt.executeQuery(sqlcmd);
    ResultSet set1 = smt.executeQuery(sqlcmd);
    和上面说的相违背