Java.sql.SQLException: No data found

11 respostas
cs.santos0

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:

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

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

11 Respostas

R

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

cs.santos0

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

cs.santos0

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

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

é isso ai,
flw

R

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

cs.santos0

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

B

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…

P

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

?

T

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

rafaelsantini

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

jqueiroz

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

Abraços

jqueiroz

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

Criado 12 de outubro de 2007
Ultima resposta 18 de ago. de 2011
Respostas 11
Participantes 7