Não estou conseguindo fazer a consulta no banco [RESOLVIDO]

19 respostas
M

Estou tentando fazer a consulta no banco de um registro, mas ao tentar o aplicativo retorna o aviso que nao encontrou o registro.

segue o codigo abaixo:

public boolean buscar() {        
        sql = "select * from tb_grupos where grupo = ?";
        try{
          statement = bd.connection.prepareStatement(sql);          
          statement.setString(2, grupo.getGrupo());
          resultSet = statement.executeQuery(sql);
          resultSet.first();
          grupo.setCodigo(resultSet.getString(1));
          grupo.setGrupo(resultSet.getString(2));          
          return true;
        }
        catch(SQLException erro){
            return false;
        }
    }

19 Respostas

S

Olá @moisesdcruz, se está retornando false é porque está dando erro.
Coloque um erro.printStackTrace(); no catch e coloque a pilha de erro aqui para mim ver.

M
java.sql.SQLException: Parameter index out of range (2 > number of parameters, which is 1).

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:963)

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:896)

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:885)

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860)

at com.mysql.jdbc.PreparedStatement.checkBounds(PreparedStatement.java:3321)

at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3306)

at com.mysql.jdbc.PreparedStatement.setString(PreparedStatement.java:4021)

at dao.GruposDAO.buscar(GruposDAO.java:58)

at gui.CadastrarGrupo$3.buscarGrupo(CadastrarGrupo.java:160)

at gui.CadastrarGrupo$3.actionPerformed(CadastrarGrupo.java:155)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)

at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2346)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)

at java.awt.Component.processMouseEvent(Component.java:6525)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)

at java.awt.Component.processEvent(Component.java:6290)

at java.awt.Container.processEvent(Container.java:2234)

at java.awt.Component.dispatchEventImpl(Component.java:4881)

at java.awt.Container.dispatchEventImpl(Container.java:2292)

at java.awt.Component.dispatchEvent(Component.java:4703)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)

at java.awt.Container.dispatchEventImpl(Container.java:2278)

at java.awt.Window.dispatchEventImpl(Window.java:2750)

at java.awt.Component.dispatchEvent(Component.java:4703)

at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)

at java.awt.EventQueue.access$500(EventQueue.java:97)

at java.awt.EventQueue$3.run(EventQueue.java:709)

at java.awt.EventQueue$3.run(EventQueue.java:703)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)

at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)

at java.awt.EventQueue$4.run(EventQueue.java:731)

at java.awt.EventQueue$4.run(EventQueue.java:729)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
S

@moisesdcruz, coloque 1 no lugar de 2 nessa linha statement.setString(2, grupo.getGrupo());

Fica assim, statement.setString(1, grupo.getGrupo());.

Porque vc só tem um parâmetro na query, então não pode ser 2.

M

fiz conforme me passou, so que agora apresenta este erro:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ? at line 1

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)

at java.lang.reflect.Constructor.newInstance(Constructor.java:422)

at com.mysql.jdbc.Util.handleNewInstance(Util.java:404)

at com.mysql.jdbc.Util.getInstance(Util.java:387)

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:942)

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3966)

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3902)

at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2526)

at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2673)

at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2545)

at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2503)

at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1369)

at dao.GruposDAO.buscar(GruposDAO.java:59)

at gui.CadastrarGrupo$3.buscarGrupo(CadastrarGrupo.java:160)

at gui.CadastrarGrupo$3.actionPerformed(CadastrarGrupo.java:155)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)

at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2346)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)

at java.awt.Component.processMouseEvent(Component.java:6525)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)

at java.awt.Component.processEvent(Component.java:6290)

at java.awt.Container.processEvent(Container.java:2234)

at java.awt.Component.dispatchEventImpl(Component.java:4881)

at java.awt.Container.dispatchEventImpl(Container.java:2292)

at java.awt.Component.dispatchEvent(Component.java:4703)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)

at java.awt.Container.dispatchEventImpl(Container.java:2278)

at java.awt.Window.dispatchEventImpl(Window.java:2750)

at java.awt.Component.dispatchEvent(Component.java:4703)

at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)

at java.awt.EventQueue.access$500(EventQueue.java:97)

at java.awt.EventQueue$3.run(EventQueue.java:709)

