Multiplas buscas com Statement

olá, estou precisando fazer vários SELECT em algumas tabelas, mas sempre quando tento fazer uma pesquisa com um ResultSet aberto ele diz que: Operation not allowed after ResultSet closed.
Sei que não posso ter diferentes ResultSet’s ligados ao mesmo Statement. Então como faço para fazer pesquisas encadeadas?

Exemplo:

    private Endereco retornarEndereco(int id) throws SQLException
    {
        ResultSet rs = stmt.executeQuery("SELECT end_endereco, end_bairro, end_complemento, end_cep, fk_cod_estado, fk_cod_cidade FROM cur_endereco WHERE fk_pss_id = "+ id);
        rs.next();

        String end = rs.getString(1);
        String bar = rs.getString(2);
        String com = rs.getString(3);
        String cep = rs.getString(4);
        int est = rs.getInt(5);
        String sest = retornaEstado(est);
        int cid = rs.getInt(6);
        String scid = retornaCidade(cid);

        return new Endereco(end, bar, com, cep, sest, scid);
    }

    private String retornaEstado(int cod) throws SQLException
    {
        ResultSet rs = stmt.executeQuery("SELECT sgl_estado FROM estado WHERE cod_estado ="+ cod);
        rs.next();

        return rs.getString(1);
    }
    /*
     * Para eu saber a sigla do estado eu tenho qua procurar o código dela na tabela 'cur_endereco' e em seguida pegar a sigla do estado na tabela 'estado',
     * essa é minha dúvida, como eu faço essas pesquisas encadeadas?
     */

grato.

n axo q de pra fzer isso so com jdbc … ou vc faz tudo em um select … ou faz um por vez …
procura fechar a conexao … e o resultSet dps d kda query

com hibernate axo q tem como fzer esse “cascateamento” … n tem ?(qm mexe com hibernate me corrija)

Se vc quiser resolver esse problema sem utilizar hibernate terá que fazer um select parecido com o seguinte:

SELECT END.end_endereco,
            END.end_bairro,
            END.end_complemento,
            END.end_cep, 
            ( SELECT sgl_estado FROM estado WHERE cod_estado = END.fk_cod_estado ) As sgl_estado,
            END.fk_cod_cidade 
FROM cur_endereco END
WHERE fk_pss_id = " + id

Se eu não me engano, vc pode criar mais de um statment por conexão, (sem ter que fechar o anterior) ai pra fazer encadeamento é só ir criar um statment/resultset para cada SQL que for fazer. Não estou dizendo que é uma boa prática, mas acho que é possivel.

Se não for utilizar o hibernate, é melhor utilizar stored procedures que tragam o result set que vc deseja. Também não é um boa prática fazer select diretamente da aplicação, a aplicação não precisa saber o nome das tabelas nem das colunas da sua base de dados.

quer dizer que, não é aconselhavel usar JDBC e sim hibernate?
Por que assim estarei abistraindo a parte do banco de daos da minha aplicação, certo?

Eu não sou um usuário muito avançado, estou começando com hibernate agora, mas pelo que entendi sobre alguns projetos, leitura e conselhos de outros prograadores foi que para manter as regras de negócio na aplicação é bom utilizar hibernate.
Mas é melhor manter a regra de negócios no banco de dados do que ficar fazendo selects com joins em tabelas do banco direto da aplicação, para o caso de manutenção e da aplicação não precisar conhecer a estrutura completa do banco.