Bom dia, minha dúvida é sobre alguns select dentro de um for que esta terminando em máximo de cursores excedidos.
Vi que existe um tópico sobre cursores abertos porém no meu caso é um pouco diferente,
tenho que fazer diversos select até que o for se acabe e então estoura o numero de cursores.
Segue o código:
PreparedStatement stmt = null;
ResultSet rs = null;
for (int i = 0; i < listaEmail.size(); i++) {
String idEmail = null;
boolean isEmail = false;
boolean isUC = false;
boolean isBlock = false;
String ucId = "";
try {
stmt = conn.prepareStatement("select id_email from mi_email where email = ?");
stmt.setString(1, listaEmail.get(i).getEmail());
rs = stmt.executeQuery();
if(rs.next()) {
idEmail = rs.getString("id_email");
isEmail = true;
}
stmt = conn.prepareStatement("select address_complement_uc, oid_uc from rs_uc where address_complement_uc = ? and oid_system = ?");
stmt.setString(1, listaEmail.get(i).getAddressCompUc());
stmt.setString(2, oidSystem);
rs = stmt.executeQuery();
if(rs.next()) {
isUC = true;
ucId = rs.getString("oid_uc");
}
stmt = conn.prepareStatement("select address_block_uc from rs_uc where address_block_uc = ? and oid_system = ?");
stmt.setString(1, listaEmail.get(i).getBloco());
stmt.setString(2, oidSystem);
rs = stmt.executeQuery();
if(rs.next()) {
isBlock = true;
}
} catch (SQLException ex) {
mensagem.put(idEmail, ex.getMessage());
ex.printStackTrace();
} finally {
try{rs.close();}catch (Throwable e) {}
try{stmt.close();}catch (Throwable e) {}
}
if (isEmail && isUC && isBlock) {
//verifico se ja nao estao relacionados e faço o relacioanmento
connectEmailUC(conn, idEmail, listaEmail.get(i).getAddressCompUc()+"", ucId, listaEmail.get(i).getBloco()+"" , user, oidSystem);
} else if (isUC && !isEmail) {
//cadastra email
registerEmail(conn, listaEmail.get(i).getEmail(), listaEmail.get(i).getAddressCompUc()+"", user, null);
} else if (!isUC && !isEmail) {
registerEmail(conn, listaEmail.get(i).getEmail(), null, user, null);
//Informar que nao existe UC e cadastrar email
} else if (!isUC && isEmail) {
// informar que nao existe UC e que email ja cadastrado
mensagem.put(idEmail, "O e-mail informado já existe, mas a Unidade Consumidora é inválida");
}
}
return mensagem;
}
Alguém poderia ajudar?
Obrigado!