at java.awt.EventQueue$3.run(EventQueue.java:703)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)

at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)

at java.awt.EventQueue$4.run(EventQueue.java:731)

at java.awt.EventQueue$4.run(EventQueue.java:729)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
S

É um erro na sintaxe do SQL, verifique novamente a sua query.

Ela deve ficar assim

M

Deu certo em parte agora, pois ele esta retornando o codigo do grupo tfGrupo e era para retorna o codigo e o grupo na tbTabela.

S

Coloque assim,

public boolean buscar() {      
        sql = "select * from tb_grupos where grupo = ?";
        try{
          statement = bd.connection.prepareStatement(sql);        
          statement.setString(2, grupo.getGrupo());
          resultSet = statement.executeQuery(sql);
          if(resultSet.next()){
                grupo.setCodigo(resultSet.getString("nomeDaColunaCodigo"));
                grupo.setGrupo(resultSet.getString("nomeDaColunaGrupo"));        
          return true;
         }
        }

Substitui nomeDaColunaCodigo e nomeDaColunaGrupo pelos seus nomes de colunas.
        catch(SQLException erro){
            return false;
        }
    }
M

perdao nao soube me expressar, na verdade quero jogar a consultar numa JTable onde vai aparecer o codigo do grupo e o grupo.

S

@moisesdcruz

Para implementar uma JTable e popular ela utilize esse tutorial. é bem simples e vai lhe ajudar a utilizar JTable do modo certo.

M

Como sou novato em Java fiz um teste mudando a implementacao de uma JTable para uma JTextArea para ela receber o retorno da consulta mas ele esta me retornando a seguinte consulta:

dao.GruposDAO@137db45

segue o codigo abaixo.

evento do botao buscar

btBuscar.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent ae) {
                buscarGrupo();                
            }            

            private void buscarGrupo() {                
                 grupos.grupo.setGrupo(tfGrupo.getText());
                 if(grupos.buscar()){
                    tfGrupo.setText(grupos.grupo.getGrupo());
                    taTexto.append(grupos.toString());
                    limparCampos();
                 }
                 else{
                     JOptionPane.showMessageDialog(null, "Grupo nao encontrado!");
                     limparCampos();
                 }
            }
        });
    }

Codigo da classe GruposDAO onde faz a consulta no banco

public boolean buscar() {        
        sql = "select * from tb_grupos where grupo = ?";
        try{          
          statement = bd.connection.prepareStatement(sql);          
          statement.setString(1, grupo.getGrupo());
          resultSet = statement.executeQuery();
          resultSet.first();
          grupo.setCodigo(resultSet.getString(1));
          grupo.setGrupo(resultSet.getString(2));          
          return true;
        }
        catch(SQLException erro){
            erro.printStackTrace();
            return false;
        }
    }
S

O toString() está imprimindo somente a referencia para o objeto.
Você tem que especificar os campos que quer imprmir ou implementar o toString() na classe.

M

seria implemetar o toString na classe Grupos desta forma

public String toString(){

return "Codigo: +this.codigo+ Grupo: "+this.grupo;

}
S

Isso.

M

Coloquei o impleto do toString na classe Grupos mais retorna isto:

dao.GruposDAO@1bf4206

Segue o codigo da classe Grupos como fico com o implemento do toString.

public class Grupos {
private String codigo, grupo;

public String getCodigo() {
    return codigo;
}

public String getGrupo() {
    return grupo;
}    

public void setCodigo(String codigo) {
    this.codigo = codigo;
}

public void setGrupo(String grupo) {
    this.grupo = grupo;
}
<a class="mention" href="/u/override">@Override</a>

public String toString(){

return "Codigo: “+this.codigo+” Grupo: "+this.grupo;

}

}
M

corrigindo coloquei o implemento do toString

S

Esse objeto é uma lista de grupos ?

Se sim, você tem que fazer um FOR e dai imprimir os objetos um à um com .toString();

M

nao, e so para buscar um grupo desejado.

M

consegui meu amigo…muito obrigado

S

Ok, espero ter ajudado.

Não esqueça de colocar resolvido no tópico.

Abraço.

Criado 22 de setembro de 2016
Ultima resposta 11 de out. de 2016
Respostas 19
Participantes 2