paginação usando servlet

Bom dia para todos

Estou fazendo uma pagina que recebe o resultado de uma consulta. nessa pagina tenho que fazer uma paginação, o erro que da é esse:
"Falha na conexão! Erro: null " o codigo fonte é esse:

import java.io.*;
import java.net.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;

public class consultadados extends HttpServlet {
        
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();

                out.println("<center>");
                out.println("<a href=index.jsp>Nova Consulta</a");
                out.println("<hr>");
                out.println("</center>");
                out.println("<html>");
                out.println("<head>");
                out.println("<title>Listagem por Estado</title>");
                out.println("</head>");
                out.println("<body>");
                out.println("<form name=\"pagina\" action=\"/email/consultadados\" >");
                out.println("<center>");
                out.println("<table border=1 style=border-collapse:collapse>");
                out.println("<tr>");
                out.println("&nbsp;");
                out.println("<td> Nome/Razão Social</td>");
                out.println("<td> Apelido/Nome Fantasia </td>");
                out.println("<td> Cidade </td>");
                out.println("<td> Estado </td>");
                out.println("</tr>");

        String apelidofantasia = request.getParameter("campoconsultaapelido");
        String nomerazao = request.getParameter("campoconsultanomerazao");
        String estado = request.getParameter("campoestado");
        String cidade = request.getParameter("campocidade");
        int a=1;
        int c=0;
        
        Connection con;
        
        try{
            Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
            con = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;databaseName=bd_email;","sa","master");
            
            String pagina = request.getParameter("pagina"); // página atual
            if(pagina == null){
                pagina = "1";
            }
            
            int limit = 5; // quantidade de resultados por página
            Statement stm;
            ResultSet rs;
            stm = con.createStatement();            
            String sql = "";
            String sql1 = "";            
            int limitValue = (Integer.parseInt(pagina) * limit) - limit;  
            
            if(estado != ""){
                sql = "SELECT ID, NOMERAZAO, APELIDOFANTASIA, CIDADE, ESTADO FROM DADOS WHERE ESTADO='"+estado+"' SET ROWCOUNT "+limitValue+""+limit+"";
                sql1 = "SELECT COUNT(*) AS c FROM DADOS WHERE ESTADO='"+estado+"'";
            }if(cidade != ""){
                sql = "SELECT ID, NOMERAZAO, APELIDOFANTASIA, CIDADE, ESTADO FROM DADOS WHERE CIDADE='"+cidade+"' SET ROWCOUNT "+limitValue+""+limit+"";
                sql1 = "SELECT COUNT(*) AS c FROM DADOS WHERE CIDADE='"+cidade+"'";
            }if(nomerazao != ""){
                sql = "SELECT ID, NOMERAZAO, APELIDOFANTASIA, CIDADE, ESTADO FROM DADOS WHERE NOMERAZAO LIKE '%"+nomerazao+"%' SET ROWCOUNT "+limitValue+""+limit+"";
                sql1 = "SELECT COUNT(*) AS c FROM DADOS WHERE NOMERAZAO LIKE '%"+nomerazao+"%'";
            }if(apelidofantasia != ""){
                sql = "SELECT ID, NOMERAZAO, APELIDOFANTASIA, CIDADE, ESTADO FROM DADOS WHERE APELIDOFANTASIA LIKE '%"+apelidofantasia+"%' SET ROWCOUNT "+limitValue+""+limit+"";
                sql1 = "SELECT COUNT(*) AS c FROM DADOS WHERE APELIDOFANTASIA LIKE '%"+apelidofantasia+"%'";
            }if(estado.equals("") && cidade.equals("") && nomerazao.equals("") && apelidofantasia.equals("")){
                response.sendRedirect("index.jsp?statusConsulta=Favor preencher pelo menos um dos campos acima!");
            }
            
            Statement stm1;
            ResultSet rs1;
            stm1 = con.createStatement();
            rs1 = stm1.executeQuery(sql1);
            rs1.next();
            int total_rows = Integer.parseInt(rs1.getString("c"));
            rs = stm.executeQuery(sql);
            if(rs.next()){
            do{
                out.println("<tr>");
                out.println("<td><a href=dados.jsp?id='"+rs.getInt("ID")+"'>"+rs.getString("NOMERAZAO")+"</a></td>");
                out.println("<td>"+rs.getString("APELIDOFANTASIA")+"</td>");
                out.println("<td>"+rs.getString("CIDADE")+"</td>");
                out.println("<td>"+rs.getString("ESTADO")+"</td>");
                out.println("</tr>");
                c=a++;
            }while(rs.next());
                out.println("</table>");
                out.println("</center>");
                out.println("Foram encontrados "+c+" registros");
                out.println("</form>");
                out.println("</body>");
                out.println("</html>");
             }else{
            response.sendRedirect("index.jsp?statusConsulta=Registro Inexistente");
            }
            
            int anterior;
            if(Integer.parseInt(pagina) != 1){
                anterior = Integer.parseInt(pagina) - 1; 
                out.println("<a href=?pagina=" + anterior + ">" + limit + " Anteriores</a>");
            }else
                out.println(limit + " Anteriores ");
            
            int numOfPages = total_rows / limit;  
            int i;
            
            for(i = 1; i <= numOfPages; i++){ 
                if(i == Integer.parseInt(pagina)){ 
                    out.println("<b>" + i + "</b> "); 
                }else{
                    out.println("<a href=?pagina=" + i + ">" + i + "</a> ");
                }
            }

            if((total_rows % limit) != 0){
                if(i == Integer.parseInt(pagina)){
                    out.println(i + " ");
                }else{
                    out.println("<a href=?pagina=" + i + ">" + i + "</a> ");
                }
            } 

            int proxima;
            if((total_rows - (limit * Integer.parseInt(pagina))) > 0){
                proxima = Integer.parseInt(pagina) + 1;
                out.println("<a href=?pagina=" + proxima + ">Próximos " + limit + "</a>");
            }else
                out.println("Próximos " + limit);

        }catch(Exception e){
            out.println("Falha na conexão! Erro: "+e.getMessage());
        }
    }
}

