ResulSet Retornando Zero

Pessoal,

Criei um Servlet para buscar o nome das cidades no mysql baseado no estado. Quando passo para o servlet a UF do estado, o ResultSet traz os valores corretamente, quando passo o ID do estado, o ResultSet retorna vazio.

Nos dois casos, se eu pegar a query gerada, o mysql retorna corretamente as cidades, passando o ID ou a UF.

Esse é o meu Servlet:

import java.io.IOException;
import java.io.StringWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import br.com.guiatelesul.sig.models.tables.CityTableModel;

public class GetCitiesByStateServlet extends HttpServlet {

	private static final long serialVersionUID = 1L;

	public GetCitiesByStateServlet() {

	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		if(request.getParameter("q").isEmpty() == false || request.getParameter("q") != null){

			CityTableModel[] cities = null;

			try {
				Class.forName("com.mysql.jdbc.Driver");
				Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/BD", "USER",
						"PASS");
				Statement st = con.createStatement();

				String query = "select cit_ID,cit_NAME from wp_city,wp_state where cit_IDSTATE = sta_ID and (sta_SHORTNAME = '"
						+ String.valueOf(request.getParameter("q")) + "' or sta_ID = '" + String.valueOf(request.getParameter("q"))
						+ "') order by cit_NAME";
				ResultSet rs = st.executeQuery(query);

				rs.last();
				cities = new CityTableModel[rs.getRow()];
				rs.first();

				if (cities.length > 0) {
					int count = 0;
					do {
						cities[count] = new CityTableModel();
						cities[count].setId(Long.parseLong(rs.getString(1))); 
						cities[count].setName(rs.getString(2));
						count++;
					} while (rs.next());
				}
			} catch (Exception e) {
				e.printStackTrace();
			}

			ObjectMapper objectMapper = new ObjectMapper();

			// configure Object mapper for pretty print
			objectMapper.configure(SerializationFeature.INDENT_OUTPUT, true);

			// writing to console, can write to any output stream such as file
			StringWriter stringEmp = new StringWriter();
			objectMapper.writeValue(stringEmp, cities);

			response.setContentType("application/json");
			response.getWriter().print(stringEmp);
		}

	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

	}
}

Poderiam me ajudar?

o campo sta_ID no MySQL está definido como VARCHAR ou INT se for int, vc não precisará do valueOf e nem das aspas simples.

Obs.: Para o campo sta_ID o campo nome não precisa mexer

Dai vai buga quando for pesquisa por nome.

O campo sta_ID está como INT. Se eu retirar o “String.valueOf” funciona do mesmo jeito apenas se o parametro passado for o Nome. Se eu passar o ID não funciona.

String query = "select cit_ID,cit_NAME from wp_city,wp_state where cit_IDSTATE = sta_ID and (sta_SHORTNAME = '"
					+ String.valueOf(request.getParameter("q")) + "' or sta_ID = " + request.getParameter("q")
					+ ") order by cit_NAME";

mais pera um pouco o seu “q” que vc recebe com request chega o que??

Chega 30019 e RJ, por exemplo.

A query fica desses 2 jeitos:

select cit_ID,cit_NAME from wp_city,wp_state where cit_IDSTATE = sta_ID and (sta_SHORTNAME = ‘RJ’ or sta_ID = ‘RJ’) order by cit_NAME

select cit_ID,cit_NAME from wp_city,wp_state where cit_IDSTATE = sta_ID and (sta_SHORTNAME = ‘30019’ or sta_ID = ‘30019’) order by cit_NAME

No mysql as duas funcionam sem problemas

ha intendi, intão vc tem 2 campos no sua jsp, certo, pois bem, intão no campo de UF no parametro name do input text vc poe uf e no parametro de id vc poe q e depois vc faz a mesma coisa que vc fez para o q no Servlet só q agora pegando o valor de uf onde é pra por uf e id no campo sta_ID só não esqueça de tirar as aspas simples desse campo, já no campo sta_SHORTNAME vc deixa como está. ficando assim:

select cit_ID,cit_NAME from wp_city,wp_state where cit_IDSTATE = sta_ID and (sta_SHORTNAME = 'RJ' or sta_ID = 30019) order by cit_NAME

Não… Esse valor vem de um select no jsp. Esse select pode conter o ID do estado ou a UF do estado. A Servlet recebe apenas um parâmetro, que pode ser o ID ou a UF.

bom intão a coisa vai ficar bem desafiadora:
1º: como é esse select q está vindo da jsp
2º a partir de q ponto vc vai tirar o uf e o id
3º é garantido q nesse uf vai ser uma string e o id vai ser um numero

com essas opções em mãos vc consegue dar conta

obrigado pela ajuda ai…
Vou ver o que consigo aqui