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:
packagebr.com.desenvolvimento;importjava.io.IOException;importjava.io.PrintWriter;importjava.sql.Connection;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;publicclassGravaContatoextendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException{PrintWriterout=response.getWriter();Connectionconexao=newConexao().abreConexao();Stringsql="SELECT login, email FROM usuario";try{Statementst=conexao.createStatement();ResultSetrs=st.executeQuery(sql);Stringlogin="";Stringemail="";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")){Contatocont=newContato();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"));ComandoDAOdao=newComandoDAO();dao.insereContato(cont);}else{out.println("NÃO FOI POSSÍVEL CADASTRAR. EMAIL OU LOGIN JÁ EXISTE");}}}catch(Exceptione){out.println("ERRO: "+e.getMessage());}}}
Tinha esquecido do equals, mas mesmo assim continua com o mesmo problema, não verifica e nem grava no banco :shock:
romarcio
Mas entra no if, no else ou cai no catch ?
Consegue debugar para verificar isso?
D
danielswater
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
romarcio
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();
D
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:
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:
Mas ta estranho isso, faz um System.out.print(); de todas a variaveis neste método, e ve se retorna tudo certo.
D
danielswater
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
Priuli
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…
Então, o problema e que nem erro da, nao me mostra absolutamente nada.
Eu mudei a classe aqui, ficando assim:
packagebr.com.desenvolvimento;importjava.io.IOException;importjava.io.PrintWriter;importjava.sql.Connection;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;publicclassGravaContatoextendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException{PrintWriterout=response.getWriter();Connectionconexao=newConexao().abreConexao();Stringsql="SELECT login, email FROM usuario";Stringlogin="";Stringemail="";StringreqEmail=request.getParameter("email");StringreqLogin=request.getParameter("login");try{PreparedStatementpstm=conexao.prepareStatement(sql);ResultSetrs=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{Contatocont=newContato();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"));ComandoDAOdao=newComandoDAO();dao.insereContato(cont);out.println("DADOS GRAVADOS COM SUCESSO");}}rs.close();pstm.close();}catch(Exceptione){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
lucianotome
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?
DZR
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.
Ok pessoal, realmente acho que e esse mesmo o problema
Vou fazer os testes aqui logo mais e jaja volto pra dar o resultado
D
danielswater
Sem chance, continua dando a mesma coisa
lucianotome
Posta seu novo codigo ai
D
danielswater
packagebr.com.desenvolvimento;importjava.io.IOException;importjava.io.PrintWriter;importjava.sql.Connection;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;publicclassGravaContatoextendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException{PrintWriterout=response.getWriter();Connectionconexao=newConexao().abreConexao();Stringsql="SELECT login, email FROM usuario";try{Statementst=conexao.createStatement();ResultSetrs=st.executeQuery(sql);Stringlogin="";Stringemail="";if(rs.next()){do{login=rs.getString("login");email=rs.getString("email");Contatocont=newContato();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"));ComandoDAOdao=newComandoDAO();dao.insereContato(cont);}while(rs.next());}else{out.println("NÃO FOI POSSÍVEL CADASTRAR. EMAIL OU LOGIN JÁ EXISTE");}}catch(Exceptione){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
lucianotome
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!!!
lucianotome
packagebr.com.desenvolvimento;importjava.io.IOException;importjava.io.PrintWriter;importjava.sql.Connection;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;publicclassGravaContatoextendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException{PrintWriterout=response.getWriter();Connectionconexao=newConexao().abreConexao();Stringsql="SELECT login, email FROM usuario";try{Statementst=conexao.createStatement();ResultSetrs=st.executeQuery(sql);Stringlogin="";Stringemail="";if(rs.next()){do{login=rs.getString("login");email=rs.getString("email");if(login==""||login==null||email==""||login==null||login!=request.getParameter("login")||email!=request.getParameter("email")){Contatocont=newContato();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"));ComandoDAOdao=newComandoDAO();dao.insereContato(cont);}else{out.println("NÃO FOI POSSÍVEL CADASTRAR. EMAIL OU LOGIN JÁ EXISTE");}}while(rs.next());}else{Contatocont=newContato();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"));ComandoDAOdao=newComandoDAO();dao.insereContato(cont);}}catch(Exceptione){out.println("ERRO: "+e.getMessage());}}}
D
danielswater
Cara, simplesmente copiei seu codigo e agora cadastra toda vez, nao verifica as condições e tambem nao me da a mensagem que foi cadastrado com sucesso
Nao sei mais o que pode ser
eduardo.exs
porra… estou tendo o mesmo problema e incrívelmente comecei a depurar pra tentar entender e ví que ele não compara
não me pergunte o pq? mas tentei comprar a string enviada pelo formulario com a que está no banco