SQLException: Before start of result set... O que é isso?! [RESOLVIDO]

3 respostas
Soulless-BR

Fala pessoal beleza? Estou fazendo um trabalho de faculdade e estou conectando no banco com o JDBC, quando vou executar uma query ele me retorna a exception a seguir. Segue também as classes de conexão no banco, de consulta e main.

OBS: a main eu to instanciando a pesquisa apenas para teste, ve se exibe o resultado. ok?

Conecta no banco
package database;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class ConectaBanco {
    //Variáveis com os parametros para conexão no banco de dados.
    private String host = "jdbc:mysql://localhost/db_transito";
    private String user = "root";
    private String pass = "root";
    public Connection conn;
    public Statement stm;

    //Método para conectar ao banco de dados MySQL.
    public ConectaBanco(){
        try{
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            conn = DriverManager.getConnection(host, user, pass);
            stm = conn.createStatement();
        }
        catch(ClassNotFoundException ex){
            ex.printStackTrace();
        }
        catch(SQLException ex){
            ex.printStackTrace();
        }
        catch(IllegalAccessException ex){
            ex.printStackTrace();
        }
        catch(InstantiationException ex){
            ex.printStackTrace();
        }
    }
}
Consulta o Login
package database;

import java.sql.ResultSet;
import java.sql.SQLException;

public class QueryLogin extends ConectaBanco{
    private String sqlLogin;
    private ResultSet resultado;
    private String senha;

    public QueryLogin(String usuario){
        try{
            this.sqlLogin = "select usuario, senha from tb_users where usuario = '" +
                    usuario + "'";
            this.resultado = stm.executeQuery(sqlLogin);
            this.senha = resultado.getString("senha");
            System.out.println(this.senha);
        }
        catch(SQLException ex){
            ex.printStackTrace();
        }
    }

    public String getSenha(){
        return this.senha;
    }
}
Main
package trabalhotransito;

import janelas.*;
import database.*;

public class Main {
    public static void main(String[] args) {
        FormPrincipal formPrincipal = new FormPrincipal();
        formPrincipal.setVisible(true);
        QueryLogin teste = new QueryLogin("root");
    }
}
Exception
java.sql.SQLException: Before start of result set
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1075)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:984)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:929)
        at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:841)
        at com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5656)
        at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5576)
        at database.QueryLogin.<init>(QueryLogin.java:16)
        at trabalhotransito.Main.main(Main.java:10)

outra coisa, é correta a maneira que eu estou trabalhando com a orientacao a objeto? kkk... Digo a respeito de criar todas essas classes separadas...

Obrigado desde já!!!

3 Respostas

TheThis

Olá,

quando você realiza uma consulta ao banco, deve iterar o ResultSet para recuperar os resultados.
Seria mais ou menos assim:

public QueryLogin(String usuario){  
        try{  
            this.sqlLogin = "select usuario, senha from tb_users where usuario = '" +  
                    usuario + "'";  
            this.resultado = stm.executeQuery(sqlLogin);
            if(resultado != null && resultado.next()){
                this.senha = resultado.getString("senha");
            }
            System.out.println(this.senha);  
        }  
        catch(SQLException ex){  
            ex.printStackTrace();  
        }  
    }

Abraços.

Soulless-BR

Tem razão amigo… agora sim funcionou beleza…

Muito obrigado.
Abraço.

TheThis

Soulless-BR:
Tem razão amigo… agora sim funcionou beleza…

Muito obrigado.
Abraço.

Opa … denada!

Altere o título do tópico para [RESOLVIDO] …

Para outros que terem este problema conseguirem encontrar a solução.

Abraços.

Criado 19 de setembro de 2010
Ultima resposta 19 de set. de 2010
Respostas 3
Participantes 2