o que preciso fazer para funcionar?

em qual linha ele esta dando a exceção?
Faz alguma coisa do tipo, ir dando out.print(“aki foi”); em cada linha até descobrir em q linha dah exceção, aí posta aki!

ou de um printStackTrace() no catch, ou ainda pode usar o toString() em vez de getMessage().

Depois conta o que acontece!

Guilherme fiz o que vc falou coloquei toString no lugar de getMessage e a mensagem que da é essa: “java.lang.NullPointerException” pelo que vi no google isso quer dizer que o caminho que é especificado não existe. o que eu tenho que fazer para consertar isso

em qual linha eu não sei, o que acontece é o seguinte
faço a consulta e aparecem dez registros tudo numa página só e quando clico no link para próxima página ele da esse erro que comentei acima.
O que eu quero é que apareça 5 registos em uma página e mais 5 na proxima página no momento em que eu for clicar no link “próximo” ou no número da proxima página.

esste tipo de erro dá qd vc tenta usar uma variável q não existe, ou q está com valor null. Confere os nomes de cada variável q vc está usando pra ver se está tudo certo. Vc está puxando dados de uma um formulario, confere se os nome dos campos do formulário são os q vc ta tentando pegar msm.

Mas fica bem mais rapido se vc descobrir em qual linha ta dando a exceção. Na maioria das vezes q da erro em algum codigo q eu implemento, vou eleminando algumas linhas de codigo de (baixo para cima, na maioria das vezes) até sumir o erro, aí eu vou e trabalho no erro. Tenta descobrir em qual linha da exceção. Como disse, esse erro da qd vc tenta usar uma variavel q nao existe, ou nao foi iniciada.

Bom dia

Fiz o que vc tinha pedido samuelhenriquerj fui printando linha por linha e achei o problema.
Na segunda vez que a página é chamada o valor do “ESTADO, CIDADE, NOMERAZAO E APELIDOFANTASIA” fica nulo.

