Java.sql.SQLException: No data found

Iai pessual, tudo certo?

To com o seguinte problema, tenho q fazer um trabalho pra faculdade usando access(pois é, tenho q usar esse lixo de banco, senão o profº ñ aceitará).
Tenho o seguinte método para verificar o login:

[code] public synchronized boolean lista(String login, String senha){
Statement stm = null;
ResultSet rs = null;
try{
stm = con.createStatement();
String sql = “SELECT login.log_user as user, login.log_pass as pass FROM login”;
rs = stm.executeQuery(sql);

        while(rs.next()){                
            if(login.length() == rs.getString("user").length()){
                if(senha.length() == rs.getString("pass").length()){                        
                    if(login.equals(rs.getString("user"))){
                        if(senha.equals(rs.getString("pass"))){
                            return true;
                        }
                    }
                }
            }
        }
    }catch(SQLException ex){
        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream("e:\\Zoo_Project\\dataBase\\dataBaseLog.txt");
        } catch (FileNotFoundException ext) {
            ext.printStackTrace();
        }
        PrintStream ps = new PrintStream( fos );
        DriverManager.setLogStream( ps );
        ex.printStackTrace();
    }finally{
        try{
            rs.close();
            stm.close();
            con.close();
        }catch(SQLException ex){
            ex.printStackTrace();
        }
    }
    return false;
}[/code]

ja fiz ele várias vezes em projetos, usando mySql e ele funcionou perfeitamente, mas no access ñ dá.

a JVM da o erro:

java.sql.SQLException: No data found at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7138) at sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(JdbcOdbc.java:3907) at sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(JdbcOdbcResultSet.java:5698) at sun.jdbc.odbc.JdbcOdbcResultSet.getString(JdbcOdbcResultSet.java:354) at sun.jdbc.odbc.JdbcOdbcResultSet.getString(JdbcOdbcResultSet.java:411) at classes.dataBase.DataBaseLogin.lista(DataBaseLogin.java:59) at graphicalinterfaces.mainFrames.FrameLogin.validaPassword(FrameLogin.java:32) at graphicalinterfaces.mainFrames.FrameLogin.jButtonEntrarActionPerformed(FrameLogin.java:153) at graphicalinterfaces.mainFrames.FrameLogin.access$000(FrameLogin.java:12) at graphicalinterfaces.mainFrames.FrameLogin$1.actionPerformed(FrameLogin.java:70) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) at java.awt.Component.processMouseEvent(Component.java:6038) at javax.swing.JComponent.processMouseEvent(JComponent.java:3260) at java.awt.Component.processEvent(Component.java:5803) at java.awt.Container.processEvent(Container.java:2058) at java.awt.Component.dispatchEventImpl(Component.java:4410) at java.awt.Container.dispatchEventImpl(Container.java:2116) at java.awt.Component.dispatchEvent(Component.java:4240) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916) at java.awt.Container.dispatchEventImpl(Container.java:2102) at java.awt.Window.dispatchEventImpl(Window.java:2429) at java.awt.Component.dispatchEvent(Component.java:4240) at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160) at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

por favor alguem ai sabe oq é??
flw

Tudo certo.
Depois de uma leve googlada, cheguei a conclusão que esta exception que está ocorrendo é bem genérica.

Recomendações:

  1. Verificar sua string de conexão. (Ref.: http://forum.java.sun.com/thread.jspa?threadID=5129447&messageID=9464243)
  2. Verificar se o seu comando select, funciona rodando direto no ms access. (Ref.: http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&f=3&t=009869)

Espero que te ajude de alguma forma. Aqui no forum, dúvidas com ms access são praticamente ignoradas e agora você já sabe o motivo.
É uma vergonha ter um professor obrigando usar o ms access, por acaso ele vende licença de Office também ?

boa sorte.
Roger Leite

Roger, mto obrigado velho.

então quando pesquisei no google, tb vi q era mto generica a exceção e por não ter mais ideias do q fazer vim até aki.

eu ja fui até o access e chequei a minha instrução, ta tudo certo.
quando a conexão creio q sim, pois faço a conexão no construtor, então criei JOptionPane…, la só pra testar e quando instancio essa classe esse JOptionPane foi mostrado sem problemas.

por isso não sei mais oq fazer.

olha eu não sei se tem alguma coisa a ver, mas eu tentei conectar o netbeans nesse banco, mas ele da alguns erros, porem conecta, coisa q com mySql eu nunca vi, pois criava as onsultas, criava tabelas tudo pelo próprio netbeans.

Agora quanto ao professor é sem comentarios, velho eu trampo com firebird, tb to acostumado com mySql, ai me vem ele e manda eu usar access, :shock: .

mas ai, se alguem puder me dar uma força, pq num sei msm o q acontece la.
flw, um abraço

Bom pessual, como o amigo ai de cima disse, sei que access é meio “ignorado”, mas consegui tirar esse erro, se alguem ai precisar um dia de algo parecido

segue:

[code] try{
stm = con.createStatement();
String sql = “SELECT login.log_user as user, login.log_pass as pass FROM login”;
rs = stm.executeQuery(sql);

        while (rs.next()){
            String db_user = rs.getString("user");
            String db_pass = rs.getString("pass");
            
            if(login.equals(db_user)){
                if(senha.equals(db_pass)){
                    return true;
                }
            }
        }
        
    }[/code]

eu tive que guardar os valores do banco em variaveis pra usa-las nas comparações, comparando direto elas davam erro.

é isso ai,
flw

Olá Ciro ! Valeu por ter postado a solução!

Dessa eu não sabia, pelo que entendi você não pode chamar o rs.getString(“user”) duas vezes ?
Interessante … essa é nova para mim.

valeu e sucesso!
Roger Leite

Iai cara, tudo certo?

intão pelo que eu descobri parece ser isso sim, mas apenas para o despresível access, pois em outros SGBD funcionam perfeitamente.

flw, um abraço

Ola,

Sei que e mei tarde pra eu colocar meu comentario… mas vale para os que estao tentando resolver o porblema… acabei de achar este topico no google…

O problema e que o access so aceita que vc leia um valor uma unica vez… tipo:

String s = rs.getString(1); // se tentar ler novamente a coluna 1 ira dar erro...
Bom… tosco, mas foi o que encontrei, pesquisando…

E quando tenta ler a coluna e a mesma não tem valor e ele retorna NULL e, então recebemos o erro

java.sql.SQLException: No data found

?

A rigor esse problema não é do Access mas sim do ODBC.

De fato o problema é do ODBC. Estou trabalhando em uma migração do Paradox usando JdbcOdbcDriver e tive esse mesmo problema.

Também já tive esse problema. Aparentemetne é com do driver do acess

Abraços

Pessoal,

Apesar de ser um tópico antigo, muita gente tem esse problema com o Acess. O que percebi foi o seguinte, o Erro acontece com campos do tipo String. Ex.

sVariavelString = Recordset.getString("CampoTipoTexto");

como se o “getString” só pudesse ser utilizado uma vez, também não funciona dentro de um parâmetro de um método.
A solução é como o colega esplicou criar variáveis para todos os campos.

Um grande Abraço