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?
*/
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.
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.