dhtmlxGrid + XML + JSP + BD

2 respostas
N

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?

2 Respostas

drsmachado

Tudo isto em uma única página?
Posta os códigos para verificarmos.

N

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.

Criado 11 de fevereiro de 2011
Ultima resposta 16 de fev. de 2011
Respostas 2
Participantes 2