ResultSet me tirando o sono

Fala pessoal blz?
E o seguinte, preciso fazer um sistema web aqui que verifica se o login e o email da ja existe cadastrado no banco, se não existir, faz o cadastro normalmente. O problema e que eu nao sei o que esta acontecendo com o resultset nao me retorna nem null nem “” e nem aparece erro nenhum. O meu banco está vazio, justamente por isso coloquei as condições de verificar se e null ou string vazia. Segue me cod:

package br.com.desenvolvimento;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class GravaContato extends HttpServlet {

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

		PrintWriter out = response.getWriter();

		Connection conexao = new Conexao().abreConexao();

		String sql = "SELECT login, email FROM usuario";

		try{
			Statement st = conexao.createStatement();
			ResultSet rs = st.executeQuery(sql);
			String login = "";
			String email = "";

			while(rs.next()){
				login = rs.getString("login");
				email = rs.getString("email");

				if(login == "" || login == null || email == "" || login == null
						|| login != request.getParameter("login") || email != request.getParameter("email")){
					
					Contato cont = new Contato();
					
					cont.setNome(request.getParameter("nome"));
					cont.setEmail(request.getParameter("email"));
					cont.setSexo(request.getParameter("sexo"));
					cont.setIdade(Integer.parseInt(request.getParameter("idade")));
					cont.setNews(request.getParameter("news"));
					cont.setLogin(request.getParameter("login"));
					
					ComandoDAO dao = new ComandoDAO();
					dao.insereContato(cont);
				}
				else{
					out.println("NÃO FOI POSSÍVEL CADASTRAR. EMAIL OU LOGIN JÁ EXISTE");
				}
			}

		}
		catch(Exception e){
			out.println("ERRO: " + e.getMessage());
		}			
	}

}

Alguma luz?

No if, use equals para testar string.

if(login.equals("") || login == null || email.equals("") || login == null  
                        || !login.equals(request.getParameter("login")) || !email.equals(request.getParameter("email"))){

Tinha esquecido do equals, mas mesmo assim continua com o mesmo problema, não verifica e nem grava no banco :shock:

Mas entra no if, no else ou cai no catch ?

Consegue debugar para verificar isso?

Entao, ele nao entra nem no if nem no else, e também acredito que nao va para o catch pois ele nao me da nenhuma saida, nem que foi gravado, nem que nao foi gravado e nem a mensagem de erro do catch

Que estranho, tem certeza que essa classe está sendo executada?

É mais aconselhavel ustilizar PreparedStatement a Statement, mude essa parte:

...
try{  
            PreparedStatement stmt = prepareStatement(sql); 
            ResultSet rs = stmt.executeQuery(); 
...
//antes de terminar o bloco try, feche a conexão
rs.close();
stmt.close();

Entao cara, fiz o que vc falou e continua nao acontecendo nada. Alias já tinha feito estes testes antes.
Uma coisa que percebi e que se por exemplo eu coloco algo no banco, ele faz a inclusao dos dados, porém ele não faz a comparação desta linha aqui:

 login != request.getParameter("login") || email != request.getParameter("email"))

[quote=danielswater]Entao cara, fiz o que vc falou e continua nao acontecendo nada. Alias já tinha feito estes testes antes.
Uma coisa que percebi e que se por exemplo eu coloco algo no banco, ele faz a inclusao dos dados, porém ele não faz a comparação desta linha aqui:

login != request.getParameter("login") || email != request.getParameter("email")) [/quote]

Estranho, tenta passar para variáveis locais então:

[code]String reqLogin = request.getParameter(“login”);
String reqEmail = request.getParameter(“email”);

//E depois faz o teste no if pelas variaveis

login.equals(reqLogin) || email.equals(reqEmail));[/code]

Mas ta estranho isso, faz um System.out.print(); de todas a variaveis neste método, e ve se retorna tudo certo.

Fiz o teste, ele mostra os request certinho, so que continua nao fazendo a gravação no banco e nem a comparaçao
Ja to ficando louco com isso

eu não sei confirmar neste momento mais acho que o response.getWriter() não irá imprimir nada na tela simplements irá imprimir no response ai caberia ter um tratamento javascript ou algo para pegar este erro…
Tente dar uns System.out… ou então debugar no catch…

[quote=romarcio]No if, use equals para testar string.

