Então… eu vou postar as classes que eu uso e como faço depois voce adapta.
public void print(int first, int last) {
StringBuilder sql = new StringBuilder();
sql.append("SELECT ");
sql.append("motorista.nome AS motorista_nome,");
sql.append("veiculo.placa AS veiculo_placa,");
sql.append("empresa.cnpj AS empresa_cnpj,");
sql.append("empresa.bairro AS empresa_bairro,");
sql.append("empresa.cep AS empresa_cep,");
sql.append("empresa.cidade AS empresa_cidade,");
sql.append("empresa.endereco AS empresa_endereco,");
sql.append("empresa.uf AS empresa_uf,");
sql.append("empresa.ie AS empresa_ie,");
sql.append("empresa.razaoSocial AS empresa_razaoSocial,");
sql.append("ordemcoleta.cidade AS ordemcoleta_cidade,");
sql.append("ordemcoleta.descricao AS ordemcoleta_descricao,");
sql
.append("ordemcoleta.destinatario AS ordemcoleta_destinatario,");
sql.append("ordemcoleta.obs AS ordemcoleta_obs,");
sql.append("ordemcoleta.peso AS ordemcoleta_peso,");
sql.append("ordemcoleta.id AS ordemcoleta_id,");
sql.append("ordemcoleta.quantidade AS ordemcoleta_quantidade,");
sql.append("ordemcoleta.data AS ordemcoleta_data,");
sql
.append("ordemcoleta.localColeta AS ordemcoleta_localColeta,");
sql.append("ordemcoleta.operante AS ordemcoleta_operante,");
sql
.append("ordemcoleta.solicitante AS ordemcoleta_solicitante ");
sql.append("FROM ");
sql
.append("empresa INNER JOIN ordemcoleta ON empresa.id = ordemcoleta.remetente_fk ");
sql
.append("INNER JOIN veiculo ON ordemcoleta.veiculo_fk = veiculo.id ");
sql
.append("INNER JOIN motorista ON ordemcoleta.motorista_fk = motorista.id");
try {
InputStream stream = new FileInputStream(new File(
"C:/SisGenesis/report/ordemcoleta.jrxml"));
Report report = new Report(stream);
report.setSqlQuery(sql.toString());
report.appendWhere("ordemcoleta.id BETWEEN '" + first
+ "' AND '" + last + "' ");
JasperPrint print = report.fill(HibernateUtil.openSession()
.connection());
JasperViewer.viewReport(print, false,
new Locale("pt", "BR"));
} catch (Exception e) {
JOptionPane.showMessageDialog(null,
"Erro ao carregar o relatório.");
e.printStackTrace();
}
}
Class Report
package mark.utils.report;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRResultSetDataSource;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
public class Report {
private String sqlQuery;
private Map<String, Object> parameters;
private JasperReport report;
public Report(InputStream is) throws JRException {
if (is == null)
throw new IllegalArgumentException("InputStream can't be null!");
report = ReportUtils.loadReport(is);
sqlQuery = "";
parameters = new HashMap<String, Object>();
}
public Report(String fnm) throws IOException, JRException {
report = ReportUtils.loadReport(fnm);
sqlQuery = "";
parameters = new HashMap<String, Object>();
}
public void setSqlQuery(String sql) {
sqlQuery = sql;
}
public void appendWhere(String s) {
sqlQuery += " WHERE " + s;
}
public String getSqlQuery() {
return sqlQuery;
}
public void setParamaters(Map<String, Object> params) {
if (params == null)
throw new RuntimeException("The parameters cannot be null!");
parameters = params;
}
public void addParamater(String key, Object value) {
parameters.put(key, value);
}
public void addParamaters(Map<String, Object> otherParams) {
parameters.putAll(otherParams);
}
public Map<String, Object> getParamaters() {
return parameters;
}
public JasperReport getReport() {
return report;
}
public JasperPrint fill(Connection conn) throws JRException {
sqlQuery += ";";
if (!sqlQuery.equals(";"))
try {
return fillSql(conn);
} catch (SQLException e) {
throw new JRException(e);
}
else
return fill();
}
private JasperPrint fillSql(Connection conn) throws SQLException,
JRException {
PreparedStatement stm = conn.prepareStatement(sqlQuery);
ResultSet rs = stm.executeQuery();
JRDataSource dataSource = new JRResultSetDataSource(rs);
JasperPrint print = null;
print = JasperFillManager.fillReport(report, parameters, dataSource);
return print;
}
private JasperPrint fill() throws JRException {
JasperPrint print = null;
print = JasperFillManager.fillReport(report, parameters);
return print;
}
}
Class ReportUtils
package mark.utils.report;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
public class ReportUtils {
public static JasperPrint fillPrint(String fnm) throws IOException, JRException {
return fillPrint(fnm, new HashMap<String, Object>());
}
public static JasperPrint fillPrint(InputStream is) throws JRException {
return fillPrint(is, new HashMap<String, Object>());
}
public static JasperPrint fillPrint(String fnm, Map<String, Object> parameters)
throws IOException, JRException {
return fillPrint(loadReport(fnm), parameters);
}
public static JasperPrint fillPrint(InputStream is, Map<String, Object> parameters)
throws JRException {
return fillPrint(loadReport(is), parameters);
}
public static JasperPrint fillPrint(JasperReport jasperReport,
Map<String, Object> parameters) throws JRException {
JasperPrint print = null;
try {
print = JasperFillManager.fillReport(jasperReport, parameters);
} catch (JRException e) {
throw new JRException(e);
}
return print;
}
public static JasperReport loadReport(String fnm) throws IOException, JRException {
File jasperFile = new File(fnm);
if (jasperFile == null || jasperFile.exists())
throw new IOException("Error reading Jasper XML file: " + fnm);
FileInputStream is = new FileInputStream(jasperFile);
JasperReport report = loadReport(is);
is.close();
return report;
}
public static JasperReport loadReport(InputStream is) throws JRException {
JasperReport report = null;
try {
report = JasperCompileManager.compileReport(is);
} catch (JRException e) {
e.printStackTrace();
throw new JRException(e);
}
return report;
}
}
Não tive tempo ainda de melhorar elas ma por enquanto funciona.