Pessoal, tenho uma funcionalidade (que está ok) que recebe ou não parâmetro de uma lista… só que vou ter que aumentar esse SELECT, colocando um UNION, ou seja, agora terá que repetir as condições… só que não sei como gravar essas condições para apenas adicionar…
Consulta SQL fixa (ONDE EU QUERO E PRECISO ADICIONAR UM UNION):
private static final String SQL_ATUAL = " SELECT (SELECT Dominio.Nome FROM Dominio WHERE Dominio.Codigo = Dispositivo.CodigoTecnologia) AS CodTecnologia, "
+ "(SELECT Dominio.Nome FROM Dominio WHERE Dominio.Codigo = SIMCard.CodigoOperadora) AS Operadora, "
+ "(SELECT Dominio.Nome FROM Dominio WHERE Dominio.Codigo = Linha.CodigoStatusLinha) AS StatusLinha, "
+ "COUNT(*) as Quantidade "
+ "FROM SIMCard LEFT JOIN SIMCardDispositivo ON SIMCardDispositivo.SIMCard_Numero = SIMCard.Numero "
+ "LEFT JOIN Dispositivo ON Dispositivo.Numero = SIMCardDispositivo.Dispositivo_Numero "
+ "INNER JOIN Linha ON Linha.Numero = SIMCard.NumeroLinha "
+ "LEFT JOIN Processamento ON (Processamento.Codigo = SIMCard.CodigoProcessamento OR Processamento.Codigo = Dispositivo.CodigoProcessamento) "
+ "WHERE (";
segue minha classe:
StringBuilder sql = new StringBuilder("");
public List<ConsultaGerarRelatorio> listaTecnologias(
List<Integer> tecnologias, List<Integer> operadoras,
List<Integer> status) {
Connection conn = null;
PreparedStatement ps = null;
List<ConsultaGerarRelatorio> listaConsultaGeraRelatorio = new ArrayList<ConsultaGerarRelatorio>();
if (!tecnologias.isEmpty()) {
sql.append(" Dispositivo.CodigoTecnologia IN (");
for (Iterator<Integer> it = tecnologias.iterator(); it.hasNext();) {
it.next();
sql.append("?");
if (it.hasNext()) {
sql.append(",");
}
}
sql.append(")");
}
if (!operadoras.isEmpty()) {
if (!tecnologias.isEmpty()) {
sql.append(" AND SIMCard.CodigoOperadora IN (");
for (Iterator<Integer> it = operadoras.iterator(); it.hasNext();) {
it.next();
sql.append("?");
if (it.hasNext()) {
sql.append(",");
}
}
sql.append(")");
} else {
sql.append(" SIMCard.CodigoOperadora IN (");
for (Iterator<Integer> it = operadoras.iterator(); it.hasNext();) {
it.next();
sql.append("?");
if (it.hasNext()) {
sql.append(",");
}
}
sql.append(")");
}
}
if (!status.isEmpty()) {
if (!tecnologias.isEmpty() || !operadoras.isEmpty()) {
sql.append(" AND Linha.CodigoStatusLinha IN (");
for (Iterator<Integer> it = status.iterator(); it.hasNext();) {
it.next();
sql.append("?");
if (it.hasNext()) {
sql.append(",");
}
}
sql.append(")");
} else {
sql.append(" Linha.CodigoStatusLinha IN (");
for (Iterator<Integer> it = status.iterator(); it.hasNext();) {
it.next();
sql.append("?");
if (it.hasNext()) {
sql.append(",");
}
}
sql.append(")");
}
}
sql.append(" )");
try {
conn = ConnectionManager.obterConexao();
ps = conn.prepareStatement(SQL_ATUAL + sql.toString() + GROUP);
int indicePs = 1;
if (!tecnologias.isEmpty()) {
for (Integer i : tecnologias) {
ps.setInt(indicePs++, i);
}
}
if (!operadoras.isEmpty()) {
for (Integer i : operadoras) {
ps.setInt(indicePs++, i);
}
}
if (!status.isEmpty()) {
for (Integer i : status) {
ps.setInt(indicePs++, i);
}
}
System.out.println("Consulta: " + SQL_ATUAL + sql.toString()
+ GROUP);
ResultSet rs = ps.executeQuery();
while (rs.next()) {
ConsultaGerarRelatorio listaRelatorio = new ConsultaGerarRelatorio(
rs.getString("CodTecnologia"),
rs.getString("Operadora"), rs.getString("StatusLinha"),
rs.getString("Quantidade"));
listaConsultaGeraRelatorio.add(listaRelatorio);
System.out.println(rs.getString("CodTecnologia") + " "
+ rs.getString("Operadora") + " "
+ rs.getString("StatusLinha") + " "
+ rs.getString("Quantidade"));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
ConnectionManager.fecharConexao(conn, null, ps);
}
return listaConsultaGeraRelatorio;
}