Desenvolvimento web - JAVA - página JSP retornando valores zerados

Alguém pode me ajudar a identificar o que há de errado no meu método??
Basicamente, eu quero retornar os dados do país com a maior população (Já há países inseridos no banco), mas a página JSP está apenas me retornando valores zero “0”;

Método:

public Pais maiorPopulacao(Pais pais) {
		Pais p = new Pais();
		String sqlSelect = "SELECT nome, populacao, area from Pais WHERE populacao=( SELECT max(populacao) FROM pais)";
		try(Connection conn = ConectionFactory.getConnection();
				PreparedStatement ps = conn.prepareStatement(sqlSelect);) {
			ps.setLong(1, p.getPopulacao());
					try(ResultSet rs = ps.executeQuery();) {
						if(rs.next()) {
							
							p.setNome(rs.getString("nome"));
							p.setPopulacao(rs.getLong("Populacao"));
						    p.setArea(rs.getDouble("Area"));
									
							
						}
					}catch (SQLException e) {
							e.printStackTrace();
							
						}
					}catch(SQLException e1) {
						System.out.println(e1.getStackTrace());
					}
		return p;
					
					
		}

Servlet:

 protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		PaisService ps = new PaisService();
		Pais p = new Pais();
		ps.maiorPopulacao(p);
		request.setAttribute("pais", p);
		RequestDispatcher dispatcher = request.getRequestDispatcher("MaiorPop.jsp");
		dispatcher.forward(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

no classe service:

public Pais maiorPopulacao(Pais pais) {
		return dao.maiorPopulacao(pais);
	}

e a página JSP, que deveria imprimir corretamente os dados do país com a maior população:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>PAÍS COM MAIOR POPULAÇÃO </title>
</head>
<body>
<table>
		<thead>
			<tr>
				<td>Nome</td>
				<td>Populacao</td>
				<td>Area</td>
			</tr>
		</thead>
		<tbody>
		
	
		<tr>
		<td>${pais.nome} </td>
		<td>${pais.populacao } </td>
		<td>${pais.area}</td>
		</tr>
		
			
	</table>
			
</body>
</html>

Você não esta atribuindo nenhum valor para o seu objeto p, logo estará tudo “zerado”

Entendi, infelizmente esse não dá pra fazer com o getParameter() ;kk, mas assim, pelo q eu tô vendo aqui, o valor para o objeto “p” que eu tenho q passar, vou ter q pegar do banco de dados né? pq é lá q eles se encontram no momento dessa busca… ou de alguma outra forma passando pelo PaisService > PaisDao > Pais

Mas você já não está indo no seu banco de dados? O seu método dao.maiorPopulacao() já não faz uma Query no banco de dados e te retorna o País de maior população?

O que está acontecendo é que você está criando um objeto Pais, iniciando ele com um construtor padrão (que começa com valores todos zerados), passando ele ao seu dao e é isso. O que é retornado do banco nunca é setado em lugar nenhum e o que você seta no seu Attribute do Request não é nada al[ém de um objeto Pais vazio com seus valores padrões.

Faça uma mudança simples, ao invés de

Pais p = new Pais();
ps.maiorPopulacao(p);

faça

Pais p = ps.maiorPopulacao();

Remova o parâmetro Pais do seu método que está ali pra nada. Você só passa parâmetro pra um método quando dentro desse método você vai usar o valor do parâmetro repassado.

Qualquer outra dúvida, posta aí. :wink:

Ví seu método do DAO, ele já faz isso e o seu parâmero pais está alí pra nada mesmo… :+1:

Entendi, mas o erro permanece mesmo alterando para a forma q você disse ai… mas a partir de agora pode deixar q eu me viro aqui pra arrumar isso! obrigado, esclareceu muitas coisas pra mim

E o que você tem no seu banco de dados? O que a consulta isolada retorna quando fazes ela pelo aplicativo do banco?

Opa, cara vou ser sincero, não tinha testado direto no banco pq tinha ctza que estava certo, testei agora e pra minha surpresa… é estava certo, tá retornando todos os dados do país com a maior população… Eu tinha dado uma pausa, mas vou voltar nesse problema agora, não durmo sem arrumar!

Finalmente consegui… fiz algumas alterações, a última delas foi remover o ps.setLong(1, p.getPopulacao()); do DAO, e tenho quase certeza que isso tava gerando o problema. Obrigado por me ajudar a compreender um pouco mais do assunto Adriano e Mike!