import java.sql.*;
public class del
{
public static void main(String[] args) 
{
String kind;
String no;
Statement stmt=null;
Statement stmt1=null;
ResultSet rs=null;
String sql="";


Db db=new Db();
db.Dbconn();
stmt=db.getStmt();
db.Dbconn1();
stmt1=db.getStmt1();


try
{
rs=stmt.executeQuery("select no123,kind from log");
while (rs.next())
{
kind=rs.getString("kind");
no=rs.getString("no123"); System.out.println("1111  : "+no);
System.out.println("kind   : "+kind);
ResultSet rs1=null; if (kind.equals("保单"))
{
System.out.println(kind);
stmt1=db.getStmt1();
//在infomix当中执行SQL如果有结果表明有相同的,没有则相反
 rs1=stmt1.executeQuery("select polno from charge where polno='"+no+"'");
System.out.println("2222"); if (rs1.next())
{
//执行删除log表当中的记录
String polno=rs1.getString("polno");
stmt.execute("delete from log where no123='"+polno+"'");
}
}
else if (kind.equals("批单"))
{
 rs1=stmt1.executeQuery("select indorno from charge where indorno='"+no+"'");
if (rs1.next())
{
String indorno=rs1.getString("indorno");
stmt.execute("delete from log where no123='"+indorno+"'");
}
} else if (kind.equals("立案"))
{
 rs1=stmt1.executeQuery("select caseno from regcase where caseno='"+no+"'");
if (rs1.next())
{
String caseno=rs1.getString("caseno");
stmt.execute("delete from log where no123='"+caseno+"'");
}
} else if (kind.equals("赔案"))
{  rs1=stmt1.executeQuery("select indemno from indemnity where indemno='"+no+"'");
 
if (rs1.next())
{

String indemno=rs1.getString("indemno");
System.out.println(indemno);
sql="delete from log where no123='"+indemno+"'";
System.out.println("sql : "+sql);

stmt.execute(sql);


}
}
}
}
catch (Exception e)
{
System.out.println(e);
}
}
}错误信息是:java.sql.SQLException: ResultSet is closed;
我一直也没有手动关闭 RS ,是不是两个RS交替使用时会自动把前一个关闭呢?如何解决呀?

解决方案 »

  1.   

    你把
    kind=rs.getString("kind");
    no=rs.getString("no123");的位置互换下看看no=rs.getString("no123");
    kind=rs.getString("kind");
      

  2.   

    rs.getString里面的参数是什么类型啊??
      

  3.   

    rs.getString里面的参数是 文本 型的
      

  4.   

    当一个产生此ResultSet的Statement对象关闭,或又执行了其他查询命令后,此ResultSet就会关闭。
    你看你的Db类是怎么实现的,db.getstmt()和db.getstmt1()获得的是不是同一个对象的引用。
      

  5.   

    import java.sql.*;
    public class Db 
    {
    Statement  stmt=null;
    Statement  stmt1=null; public void Dbconn ()
    {
    try
    {
       Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    String url="jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=e:/log.mdb;"; Connection conn = DriverManager.getConnection(url);
    stmt=conn.createStatement();

    }
    catch (Exception e)
    {
    System.out.println(e);
    }
     
        }   
    public Statement getStmt()

    {

    return stmt;

    }  public void Dbconn1()
    {
    try
    {
    Class.forName("com.informix.jdbc.IfxDriver");
    String url = "jdbc:informix-sqli://10.3.0.88:8417/datacenter:INFORMIXSERVER=onshj6;user=ccx99;password=konica1"; //myDB为数据库名

    //Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    //String url="jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=e:/log1.mdb;"; Connection conn = DriverManager.getConnection(url);
     stmt1=conn.createStatement();
    }
    catch (Exception e)
    {
    System.out.println(e);
    }  
    }
    public Statement getStmt1()
    {
    return stmt1;
    }}
      

  6.   

    分别不同的两个statment   ResultSet 
    两套之间会出现交叉出错的问题吗?