Erro no método de consulta MySQL

Olá pessoal,

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?

public static boolean consulta(String email) throws SQLException, ClassNotFoundException{
		Connection connection = new ConnectionFactory().getConnection();
		String sql = "SELECT * FROM contas WHERE Usuario = ?";
		PreparedStatement stmt;
		try {
			stmt = connection.prepareStatement(sql);
			stmt.setString(1, email);
			ResultSet rs = stmt.executeQuery();
			boolean rest = false;
			while(rs.next()){
				rest = true;
			}
			return rest;
		} catch (SQLException e) {
			throw new RuntimeException("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);
}

Não vai resolver (pq provavelmente há erro em sua query), mas observe que seu código pode ser muito simplificado:

public static boolean consulta(String email) throws SQLException, ClassNotFoundException{
    Connection connection = new ConnectionFactory().getConnection();
    String sql = "SELECT * FROM contas WHERE Usuario = ?";
    PreparedStatement stmt;
    try {
        stmt = connection.prepareStatement(sql);
        stmt.setString(1, email);
        ResultSet rs = stmt.executeQuery();
        return rs.next();
    } catch (SQLException e) {
            throw new RuntimeException("Não foi possível consultar a tabela Contas.", e);
    } finally{
        if (stmt != null) stmt.close(); //É importante fechar o statement também
        connection.close();
    }
}

Realmente, ajudou bastante. :slight_smile:
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.

Consegui identificar o problema. :smiley:

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.