Pergunta…

Para que isso não aconteça é preciso usar o que?

Eu estava pensando aqui e sei-la, pode ser usado session?

Bom vou tentar isso se alguem souber e quiser postar aqui ficarei grato

Ahh uma observação mudei de banco, o codigo anterior que esta postado aqui a conexão é com sql server 2000, agora estou usando mysql. Motivo disso “não estou conseguindo fazer o sql para fazer a consulta para a paginação”

import java.io.*;
import java.net.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;

public class consultadados extends HttpServlet {
        
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();

                out.println("<center>");
                out.println("<a href=index.jsp>Nova Consulta</a");
                out.println("<hr>");
                out.println("</center>");
                out.println("<html>");
                out.println("<head>");
                out.println("<title>Listagem por Estado</title>");
                out.println("</head>");
                out.println("<body>");
                out.println("<form name=\"pagina\" action=\"/email/consultadados\" >");
                out.println("<center>");
                out.println("<table border=1 style=border-collapse:collapse>");
                out.println("<tr>");
                out.println("&nbsp;");
                out.println("<td> Nome/Razão Social</td>");
                out.println("<td> Apelido/Nome Fantasia </td>");
                out.println("<td> Cidade </td>");
                out.println("<td> Estado </td>");
                out.println("</tr>");

        String apelidofantasia = request.getParameter("campoconsultaapelido");
        String nomerazao = request.getParameter("campoconsultanomerazao");
        String estado = request.getParameter("campoestado");
        String cidade = request.getParameter("campocidade");
        int a=1;
        int c=0;
        
        Connection con;
        
        try{
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://localhost:82/bd_email","root","");
            
            String pagina = request.getParameter("pagina"); // página atual
            if(pagina == null){
                pagina = "1";
            }
            
            int limit = 5; // quantidade de resultados por página
            Statement stm;
            ResultSet rs;
            stm = con.createStatement();            
            String sql = "";
            String sql1 = "";            
            int limitValue = (Integer.parseInt(pagina) * limit) - limit;  
                out.println(estado); // aki não foi, o valores de comparação no select na segunda vez que a página é chamada fica nulo.
            if(estado != ""){
                sql = "SELECT ID, NOMERAZAO, APELIDOFANTASIA, CIDADE, ESTADO FROM DADOS WHERE ESTADO='"+estado+"' LIMIT "+limitValue+","+limit+"";
                sql1 = "SELECT COUNT(*) AS c FROM DADOS WHERE ESTADO='"+estado+"'";
            }if(cidade != ""){
                sql = "SELECT ID, NOMERAZAO, APELIDOFANTASIA, CIDADE, ESTADO FROM DADOS WHERE CIDADE='"+cidade+"' LIMIT "+limitValue+","+limit+"";
                sql1 = "SELECT COUNT(*) AS c FROM DADOS WHERE CIDADE='"+cidade+"'";
            }if(nomerazao != ""){
                sql = "SELECT ID, NOMERAZAO, APELIDOFANTASIA, CIDADE, ESTADO FROM DADOS WHERE NOMERAZAO LIKE '%"+nomerazao+"%' LIMIT "+limitValue+","+limit+"";
                sql1 = "SELECT COUNT(*) AS c FROM DADOS WHERE NOMERAZAO LIKE '%"+nomerazao+"%'";
            }if(apelidofantasia != ""){
                sql = "SELECT ID, NOMERAZAO, APELIDOFANTASIA, CIDADE, ESTADO FROM DADOS WHERE APELIDOFANTASIA LIKE '%"+apelidofantasia+"%' LIMIT "+limitValue+","+limit+"";
                sql1 = "SELECT COUNT(*) AS c FROM DADOS WHERE APELIDOFANTASIA LIKE '%"+apelidofantasia+"%'";
            }if(estado.equals("") && cidade.equals("") && nomerazao.equals("") && apelidofantasia.equals("")){
                response.sendRedirect("index.jsp?statusConsulta=Favor preencher pelo menos um dos campos acima!");
            }
            
            Statement stm1;
            ResultSet rs1;
            stm1 = con.createStatement();
            rs1 = stm1.executeQuery(sql1);
            rs1.next();
            int total_rows = Integer.parseInt(rs1.getString("c"));
            rs = stm.executeQuery(sql);
            if(rs.next()){
            do{
                out.println("<tr>");
                out.println("<td><a href=dados.jsp?id='"+rs.getInt("ID")+"'>"+rs.getString("NOMERAZAO")+"</a></td>");
                out.println("<td>"+rs.getString("APELIDOFANTASIA")+"</td>");
                out.println("<td>"+rs.getString("CIDADE")+"</td>");
                out.println("<td>"+rs.getString("ESTADO")+"</td>");
                out.println("</tr>");
                c=a++;
            }while(rs.next());
                out.println("</table>");
                out.println("</center>");
                out.println("Foram encontrados "+c+" registros");
                out.println("</form>");
                out.println("</body>");
                out.println("</html>");
             }else{
            response.sendRedirect("index.jsp?statusConsulta=Registro Inexistente");
            }
            
            int anterior;
            if(Integer.parseInt(pagina) != 1){
                anterior = Integer.parseInt(pagina) - 1; 
                out.println("<a href=?pagina=" + anterior + ">" + limit + " Anteriores</a>");
            }else
                out.println(limit + " Anteriores ");
            
            int numOfPages = total_rows / limit;  
            int i;
            
            for(i = 1; i <= numOfPages; i++){ 
                if(i == Integer.parseInt(pagina)){ 
                    out.println("<b>" + i + "</b> "); 
                }else{
                    out.println("<a href=?pagina=" + i + ">" + i + "</a> ");
                }
            }

            if((total_rows % limit) != 0){
                if(i == Integer.parseInt(pagina)){
                    out.println(i + " ");
                }else{
                    out.println("<a href=?pagina=" + i + ">" + i + "</a> ");
                }
            } 

            int proxima;
            if((total_rows - (limit * Integer.parseInt(pagina))) > 0){
                proxima = Integer.parseInt(pagina) + 1;
                out.println("<a href=?pagina=" + proxima + ">Próximos " + limit + "</a>");
            }else
                out.println("Próximos " + limit);

        }catch(Exception e){
            out.println("Falha na conexão! Erro: "+e.getMessage());
            out.println("Falha na conexão! Erro: "+e.getMessage());
        }
    }
}

