Erro estranho com JDBC[RESOLVIDO]

Bom gente, olá a todos primeiramente. Em um dos meus projetos, eu estou usando JDBC puro para a conexão e manipulação do banco de dados. Quando eu vou executar a seguinte classe:

[code]public static Professor loginProf(String matricula, String senha)
{
Professor prof = null;

    try
    {
        String sql = "SELECT * FROM aluno WHERE matriculaProf = ? AND senha = ?;";
        
        Conexao conex = new Conexao("jdbc:mysql://localhost:3306/mydb",
                "com.mysql.jdbc.Driver", "root", "alunolab");
        
        Connection con = conex.obterConexao();
        
        PreparedStatement comando = con.prepareStatement(sql);
        
        comando.setString(1, matricula);
        comando.setString(2, senha);
        
        ResultSet resultSet = comando.executeQuery();
        
        if(resultSet.next())
        {
            prof = new Professor(resultSet.getString("matriculaProf"),
                    resultSet.getString("senha"));
        }
        
        resultSet.close();
        comando.close();
        con.close();
        
    }catch ( Exception e)
    {
        System.out.println(e.getMessage());
        e.printStackTrace();
    }
    
    prof = new Professor(matricula, senha);
    return prof;
}[/code]

Aparece a seguinte exceção:


Unknown column ‘matriculaProf’ in 'where clause’
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column ‘matriculaProf’ in 'where clause’
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.Util.getInstance(Util.java:386)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3597)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3529)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1990)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2151)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2625)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2119)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2281)
at model.dao.ProfessorDAO.loginProf(ProfessorDAO.java:78)
at controller.LoginServlet.processRequest(LoginServlet.java:35)
at controller.LoginServlet.doPost(LoginServlet.java:93)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:498)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:394)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)

Será que alguém aqui poderia me ajudar o com seguinte erro?

Desde já muito grato! :smiley:

Unknown column 'matriculaProf' in 'where clause' 

certeza q essa coluna existe?

cara, eu já verifiquei esse e outras colunas de métodos parecidos e todos existem e com a mesma caixa de caracteres.

as vezes vc esta listando a tabela errada matriculaProf na tabela aluno esta meio estranho… ja tentou rodar esta query no banco?

ops hehehehe

mas eu mudei agora e dei uma testada aqui, e deu disparou a seguinte Excetion:

Before start of result set
java.sql.SQLException: Before start of result set
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:841)
at com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5650)
at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5570)
at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5610)
at model.dao.FuncionarioDAO.loginFun(FuncionarioDAO.java:72)
at controller.LoginServlet.processRequest(LoginServlet.java:51)
at controller.LoginServlet.doPost(LoginServlet.java:92)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:498)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:394)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)

Estranho…parece que o problema esta no sql…

Verifique tamem se não está indo null para o contexto.

Esse erro geralmente dá quando vc tenta acessar o resultSet antes de fazer next() nele pelo menos uma vez. Você por acaso retirou aquele if do código?

“SQLException: Before start of result set” significa que o resultset está posicionado antes do primeiro registro, problema com o next().

Talvez você tenha mais de um registro nesse resultset, troca o IF por um While

while(resultSet.next()) {  
          prof = new Professor(resultSet.getString("matriculaProf"),  
          resultSet.getString("senha"));  
} 

[quote]“SQLException: Before start of result set” significa que o resultset está posicionado antes do primeiro registro, problema com o next().

Talvez você tenha mais de um registro nesse resultset, troca o IF por um While

view plaincopy to clipboardprint?

while(resultSet.next()) { prof = new Professor(resultSet.getString("matriculaProf"), resultSet.getString("senha"));
} [/quote]

pow romarcio valeu mesmo! Era isso mesmo que era o problema! VALEU MESMO!!! :smiley:

De qualquer forma, o if deveria funcionar também. Só não funciona se ele nunca der o next(). Aí sim, o cursor vai estar posicionado antes do primeiro registro, como é padrão do resultset.

a ta, valeu gente! vocês são de mais!!! :smiley:

De qualquer forma, o if deveria funcionar também. Só não funciona se ele nunca der o next(). Aí sim, o cursor vai estar posicionado antes do primeiro registro, como é padrão do resultset.
[/quote]

Tem razão Vini.