A útlima consulta sempre é retornada, mesmo que um dado inválido tenha sido pesquisado, com resolver

Boa Tarde Programadores!

Tudo bem com todos? Animados para o feriado?

Bom, o problema tá sendo o seguinte.

Eu tenho um midlet que acessa um servlet.

Primeiro é feito o login, em seguida é necessário fazer uma busca no banco.
Acontece que para o login, tudo ok, os tratamentos de erros, null pointers, etc… tudo funciona bem
Mas, quando vou realizar a pesquisa algo chato acontece.
Acompanhem meu raciocínio

  • O primeiro dado que eu pesquisar no banco nao existe de fato. Faço isto justamente para testar. É retornado então do servlet para a midlet uma mensagem de erro, dizendo que aquele dado não está cadastrado no banco. ótimo! Funciona se o dado invalido for pesquisado no primeiro acesso.
  • Agora vou pesquisar um dado que existe no banco. A servlet retorna para a midlet os dados pesquisados. òtimo. Também funcionou.
  • Faço outra pesquisa com outro dado válido. Também o resultado é positivo.
  • Agora faço uma busca com um dado inválido. O que acontece? A servlet retorna para a midlet os dados da última pesquisa realizada. Ou seja, é como se o que tivesse sido digitado no formulário existisse no banco de dados.

Estou tentando arrumar isto já há algum tempo. Já estou ficando sem esperanças pq por mais que refine o tratamento de null pointers, erros, etc, não estou conseguindo arrumar isto. Alguém poderia por favor me ajudar? Estou usando reescrita de url (pois preciso dela) Obrigada.

Vou postar uma parte dos códigos ( não vou colocar td pq está extenso). Por favor, compare se puder.

[size=18]SERVLET:[/size]

// se o comando que está chegando do cliente é o comando consultar placa else if (("consultarplaca").equals(command)) { // try principal try { // obtém informações da sessão HttpSession session = request.getSession(true); // se for uma sessão nova, reescreva o URL do cliente if (session.isNew()) { // obtém o URL String incomingURL = request.getRequestURL().toString(); // codifica e adiciona o ID de sessão no URL String URLwithID = response.encodeURL(incomingURL); // devolve um cabeçalho para o cliente, com o novo URL response.setHeader("Custom-newURL", URLwithID); }// fecha o if // lê a string login que vem do cliente String placa = dis.readUTF(); // escreve no console a string login que veio do cliente System.out.println("String placa: " + placa); // try 0 try { // se a string login que veio do cliente estiver vazia if (("").equals(placa)) { // escreve no console System.out.println("String vazia"); } else { // faz a busca no banco e retorna para o cliente // try 1 try { ps = this.con.prepareStatement(sqlb); ps.setString(1, placa); rs = ps.executeQuery(); //enquanto while (rs.next()) { // imprime no console o resultado da busca System.out.println("Placa: " + rs.getString("placa") + "| Chassi: " + rs.getString("chassi") + "| MarcaModelo: " + rs.getString("marcaModelo") + "| Proprietário: " + rs.getString("proprietario") + "| Cidade: " + rs.getString("cidade") + "| Estado: " + rs.getString("estado") + "| Cor: " + rs.getString("cor") + "| Espécie Tipo: " + rs.getString("especieTipo") + "| Combustível: " + rs.getString("combustivel") + "| Ano Modelo Fabricação: " + rs.getString("anoModFab") + "| Situacao: " + rs.getString("situacao")); // salva nas variáveis o resultado da pesquisa chassiResult = "" + rs.getString("chassi"); placaResult = rs.getString("placa"); mmResult = rs.getString("marcaModelo"); propResult = rs.getString("proprietario"); cityResult = rs.getString("cidade"); ufResult = rs.getString("estado"); corResult = rs.getString("cor"); esTpResult = rs.getString("especieTipo"); combResult = rs.getString("combustivel"); amfResult = rs.getString("anoModFab"); situResult = rs.getString("situacao"); }// fecha o while }// fecha o try 1 catch (Exception ex) { // imprime no console System.out.println("Passei no catch 1"); System.out .println("foi encontrado o seguinte erro: \n" + ex.getMessage()); ex.printStackTrace(); }// fecha o catch 1 // try 2 try { // retorna para o cliente o resultado da busca response.setContentType("text/plain"); dos.writeUTF(placaResult); dos.writeUTF(chassiResult); dos.writeUTF(mmResult); dos.writeUTF(propResult); dos.writeUTF(cityResult); dos.writeUTF(ufResult); dos.writeUTF(corResult); dos.writeUTF(esTpResult); dos.writeUTF(combResult); dos.writeUTF(amfResult); dos.writeUTF(situResult); dos.flush(); // força o envio para o cliente dis.close(); // fecha a entrada de dados dos.close(); // fecha a saída de dados }// fecha o try 2 catch (Exception ex) { // imprime no console System.out.println("Passei no catch 2"); System.out .println("foi encontrado o seguinte erro: \n" + ex.getMessage()); ex.printStackTrace(); }// fecha o catch 2 }// fecha o else-if 0 }// fecha o try 0 catch (Exception ex) { // imprime no console System.out.println("Passei no catch 0"); System.out.println("foi encontrado o seguinte erro: \n" + ex.getMessage()); ex.printStackTrace(); }// fecha o catch 0 }// fecha o try principal catch (Exception ex) { // imprime no console System.out.println("Passei no catch principal"); System.out.println("foi encontrado o seguinte erro: \n" + ex.getMessage()); ex.printStackTrace(); }// fecha o catch principal }// fecha o if principal

MIDLET

    //método para consultar pelo número da placa
    private class ThreadPlaca extends Thread{
        public String url = "http://localhost:8080/Http/HttpServer?command=consultarplaca";
        public void run() {
            HttpConnection http = null;
            try {
                http = (HttpConnection)Connector.open(url, Connector.READ_WRITE);
                http.setRequestProperty("User-Agent", "Profile/MIDP-2.0 , Configuration/CLDC-1.0");
                http.setRequestProperty("Content-Language", "en-US");
                http.setRequestMethod(HttpConnection.POST);
                os = http.openDataOutputStream();
                os.writeUTF(placa.trim());
                os.flush();
                System.out.println("conectando com o servidor para buscar placa");
                System.out.println("Enviando a String placa: " + placa);
            } catch (IOException ex) {
                showAlert("foi encontrado o seguinte erro:" + ex.getMessage());
                ex.printStackTrace();
            }
            try {
                is = http.openDataInputStream();
                try {
                    String URLwithID = http.getHeaderField("Custom-newURL");
                    //se o cabeçalho possui um URL reescrito, então:
                    if(URLwithID != null) {
                        url = URLwithID; //atualiza o URL para todos os pedidos futuros da servlet
                    }
                } catch (IOException ex) {
                    showAlert(ex.getMessage());
                    ex.printStackTrace();
                }
                if(("").equals(placaResult) && ("").equals(chassiResult)) {
                    System.out.println("String vazia");
                } else {
                    placaResult = is.readUTF();
                    chassiResult = is.readUTF();
                    mmResult = is.readUTF();
                    propResult = is.readUTF();
                    cityResult = is.readUTF();
                    ufResult = is.readUTF();
                    corResult = is.readUTF();
                    esTpResult = is.readUTF();
                    amfResult = is.readUTF();
                    combResult = is.readUTF();
                    situResult = is.readUTF();
                    alertResult = new Alert("Resultado da Busca:",
                            "Placa:"+placaResult+
                            "\nChassi:"+chassiResult+
                            "\nMarcaModelo:"+mmResult+
                            "\nProprietario:"+propResult+
                            "\nCidade:"+cityResult+
                            "\nEstado:"+ufResult+
                            "\nCor:"+corResult+
                            "\nEspécie Tipo:"+esTpResult+
                            "\nAno Marca Modelo:"+amfResult+
                            "\nCombustível:"+combResult+
                            "\nSituação:"+situResult, null, AlertType.CONFIRMATION);
                    alertResult.setTimeout(Alert.FOREVER);
                    getDisplay().setCurrent(alertResult, get_formEscolha());
                    getDisplay().vibrate(1000);
                    System.out.println("Retornou da servlet: " + placaResult + chassiResult + mmResult + propResult + cityResult + ufResult + corResult + amfResult + combResult + situResult);
                    os.close();
                    is.close();
                    http.close();
                }
            } catch (IOException ex) {
                showAlert(("foi encontrado o seguinte erro:" + ex.getMessage()));
                ex.printStackTrace();
            }
        }
    }

