Erro estranho com JDBC[RESOLVIDO]

12 respostas
mirrah

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:

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;
    }

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! :D

12 Respostas

R
Unknown column 'matriculaProf' in 'where clause'

certeza q essa coluna existe?

mirrah

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

M

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

mirrah

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)
fabin

Estranho…parece que o problema esta no sql…

mateuscs

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

ViniGodoy

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?

romarcio

“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"));  
}
mirrah

“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"));
}

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

ViniGodoy

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.

mirrah

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

romarcio

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.

Tem razão Vini.

Criado 15 de julho de 2011
Ultima resposta 16 de jul. de 2011
Respostas 12
Participantes 7