Sim, eu declaro os ResultSet’s na minha classe e uso eles em todos os métodos da classe.
Mas eu fecho todos depois de usa-los !!!
segue uma das classes chamadas pelo TaskManager.
package br.com.jpessoa.sendreport;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Properties;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileNotFoundException;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import net.sf.jasperreports.engine.JRResultSetDataSource;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import br.com.jpessoa.bd.TelaEmail;
import br.com.jpessoa.bd.MailText;
import br.com.jpessoa.diversos.Formatados;
public class Bol_Consumo_Combustivel {
/**
* Boletim de Consumo de Comnustivel - Envio Semanal - tela = 375
* Envio c/ informações da semana anterior
* Setor: Motomecanização.
* Criado em 15/10/2008.
* André Hebeler.
*
* ***BOLETIM DESATIVADO***
*/
/* Variáveis de configuração */
private String urlBase;
private String pageRoot;
private String dt_atual = new Formatados().data(-1);
private String dt_ini = new Formatados().data(-7);
/* Variável que indica a tela que deve ser enviada */
private int id_tela = 375;
/* Variáveis de controle de visualização do boletim */
private String dia_mes = (new Formatados().data().substring(0,2) + new Formatados().data().substring(3,5));
private String anexo = id_tela + dia_mes + "Boletim_Consumo_Combustivel.pdf";
private String cod_rel = id_tela + dia_mes;
/* Data e hora dos dados para envio do Boletim de Consumo de Combustivel */
private String dt_boletim = "";
private String hr_boletim = "";
/* Hora de envio do Boletim de Consumo de Combustivel */
private String hr_envio = "";
/* Variáveis de consulta a banco de dados */
private String sql = "";
private Connection conn_jpdw = null;
private Connection conn_prod = null;
private PreparedStatement pstmt = null;
private ResultSet rs_jpdw = null;
private ResultSet rs_jpdw_laco = null;
private ResultSet rs_jpdw_empresa = null;
private ResultSet rs_prod = null;
private TelaEmail tela_email = new TelaEmail();
private MailText mailtext = new MailText();
public Bol_Consumo_Combustivel(String urlBase, String pageRoot) {
this.urlBase = urlBase;
this.pageRoot = pageRoot;
}
private boolean VerificaPeriodo(GregorianCalendar vd_inicio, GregorianCalendar vd_meio) {
GregorianCalendar vd_fim ;
if (vd_inicio.get(Calendar.MINUTE) > -1 && vd_inicio.get(Calendar.MINUTE) < 15 ) {
vd_inicio.set(Calendar.MINUTE,0 ) ;
} else
if (vd_inicio.get(Calendar.MINUTE) > 14 && vd_inicio.get(Calendar.MINUTE) < 30 ) {
vd_inicio.set(Calendar.MINUTE,15) ;
} else
if (vd_inicio.get(Calendar.MINUTE) > 29 && vd_inicio.get(Calendar.MINUTE) < 45 ) {
vd_inicio.set(Calendar.MINUTE, 30) ;
} else
if (vd_inicio.get(Calendar.MINUTE) > 44 && vd_inicio.get(Calendar.MINUTE) <= 59 ) {
vd_inicio.set(Calendar.MINUTE,45) ;
}
vd_fim = (GregorianCalendar)vd_inicio.clone() ;
vd_fim.add(Calendar.MINUTE,15) ;
if (vd_inicio.before(vd_meio) && vd_fim.after(vd_meio)) {
return true ;
} else {
return false ;
}
}
public void processo(Connection conn_jpdw, Connection conn_prod) {
this.conn_jpdw = conn_jpdw;
this.conn_prod = conn_prod;
dt_atual = new Formatados().data(-1);
GregorianCalendar vd_agora = new GregorianCalendar() ;
GregorianCalendar vd_agenda = new GregorianCalendar() ;
System.out.println(" Iniciando o processo de verificação do Boletim de Consumo de Combustivel: " + vd_agora.getTime());
try {
System.out.println(" Verificando agenda ...");
sql = "";
sql+= "select t.id_tela, t.hora_agendamento, to_char(tea.data,'dd/mm/rrrr hh24:mi') dt_envio, to_char(tea.data-1,'dd/mm/rrrr') dt_boletim, tea.repeticao";
sql+= " from portaljp.seg_tela_email_agenda tea";
sql+= " , portaljp.seg_tela t";
sql+= " where t.id_tela = ?";
sql+= " and tea.id_tela = t.id_tela";
pstmt = conn_jpdw.prepareStatement(sql);
pstmt.setInt(1, id_tela);
rs_jpdw = pstmt.executeQuery();
rs_jpdw.next();
dt_boletim = rs_jpdw.getString("dt_boletim");
hr_boletim = rs_jpdw.getString("hora_agendamento");
hr_envio = rs_jpdw.getString("dt_envio").substring(11,16);
vd_agenda.set(Calendar.DAY_OF_MONTH,Integer.parseInt(rs_jpdw.getString("dt_envio").substring(0,2)));
vd_agenda.set(Calendar.MONTH,Integer.parseInt(rs_jpdw.getString("dt_envio").substring(3,5))-1);
vd_agenda.set(Calendar.YEAR,Integer.parseInt(rs_jpdw.getString("dt_envio").substring(6,10)));
vd_agenda.set(Calendar.HOUR_OF_DAY,Integer.parseInt(rs_jpdw.getString("dt_envio").substring(11,13)));
vd_agenda.set(Calendar.MINUTE,Integer.parseInt(rs_jpdw.getString("dt_envio").substring(14,16))+2);
rs_jpdw.close();
pstmt.close();
if (VerificaPeriodo(vd_agora, vd_agenda)) {
/* Verificando se é dia e hora de envio */
if (dt_boletim.equals(dt_atual)){
if (hr_envio.equals(hr_boletim)){
System.out.println(" Enviando os Boletim de Consumo de Combustivel de todas as unidades");
sql = "";
sql+= " select cod_empresa,to_char(sysdate, 'MM') mes_corrente,to_char(sysdate, 'YYYY') ano_corrente from portaljp.seg_empresa where planta = 1 and cod_empresa in ('01') ";
pstmt = conn_jpdw.prepareStatement(sql);
rs_jpdw_laco = pstmt.executeQuery();
while(rs_jpdw_laco.next()){
System.out.println(" Preparando para o envio do boletim da Unidade: " + rs_jpdw_laco.getString("cod_empresa"));
geraAnexo(rs_jpdw_laco.getString("cod_empresa"));
}
rs_jpdw_laco.close();
System.out.println(" Reagendando para a semana seguinte.");
/* Relatório Agendado SEMANAL */
sql = "";
sql+= "update portaljp.seg_tela_email_agenda ";
sql+= " set data = to_date(to_char(data + 7, 'dd/mm/rrrr') || '" + hr_boletim.trim() + "','dd/mm/rrrr hh24:mi') ";
sql+= " where id_tela = ?";
pstmt = conn_jpdw.prepareStatement(sql);
pstmt.setInt(1, id_tela);
pstmt.executeUpdate();
}
}
}
pstmt.close();
}catch (SQLException e) {
e.printStackTrace();
}
}
private void geraAnexo(String cod_empresa) {
Calendar vd_data = Calendar.getInstance();
vd_data.add(Calendar.DAY_OF_MONTH, -1);
try {
dt_atual = new Formatados().data(-1);
String vs_relatorio = "rel_core/agricola/report/Siagri_Consumo_Combustivel.jrxml";
String script = pageRoot + urlBase + "rel_core/agricola/sql/consumo_combustivel.txt";
/* Gerando o boletim */
BufferedReader archive;
archive = new BufferedReader(new FileReader(script));
/* Extraindo a instrução SQL do arquivo .txt */
sql = "";
try{
while(archive.ready()){
sql+= archive.readLine() + " ";
}
archive.close();
}catch(FileNotFoundException e){
e.printStackTrace();
}
/* Ativando/Desativando as macros do script */
/* Macro referente ao campo Período - Obrigatória */
sql = sql.replace("$MACRO_CAMPO_01", "'" + dt_ini + " à " + dt_atual + "' PERIODO");
/* Macro referente ao parametro código da empresa - Obrigatória */
sql = sql.replace("$MACRO_PARAM_01", "'" + cod_empresa + "'");
/* Macro referente ao parametro Data Inicial - Obrigatória */
sql = sql.replace("$MACRO_PARAM_02", "'" + dt_ini + "'");
/* Macro referente ao parametro Data Final - Obrigatória */
sql = sql.replace("$MACRO_PARAM_03", "'" + dt_atual + "'");
/* Macro referente ao parametro Frota - Não Obrigatória */
sql = sql.replace("$MACRO_01", "");
/* Macro referente ao parametro Tipo Proprietário - Não Obrigatória */
sql = sql.replace("$MACRO_02", "");
pstmt = conn_prod.prepareStatement(sql);
rs_prod = pstmt.executeQuery();
if (rs_prod.next()){
rs_prod.close();
pstmt.close();
pstmt = conn_prod.prepareStatement(sql);
rs_prod = pstmt.executeQuery();
JRResultSetDataSource jrRS = new JRResultSetDataSource(rs_prod);
JasperReport relatorio = JasperCompileManager.compileReport(pageRoot + urlBase + vs_relatorio);
JasperPrint impressao = JasperFillManager.fillReport(relatorio, new HashMap(), jrRS);
JasperExportManager.exportReportToPdfFile(impressao, pageRoot + urlBase + "relatorios/" + cod_empresa + anexo);
//Inserção na tabela de controle de Boletins Gerados na pasta
sql="";
sql = " insert into portaljp.envio_boletim (codigo, nome) values (?,?) ";
PreparedStatement pstmt = conn_jpdw.prepareStatement(sql);
pstmt.setString(1, cod_empresa + cod_rel);
pstmt.setString(2, cod_empresa + anexo);
pstmt.executeUpdate();
pstmt.close();
envio(cod_empresa);
rs_prod.close();
pstmt.close();
}else{
rs_prod.close();
pstmt.close();
System.out.println(" Unidade " + cod_empresa + " sem informações para o período");
}
} catch(Exception e) {
e.printStackTrace();
}
}
private void envio(String cod_empresa){
try {
PreparedStatement preparedstatement = conn_jpdw.prepareStatement("select nome_empresa from portaljp.seg_empresa where cod_empresa = ?");
preparedstatement.setString(1, cod_empresa);
rs_jpdw_empresa = preparedstatement.executeQuery();
rs_jpdw_empresa.next();
String mailsubject = "Bol. Consumo Combustivel: " + rs_jpdw_empresa.getString("nome_empresa");
String nome = "Boletim de Consumo de Combustivel";
String periodo = "Envio semanal, toda segunda-feira c/ período de informações referente a semana anterior.";
String setor = "Motomecanização.";
String link = "<a href='http://10.0.99.33:8088/sic/relatorios/relatorio.jsp?id=" + cod_empresa + cod_rel + "&dt_hr=" + dt_boletim + " " + hr_boletim + "'> ";
dt_atual = new Formatados().data();
String unidade = (String)rs_jpdw_empresa.getString("nome_empresa");
// Mensagem SEM ANEXO
preparedstatement = conn_jpdw.prepareStatement(tela_email.sql_select_empresa_sem_anexo);
preparedstatement.setInt(1, id_tela);
preparedstatement.setString(2, cod_empresa);
preparedstatement.setString(3, cod_empresa);
rs_jpdw = preparedstatement.executeQuery();
if(rs_jpdw.next()){
/* Mensagem do corpo do email em HTML */
String mensagem = mailtext.retornaMailTextLink(nome, dt_atual, unidade, link, periodo, setor);
// Captura as configurações do sistema
Properties props = System.getProperties();
// Setup do servidor de email (POP3)
props.put("mail.smtp.host", "smtp.cbaa.ind.br");
// Cria sessão
Session sessao = Session.getInstance(props, null);
// Define mensagem
Message message = new MimeMessage(sessao);
message.setFrom(new InternetAddress("nao_responder@cbaa.ind.br","Tecnologia da Informação"));
// Define quem receberá a mensagem
String recipiente = "";
do{
recipiente = rs_jpdw.getString("email");
message.addRecipient(Message.RecipientType.BCC, new InternetAddress(recipiente));
} while (rs_jpdw.next());
message.setSubject(mailsubject);
MimeBodyPart mbp1 = new MimeBodyPart();
mbp1.setContent(mensagem, "text/html; charset=iso-8859-1");
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(mbp1);
message.setContent(multipart);
// Envia a mensagem
Transport.send(message);
System.out.println(" Enviando boletim da Unidade: " + cod_empresa + " sem anexo");
}else{
System.out.println(" " + cod_empresa + " não passui usuários sem anexo");
}
// Mensagem COM ANEXO
preparedstatement = conn_jpdw.prepareStatement(tela_email.sql_select_empresa_com_anexo);
preparedstatement.setInt(1, id_tela);
preparedstatement.setString(2, cod_empresa);
preparedstatement.setString(3, cod_empresa);
rs_jpdw = preparedstatement.executeQuery();
if(rs_jpdw.next()){
String mailfilename = cod_empresa + anexo;
/* Mensagem do corpo do email em HTML */
String mensagem = mailtext.retornaMailTextAnexo(nome, dt_atual, unidade, periodo, setor);
// Captura as configurações do sistema
Properties props = System.getProperties();
// Setup do servidor de email (POP3)
props.put("mail.smtp.host", "smtp.cbaa.ind.br");
// Cria sessão
Session sessao = Session.getInstance(props, null);
// Define mensagem
Message message = new MimeMessage(sessao);
message.setFrom(new InternetAddress("nao_responder@cbaa.ind.br","Tecnologia da Informação"));
// Define quem receberá a mensagem
String recipiente = "";
do{
recipiente = rs_jpdw.getString("email");
message.addRecipient(Message.RecipientType.BCC, new InternetAddress(recipiente));
} while (rs_jpdw.next());
message.setSubject(mailsubject);
MimeBodyPart mbp1 = new MimeBodyPart();
mbp1.setContent(mensagem, "text/html; charset=iso-8859-1");
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(mbp1);
// Cria a outra parte do corpo da mensagem
BodyPart bp3 = new MimeBodyPart();
// Captura o arquivo anexo
DataSource source = new FileDataSource(pageRoot + urlBase + "relatorios/" + cod_empresa + anexo);
bp3.setDataHandler(new DataHandler(source));
bp3.setFileName(mailfilename);
// Adiciona no corpo da mensagem
multipart.addBodyPart(bp3);
message.setContent(multipart);
// Envia a mensagem
Transport.send(message);
System.out.println(" Enviando boletim da Unidade: " + cod_empresa + " com anexo");
}else{
System.out.println(" " + cod_empresa + " não passui usuários com anexo");
}
rs_jpdw.close();
rs_jpdw_empresa.close();
}catch(Exception e){
e.printStackTrace();
}
}
}