Boa Noite.
Estou com um problema ao popular uma Grid com os resultados da pesquisa do banco de dados.
Para popular a Grid eu uso uma pagina jsp com xml nela. Essa pagina contém a chamada de conexão com o BD, algumas variaveis, o SELECT e o XML. Na outra pagina eu montei a Grid e apontei a pagina jsp para a mesma ser populada.
Porém…
O resultado do SELECT voltou com muito mais de 70 mil registros. Acontece que para realizar a consulta ele é rapido, mas para realizar a montagem do XML para popular a Grid demora muito tempo e no fim acaba dando erro na pagina.
Sei que tenho que aplicar um filtro para impedir que tudo se carregue de uma vez só, mas sou iniciante com tudo isso e ainda me confundo com algumas coisinhas. Alguém poderia me indicar algum tipo de filtro que possa me ajudar a solucionar o meu problema?
dhtmlxGrid + XML + JSP + BD
2 Respostas
Tudo isto em uma única página?
Posta os códigos para verificarmos.
Então, dei uma verificada e percebi que são mais de 2 milhões de registros no banco de dados. Se alguém decidir realizar uma pesquisa de 2007 até hoje e voltar tudo isso de resultados, é claro que a pagina não ira carregar.
<%
Connection conn = null;
ResultSet rs = null;
PreparedStatement ps = null;
String sql = "";
String data1 = request.getParameter("data1");
String data2 = request.getParameter("data2");
int i = 0;
try{
conn = CFactory.getConnection(-----);
}catch(SQLException e){
out.println("Erro: " + e);
}
%>
<rows>
<head>
<column id="cID" width="54" sort="int" type="ro">ID</column>
<column id="cData" width="65" sort="na" type="ro" >Data</column>
<column id="cSite" width="100" sort="na" type="ro" >Site</column>
<column id="cSecao" width="100" sort="int" type="ro" >Seção</column>
<column id="cInstituicao" width="150" sort="na" type="ro" >------</column>
<column id="cRGM" width="54" sort="int" type="ro" >------</column>
</head>
<%
try {
sql="SELECT ID, " +
" TO_CHAR(DATA, 'DD/MM/YYYY') DATA," +
" SITE, " +
" SECAO, " +
" DECODE (LOG_INTERNET.COD_INST,1,'-------) Cod_Insti, " +
" RGM_ALUN " +
"FROM LOG_INTERNET " +
"WHERE ( DATA BETWEEN TO_DATE(?, 'DD/MM/YYYY') AND TO_DATE(?, 'DD/MM/YYYY') ) OR ( DATA BETWEEN TO_DATE(?, 'DD/MM/YYYY') AND TO_DATE(?, 'DD/MM/YYYY') )";
ps = conn.prepareStatement(sql);
ps.setString(1, data1);
ps.setString(2, data2);
ps.setString(3, data2);
ps.setString(4, data1);
rs = ps.executeQuery();
while (rs.next()) {
i++;
out.println("\t<row id=\""+i+"\">");
out.println("\t\t<cell><![CDATA["+rs.getString("id")+"]]></cell>");
out.println("\t\t<cell><![CDATA["+rs.getString("DATA")+"]]></cell>");
out.println("\t\t<cell><![CDATA["+rs.getString("site")+"]]></cell>");
out.println("\t\t<cell><![CDATA["+rs.getString("secao")+"]]></cell>");
out.println("\t\t<cell><![CDATA["+rs.getString("COD_INSTi")+"]]></cell>");
out.println("\t\t<cell><![CDATA["+rs.getString("------")+"]]></cell>");
out.println("\t</row>");
}
} catch(Exception e) {
out.println("Erro: " + e);
} finally {
out.println("</rows>");
if (rs != null)
rs.close();
if (conn != null)
conn.close();
}
%>
Bom, ai esta o jsp com xml responsavel por popular a Grid. Como podem ver, coloquei uma condição WHERE para dar uma filtrada no resultado.
Porém… Como eu vou dizer ao usuario que ele não pode realizar uma pesquisa de 3 anos pois vai dar erro e a pagina não ira carregar?
Tem alguma outra forma de resolver isso?
Vi que com a ferramenta connector do dhtmlx + grid resolve esse problema, porém, me parece que ele só funciona com php por enquanto.
Alguém poderia me dizer se essa informação procede?
OBS: as partes com ------ não estão erradas. Apenas tirei as informações contidas ali por segurança.