if(login.equals("") || login == null || email.equals("") || login == null  
                        || !login.equals(request.getParameter("login")) || !email.equals(request.getParameter("email"))){

[/quote]

Verifique a ordem pois se o login ou email for null vai dar erro neste codigo.
Correto:

if( login == null || login.equals("")  || email == null ||  email.equals("") 
                        || !login.equals(request.getParameter("login")) || !email.equals(request.getParameter("email"))){

Então, o problema e que nem erro da, nao me mostra absolutamente nada.
Eu mudei a classe aqui, ficando assim:

package br.com.desenvolvimento;  

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class GravaContato extends HttpServlet {  

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

		PrintWriter out = response.getWriter();  

		Connection conexao = new Conexao().abreConexao();     
		String sql = "SELECT login, email FROM usuario"; 
		String login = "";  
		String email = "";
		String reqEmail = request.getParameter("email");
		String reqLogin = request.getParameter("login");

		try{  
			PreparedStatement pstm = conexao.prepareStatement(sql);
			ResultSet rs = pstm.executeQuery();
			
			while(rs.next()){  
				login = rs.getString("login");  
				email = rs.getString("email");  

				if(login.equals(reqLogin) || email.equals(reqEmail)){
					out.println("NAO FOI POSSIVEL CADASTRAR");
				}
				
				else{  

					Contato cont = new Contato();  

					cont.setNome(request.getParameter("nome"));  
					cont.setEmail(request.getParameter("email"));  
					cont.setSexo(request.getParameter("sexo"));  
					cont.setIdade(Integer.parseInt(request.getParameter("idade")));  
					cont.setNews(request.getParameter("news"));  
					cont.setLogin(request.getParameter("login"));  

					ComandoDAO dao = new ComandoDAO();  
					dao.insereContato(cont);  

					out.println("DADOS GRAVADOS COM SUCESSO"); 
				}  
			}rs.close(); 
			pstm.close();

		}  
		catch(Exception e){  
			out.println("ERRO: " + e.getMessage());  
		}
	
		out.println(login);
		out.println(email);
		out.println(reqEmail);
		out.println(reqLogin);
	}  

}  

Mesmo assim só continua cadastrando no banco se já tiver algo la, agora ele compara se existe ou nao, porem ele cadastra do mesmo jeito, sendo igual ou nao

Cara, se não estou errado, vc faz um select no banco vazio, OK, este resultset te retorna nada, ai vc faz um

while(rs.next()){ enquanto tiver proximo ele entra no while, mas vc disse que o banco esta vazio, como ele vai entrar no while?

Exatamente como o Luciano disse

O while do rs.next() não vai entrar se o seu banco estiver vazio.
Ou seja, a sua comparação com banco vazio não irá funcionar.

Talvez vc possa fazer assim:

[code]
if (rs.next()) {
do {
//fazer algo

 } while (rs.next());  

} else {
//banco vazio
} [/code]

Ok pessoal, realmente acho que e esse mesmo o problema
Vou fazer os testes aqui logo mais e jaja volto pra dar o resultado

Sem chance, continua dando a mesma coisa

Posta seu novo codigo ai

package br.com.desenvolvimento;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class GravaContato extends HttpServlet {

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

		PrintWriter out = response.getWriter();

		Connection conexao = new Conexao().abreConexao();

		String sql = "SELECT login, email FROM usuario";

		try{
			Statement st = conexao.createStatement();
			ResultSet rs = st.executeQuery(sql);
			String login = "";
			String email = "";

			if(rs.next()){
				do{
				login = rs.getString("login");
				email = rs.getString("email");

					Contato cont = new Contato();
					
					cont.setNome(request.getParameter("nome"));
					cont.setEmail(request.getParameter("email"));
					cont.setSexo(request.getParameter("sexo"));
					cont.setIdade(Integer.parseInt(request.getParameter("idade")));
					cont.setNews(request.getParameter("news"));
					cont.setLogin(request.getParameter("login"));
					
					ComandoDAO dao = new ComandoDAO();
					dao.insereContato(cont);
				}
				while(rs.next());
			}
			else{
				out.println("NÃO FOI POSSÍVEL CADASTRAR. EMAIL OU LOGIN JÁ EXISTE");
			}

		}
		catch(Exception e){
			out.println("ERRO: " + e.getMessage());
		}			
	}
}
	

Aqui no caso eu ate tirei a comparaçao, so que a unica coisa que ele me da e que o login ou email já existe. Isso porque meu banco esta vazio :frowning:

Quanto o banco esta vazio
isto aqui sempre retorna false if(rs.next()){
ou seja, sempre vai dar

else{ out.println("NÃO FOI POSSÍVEL CADASTRAR. EMAIL OU LOGIN JÁ EXISTE"); }

Vc tem que rever a sua logica, nao tem erro nenhum no codigo, e sim na logica, OK!!!