a útlima consulta sempre é retornada, mesmo que um dado invá

09/10/2007

1

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.

SERVLET:
view plaincopy to clipboardprint?
// 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
// 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

view plaincopy to clipboardprint?
//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();
}
}
}


Responder

Posts

09/10/2007

Cissagatto

apenas corrigindo:

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:9f015fe861][b:9f015fe861]SERVLET:[/b:9f015fe861][/size:9f015fe861]
// 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



[b:9f015fe861]MIDLET[/b:9f015fe861]

    //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();
            }
        }
    }



Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira