“线程中的异常”;“主要”;java.sql.SQLException:结果集关闭后不允许操作

“线程中的异常”;“主要”;java.sql.SQLException:结果集关闭后不允许操作,java,Java,所以,在执行下面的过程时,我得到了标题中的错误,我真的不知道会出什么问题 我正在做的是尝试从数据库中获取一些数据来创建一个对象,并用它的几个对象填充和arraylist,如果找不到,应该抛出一个异常 public ArrayList<Caso> buscarCasosPorJuez(String cedula) throws java.sql.SQLException,Exception{ java.sql.ResultSet rs; String sql;

所以,在执行下面的过程时,我得到了标题中的错误,我真的不知道会出什么问题

我正在做的是尝试从数据库中获取一些数据来创建一个对象,并用它的几个对象填充和arraylist,如果找不到,应该抛出一个异常

public ArrayList<Caso> buscarCasosPorJuez(String cedula) throws java.sql.SQLException,Exception{
    java.sql.ResultSet rs;
    String sql;
    Caso caso;
    ArrayList<Caso> casos = new ArrayList();
    sql="SELECT * "+
    "FROM tcaso "+
    "WHERE CedulaJ='"+cedula+"';";
    Conector.getConector().ejecutarSQL(sql);
    rs = Conector.getConector().ejecutarSQL(sql,true);

    while (rs.next()){
        caso = new Caso(
            rs.getInt("NumCaso"),
            rs.getString("DescripcionCaso"),
            rs.getString("EstadoCaso"),
            rs.getDate("FechaCreacion").toLocalDate(),
            persona.buscarJuezPorCedula(rs.getString("CedulaJ")),
            persona.buscarQuerellante(rs.getString("CedulaQ"))
            );
        casos.add(caso);
    }

    rs.close();
    return casos;
}

感谢您提供的所有帮助。

我怀疑您正在关闭
ejucutarSQL()
中的
语句
对象,该语句将关闭从它派生的所有
结果集

实际上,您无法编写这样的通用SQL执行方法,至少在不使用
CachedRowSet
的情况下是如此,这会占用内存

您需要按照更传统的方式重新构造此代码,使用显式
连接器
语句
对象作为局部变量,以便可以按与采集相反的顺序关闭它们

您应该使用
PreparedStatements
,而不是将参数构建到SQL字符串中。如果抛出异常,也会泄漏结果集

例如:

public Querellante buscarQuerellante(String cedula) throws java.sql.SQLException,Exception{
    String sql = "SELECT DireccionQ,NombreQ,ApellidosQ,TelefonoQ,CedulaQ "+
        "FROM tquerellante "+
        "WHERE CedulaQ=?";
    try (Connnector conn = ...; // TODO
        PreparedStatement ps = conn.prepareStatement(sql);
        )
    {
        ps.setObject(1, cedula);
        try (ResultSet rs = ps.execute())
        {
            if (rs.next()){
                return new Querellante(
                    rs.getString("DireccionQ"),
                    rs.getString("NombreQ"),
                    rs.getString("ApellidosQ"),
                    rs.getString("TelefonoQ"),
                    rs.getString("CedulaQ"));
            } else {
                throw new Exception ("Persona no encontrada intentelo de nuevo.");
            }
        }
    }
}

请注意,try with resources总是以与获取相反的顺序关闭分配的所有内容。

异常应该告诉您导致问题的语句,因此您应该知道要调试的代码块。此代码将导致资源泄漏,但我不知道它将如何导致给定的异常,可能是ejutarsql方法中的某些东西?显示更多代码和stacktrace。告诉我们发生异常的行,并显示调用的方法的代码。getConector()似乎正在重用单例连接,是的。
public Querellante buscarQuerellante(String cedula) throws java.sql.SQLException,Exception{
    String sql = "SELECT DireccionQ,NombreQ,ApellidosQ,TelefonoQ,CedulaQ "+
        "FROM tquerellante "+
        "WHERE CedulaQ=?";
    try (Connnector conn = ...; // TODO
        PreparedStatement ps = conn.prepareStatement(sql);
        )
    {
        ps.setObject(1, cedula);
        try (ResultSet rs = ps.execute())
        {
            if (rs.next()){
                return new Querellante(
                    rs.getString("DireccionQ"),
                    rs.getString("NombreQ"),
                    rs.getString("ApellidosQ"),
                    rs.getString("TelefonoQ"),
                    rs.getString("CedulaQ"));
            } else {
                throw new Exception ("Persona no encontrada intentelo de nuevo.");
            }
        }
    }
}