Senhores, bom dia…
Preciso da ajuda dos senhores, o metodo abaixo esta dando o seguinte erro, será que alguem consegue me ajudar…estou a dois dias já tentando resolver…
public List listarDados(String cliente, String dtInicial, String dtFinal) throws DisponibilidadeRedeDaoException {
ArrayList lista = new ArrayList();
try {
try {
conn = ConnectionFactory.abreConexao();
} catch (NamingException e) {
System.out.println("Erro ao abrir a conexao...");
e.printStackTrace();
}
StringBuffer sql = new StringBuffer();
sql.append("Select ");
sql.append("e.ds_cliente as Cliente, ");
sql.append("g.ds_pais as Pais, ");
sql.append("h.ds_cidade as Cidade, ");
sql.append("a.cd_conexion as ID_Conexion, ");
sql.append("k.ds_es_produto as Servico, ");
sql.append("concat(cast(month(a.dt_encerramento) as char(3)),cast(year(a.dt_encerramento) as char(4))) as Data, ");
sql.append("round(((float((max(a.qt_tempo_medido)-");
sql.append("sum(a.qt_duracion_real_incid ))))/");
sql.append("(((max(a.qt_tempo_medido)))))*100,2) as percentual_disponibilidade, ");
sql.append("sum(a.vl_meta_di) as Meta ");
sql.append("from reparo_inter.fato_reparo_inter a, ");
sql.append("reparo_inter.dim_imputabilidade b, ");
sql.append("reparo_inter.dim_tp_incidencia d, ");
sql.append("geral.dim_cliente e, ");
sql.append("geral.dim_segmento_cliente f, ");
sql.append("geral.dim_pais g, ");
sql.append("geral.dim_cidade h, ");
sql.append("geral.dim_data i, ");
sql.append("geral.tb_de_para_cli_seg j, ");
sql.append("geral.dim_produto k, ");
sql.append("geral.dim_estado l, ");
sql.append("geral.dim_grupo_segmento_cliente m, ");
sql.append("geral.dim_grp_seg_cli_pai n ");
sql.append("where ");
sql.append("a.id_imputabilidade = b.id_imputabilidade ");
sql.append("and a.id_tp_incidencia = d.id_tp_incidencia ");
sql.append("and a.id_cliente = e.id_cliente ");
sql.append("and e.id_cliente = j.id_cliente ");
sql.append("and j.id_segmento_cliente = f.id_segmento_cliente ");
sql.append("and f.id_grupo_segmento_cliente = m.id_grupo_segmento_cliente ");
sql.append("and m.id_grp_seg_cli_pai = n.id_grp_seg_cli_pai ");
sql.append("and a.id_cidade = h.id_cidade ");
sql.append("and h.id_estado = l.id_estado ");
sql.append("and l.id_pais = g.id_pais ");
sql.append("and a.dt_encerramento = i.id_data ");
sql.append("and a.id_produto = k.id_produto ");
sql.append("and e.ds_cliente = '?' ");
sql.append("and b.ds_br_imputabilidade = 'TELEFONICA' ");
sql.append("and d.id_tp_incidencia = 3 ");
sql.append("and a.dt_encerramento between ? and ? ");
sql.append("group by ");
sql.append("e.ds_cliente, ");
sql.append("g.ds_pais, ");
sql.append("h.ds_cidade, ");
sql.append("a.cd_conexion, ");
sql.append("k.ds_es_produto, ");
sql.append("a.dt_encerramento ");
System.out.println(sql);
this.stmt = conn.prepareStatement(sql.toString());
System.out.println("preparou o sql");
int index = 1;
stmt.setString(index++, cliente);
//System.out.println("data pra envio "+DataInicialParaEnvio(dtInicial));
//System.out.println("data pra envio "+dataFinalParaEnvio(dtFinal));
stmt.setString(index++, DataInicialParaEnvio(dtInicial));
stmt.setString(index, dataFinalParaEnvio(dtFinal));
rs = stmt.executeQuery();
if (rs != null) {
while (rs.next()) {
index = 1;
DisponibilidadeRedeTo acompanhamento = new DisponibilidadeRedeTo();
acompanhamento.setCliente(rs.getString(index++));
//System.out.println(rs.getString(index++));
acompanhamento.setPais(rs.getString(index++));
//System.out.println(rs.getString(index++));
acompanhamento.setCidade(rs.getString(index++));
//System.out.println(rs.getString(index++));
acompanhamento.setConexao(rs.getString(index++));
//System.out.println(rs.getString(index++));
acompanhamento.setServico(rs.getString(index++));
//System.out.println(rs.getString(index++));
acompanhamento.setData(rs.getString(index++));
//System.out.println(rs.getString(index++));
acompanhamento.setPercentualDisponibilidade(rs.getString(index++));
//System.out.println(rs.getString(index++));
acompanhamento.setMeta(rs.getString(index++));
//System.out.println(rs.getString(index++));
lista.add(acompanhamento);
}
}
} catch (SQLException e) {
throw new DisponibilidadeRedeDaoException(e.getErrorCode(), e.getMessage());
}
finally{
closeResource();
}
System.out.println("saiu do dao");
return lista;
}
private String DataInicialParaEnvio(String data) {
StringBuffer retorno = new StringBuffer();
String [] separarData = data.split("/");
retorno.append(separarData[1]);
retorno.append('-');
retorno.append(separarData[0]);
retorno.append('-');
retorno.append("01");
return retorno.toString();
}
private String dataFinalParaEnvio(String data) {
StringBuffer retorno = new StringBuffer();
String dia = "31";
String [] separarData = data.split("/");
String mes = separarData[0];
if (mes.length() == 1) {
mes = '0' + mes;
}
String ano = separarData[1];
if (mes.equals("04") || mes.equals("06") || mes.equals("09") || mes.equals("11")) {
dia = "30";
} else if(mes.equals("02")) {
if (Integer.parseInt(ano)%4 == 0) {
dia = "29";
} else {
dia = "28";
}
}
Esta gerando o seguinte erro:
The number of host variables in the EXECUTE or OPEN statement is not equal to the number of values required.
Obrigado a todos…