Vá com calma, poste só a parte do código que tem duvida.
Afinal, isso não é uma central de atendimento.

[quote=nbluis]Vá com calma, poste só a parte do código que tem duvida.
Afinal, isso não é uma central de atendimento.[/quote]

aheuioaehuaeohueaohiaehiu
eu imaginei q alguém ia falar isso
aehuaeihoiuehieuahuaei
ja arrumei ok
coloquei só a parte do código q estou com duvida
grata até o momento

[code] String result_busca = BUSCA_INVALIDA;
try {
ps = this.con.prepareStatement(sqlb);
ps.setString(1, placa);
rs = ps.executeQuery();

                 // se
                 if (rs.next()) {  
                     // imprime no console o resultado da busca  
                     System.out.println("Placa: "  
                             + rs.getString("placa") + "| Chassi: "  
                             + rs.getString("chassi")  
                             + "| MarcaModelo: "  
                             + rs.getString("marcaModelo")  
                             + "| Proprietário: "  
                             + rs.getString("proprietario")  
                             + "| Cidade: " + rs.getString("cidade")  
                             + "| Estado: " + rs.getString("estado")  
                             + "| Cor: " + rs.getString("cor")  
                             + "| Espécie Tipo: "  
                             + rs.getString("especieTipo")  
                             + "| Combustível: "  
                             + rs.getString("combustivel")  
                             + "| Ano Modelo Fabricação: "  
                             + rs.getString("anoModFab")  
                             + "| Situacao: "  
                             + rs.getString("situacao"));  
                     // salva nas variáveis o resultado da pesquisa  
                     chassiResult = "" + rs.getString("chassi");  
                     placaResult = rs.getString("placa");  
                     mmResult = rs.getString("marcaModelo");  
                     propResult = rs.getString("proprietario");  
                     cityResult = rs.getString("cidade");  
                     ufResult = rs.getString("estado");  
                     corResult = rs.getString("cor");  
                     esTpResult = rs.getString("especieTipo");  
                     combResult = rs.getString("combustivel");  
                     amfResult = rs.getString("anoModFab");  
                     situResult = rs.getString("situacao");
                     
                     result_busca = BUSCA_VALIDA;
                 }
                 else{
                          result_busca = BUSCA_INVALIDA;  

            //pode colocar um print aqui...não sei..

                 {
             }// fecha o try 1  
             catch (Exception ex) {  
                 // imprime no console  
                 System.out.println("Passei no catch 1");  
                 System.out  
                         .println("foi encontrado o seguinte erro: \n"  
                                 + ex.getMessage());  
                 ex.printStackTrace();  
             }

[/code]

hayase,

Eu acho que o problema esta no tratamento da consulta na servlet mesmo…nada com a midlet.

quando é passado uma placa que nao possui registro no banco, o laço do while executa o ultimo registro da variavel ‘rs’.

trocando por um if, nao há possibilidade de mostrar mais de um resultado por consulta, mas não é o caso, pois nao há dois carros com a mesma placa…

então deve ajudar um pouco.

obrigada igor
farei os testes amanhã e te retorno ok
valeus mesmo