Minhas consultas na tabela Contas filtradas pelo campo Usuário sempre caem no “catch”. O problema pode estar no banco ou se resume apenas ao código Java?
publicstaticbooleanconsulta(Stringemail)throwsSQLException,ClassNotFoundException{Connectionconnection=newConnectionFactory().getConnection();Stringsql="SELECT * FROM contas WHERE Usuario = ?";PreparedStatementstmt;try{stmt=connection.prepareStatement(sql);stmt.setString(1,email);ResultSetrs=stmt.executeQuery();booleanrest=false;while(rs.next()){rest=true;}returnrest;}catch(SQLExceptione){thrownewRuntimeException("Não foi possível consultar a tabela Contas.");}finally{connection.close();}}
Primeiro, você dispara uma exception mas não diz qual é a exception.
NUNCA faça isso. As exceptions existem para ajudar a gente, e não para serem escondidas.
Olhe o código abaixo, teste e me diga o erro que deu. (posta aqui no GUJ)
} catch (SQLException e) {
// Aqui eu estou passando como segundo parametro a exception que eu recebi. Assim eu sei o que houve.
throw new RuntimeException("Não foi possível consultar a tabela Contas.", e);
}
ViniGodoy
Não vai resolver (pq provavelmente há erro em sua query), mas observe que seu código pode ser muito simplificado:
publicstaticbooleanconsulta(Stringemail)throwsSQLException,ClassNotFoundException{Connectionconnection=newConnectionFactory().getConnection();Stringsql="SELECT * FROM contas WHERE Usuario = ?";PreparedStatementstmt;try{stmt=connection.prepareStatement(sql);stmt.setString(1,email);ResultSetrs=stmt.executeQuery();returnrs.next();}catch(SQLExceptione){thrownewRuntimeException("Não foi possível consultar a tabela Contas.",e);}finally{if(stmt!=null)stmt.close();//É importante fechar o statement tambémconnection.close();}}
Andersoon
Realmente, ajudou bastante.
Infelizmente o problema é maior do que eu pensava.
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table '************.contas' doesn't exist
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
java.lang.reflect.Constructor.newInstance(Constructor.java:526)Obrigado pela dica pessoal.
Andersoon
Consegui identificar o problema.
No Windows o MySQL não é case sensitive por padrão, entretanto, no Linux, é case sensitive. Na minha máquina (Windows 7) não tive problemas. No servidor de minha hospedagem (Linux) acusava a tabela contas como existente, mas ao executar meu instalador da Base de Dados não ocorria erro durante a criação da tabela.
Explicação: Meu instalador cria a tabela Contas, minha consulta é na tabela contas.