no seu caso o melhor a usar é a Session msm, pois ela só vai expirar se vc quiser q ela expire explicitamente(ou se ele fechar a página). Se tiver alguma duvida no uso da Session pode postar.

Para armazenar em sessão:

request.setAttribute("nome_sessao",obj_armazenado); //Vc deve armazenar o OBJETO

Para resgatar de sessão:

request.getAttribute("nome_sessão"); //Retorna obj_armazenado 

samuelhenriquerj estava tentando achar o lugar onde colocar o codigo que vc me mandou, mas até agora nada, você pode me falar como que uso esse código?

velhinho to tentando fazer aqui mas até agora não consegui achar um jeito para fazer a Session receber o valor que deve receber. Como faço para a session receber o valor sem ter que usar o request.getparameter, quer dizer, será que tem algum jeito de fazer assim?

Galerinha, estou desenvolvendo um site para fazer uma consulta no banco de dados, e na hora que for feito a listagem da busca eu preciso fazer uma página no resultado.

Dei umá procurada na internet e achei um codigo que mostrar como fazer isso usando a linguagem sql do mysql, mas não obtive exito com esse código. Ai andei conversando com algumas pessoas e me falaram que isso é feito usando os recursos da linguagem usada.

Bom preciso muito fazer isso pois estou sendo muito cobrado pelo meu gerente por essa paginação dos resultados, já quebrei a cabeça uma semana em cima disso li vários artigos e ainda não consegui fazer nada. só falta isso pra mim terminar o site.

Se por um acaso alguem souber o que eu tenho que fazer ou se alguem tive a receita de bolo da paginação ficarei muito grato.