[RESOLVIDO] Erro em uma consulta SQL com comando LIKE

Pessoal, tou tentando fazer uma pesquisa em todos os campos de minha jTable de uma só vez, escrevi o código abaixo, mas tá dando erro, alguém pode me ajudar com esse erro?

ERRO:

org.firebirdsql.jdbc.FBSQLException: GDS Exception. 335544569. Dynamic SQL Error SQL error code = -104 Token unknown - line 1, char 61 LIKE at org.firebirdsql.jdbc.AbstractPreparedStatement.<init>(AbstractPreparedStatement.java:88) at org.firebirdsql.jdbc.FBPreparedStatement.<init>(FBPreparedStatement.java:34) at org.firebirdsql.jdbc.AbstractConnection.prepareStatement(AbstractConnection.java:701) at org.firebirdsql.jdbc.AbstractConnection.prepareStatement(AbstractConnection.java:232) at br.com.hospitalar.control.ConvenioControl.localizarConvenio(ConvenioControl.java:33) at br.com.hospitalar.view.ConvenioView.tfPesquisarKeyPressed(ConvenioView.java:390) at br.com.hospitalar.view.ConvenioView.access$200(ConvenioView.java:35) at br.com.hospitalar.view.ConvenioView$2.keyPressed(ConvenioView.java:138) at java.awt.Component.processKeyEvent(Component.java:6221) at javax.swing.JComponent.processKeyEvent(JComponent.java:2801) at java.awt.Component.processEvent(Component.java:6040) at java.awt.Container.processEvent(Container.java:2041) at java.awt.Component.dispatchEventImpl(Component.java:4630) at java.awt.Container.dispatchEventImpl(Container.java:2099) at java.awt.Component.dispatchEvent(Component.java:4460) at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1848) at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:704) at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:969) at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:841) at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:668) at java.awt.Component.dispatchEventImpl(Component.java:4502) at java.awt.Container.dispatchEventImpl(Container.java:2099) at java.awt.Window.dispatchEventImpl(Window.java:2475) at java.awt.Component.dispatchEvent(Component.java:4460) at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

MÉTODO QUE CRIEI EM MEU FORMULÁRIO

private void tfPesquisarKeyPressed(java.awt.event.KeyEvent evt) { String sql = "SELECT * FROM CONVENIO WHERE CDCONVENIO = '%" + tfPesquisar.getText().trim() + "%'"+ "|| NOCONVENIO LIKE '%" + tfPesquisar.getText().trim() + "%'"; ConvenioControl c = new ConvenioControl(); c.localizarConvenio(sql); listarConvenio(); }

MÉTODO DA MINHA CLASS ConvenioControl

public void localizarConvenio(String sql) { try { AcessoFirebird firebird = new AcessoFirebird(); pstm = firebird.conectar().prepareStatement(sql); pstm.executeQuery(); firebird.desconectar(); } catch (Exception e) { e.printStackTrace(); } }

Olá!

Na linguagem SQL o operador lógico OU não é escrito da mesma maneira que no java, ou seja, utilizando o “||”, experimente trocar este “||” por “or” e poste aqui o resultado. :slight_smile:

Abraço

Apresentou esse erro:

run: org.firebirdsql.jdbc.FBSQLException: GDS Exception. 335544334. conversion error from string "%%" at org.firebirdsql.jdbc.FBCachedFetcher.<init>(FBCachedFetcher.java:126) at org.firebirdsql.jdbc.FBResultSet.<init>(FBResultSet.java:113) at org.firebirdsql.jdbc.AbstractStatement.getCachedResultSet(AbstractStatement.java:568) at org.firebirdsql.jdbc.AbstractPreparedStatement.executeQuery(AbstractPreparedStatement.java:115) at br.com.hospitalar.control.ConvenioControl.localizarConvenio(ConvenioControl.java:35) at br.com.hospitalar.view.ConvenioView.tfPesquisarKeyPressed(ConvenioView.java:390) at br.com.hospitalar.view.ConvenioView.access$200(ConvenioView.java:35) at br.com.hospitalar.view.ConvenioView$2.keyPressed(ConvenioView.java:138) at java.awt.Component.processKeyEvent(Component.java:6221) at javax.swing.JComponent.processKeyEvent(JComponent.java:2801) at java.awt.Component.processEvent(Component.java:6040) at java.awt.Container.processEvent(Container.java:2041) at java.awt.Component.dispatchEventImpl(Component.java:4630) at java.awt.Container.dispatchEventImpl(Container.java:2099) at java.awt.Component.dispatchEvent(Component.java:4460) at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1848) at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:704) at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:969) at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:841) at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:668) at java.awt.Component.dispatchEventImpl(Component.java:4502) at java.awt.Container.dispatchEventImpl(Container.java:2099) at java.awt.Window.dispatchEventImpl(Window.java:2475) at java.awt.Component.dispatchEvent(Component.java:4460) at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Cristiano, consegui…coloquei um LIKE também ante do tfCdConvenio e deu certo.

Valeu pela ajuda.

Olá, Sou novo em Java.
mas estou estudando bastante…

há pouco tempo eu comecei a desenvolver um programa, para melhorar meus conhecimentos.
sei que essa dúvida é muito ridicula, então me desculpe a ignorãncia e os erros de português. =D
é um programa de cadastro de empresas.
fiz um banco access, conecte-o ao programa através do ODBC.
quando o Jframe empresas abre ele executa o segunte código:

public void atualiza_cmb_pesq_cidade(){ try{ cmb_pesq_cidade.removeAllItems(); // remove todos os itens do combo conexao.executaSQL("select * from empresas"); while(conexao.resultset.next()){ // enquanto encontrar carrega a cidade no combo cmb_pesq_cidade.addItem(conexao.resultset.getString("cidade")); } } catch(SQLException erro){ JOptionPane.showMessageDialog(null, "Não foi possível localizar os dados."); } }

que faz ele pegar a cidade de cada registro existente na tabela.
O meu problema é que se existirem duas ou mais cidades iguais na tabela ele irá adiciona-los combo-box.
e eu não quero.
Pq esse cmb_pesq_cidade em um parâmetro de pesquisa.

Alguém poderia me ajudar?

Olá!

Experimente trocar mudar seu SQL para:

conexao.executaSQL("select distinct cidade from empresas"); 

Não esqueça de postar aqui o resultado. :slight_smile:

Abraços

[Edit]
Só para esclarecer, dessa maneira você está buscando as cidades distintas que existem na tabela de empresas. Assim você elimina os registros repetidos. :wink:

Nossa…
Foi uma boa saída…
Mas não deu certo…
não sei PQ…
ele está caindo na excesso do “try”:

public void atualiza_cmb_pesq_cidade(){
        try{
            cmb_pesq_cidade.removeAllItems(); // remove todos os itens do combo
            conexao.executaSQL("select distinct cidade from empresas");
            while(conexao.resultset.next()){ // enquanto encontrar carrega a cidade no combo                    
                cmb_pesq_cidade.addItem(conexao.resultset.getString("cidade"));  
                        }
            }        
        catch(SQLException erro){
                JOptionPane.showMessageDialog(null, "Não foi possível localizar os dados.");
            }

Mas mesmo assim agradeço desde já… :smiley:

SQL não é muito meu forte…

mas tente colocar * no seu select, na minha visão é que você na query acima vc seleciona “nenhum dado” das tuplas que contem cidades distintas… não custa tentar.

select * distinct cidade from empresas

boa sorte

Olá!

// ...
catch(SQLException erro){
   erro.printStackTrace(); // <-
   JOptionPane.showMessageDialog(null, "Não foi possível localizar os dados.");
}

Sempre que for tratar alguma exceção, procure colocar um printStackTrace para imprimir a pilha de exceções. Desse maneira será mais fácil de identificar qual o problema que está acontecendo na sua aplicação :slight_smile:
Continuando, coloque um printStackTrace como no código acima para imprimir a pilha de exceções e cole ela aqui para a gente ver qual o problema que está acontecendo.

Obs: Sem querer ser chato, quanto estiver com um problema e não conseguir encontrar a solução, crie um tópico novo para o seu problema, será melhor para você, pois assim mais pessoas poderão ajudá-lo. Perceba que este tópico está com o título de [Resolvido], então dificilmente alguém o acessará para ajudar você. :wink:

VLw Pela ajuda ai…
postei os erros que apareceram no novo tópico que fiz…

http://www.guj.com.br/posts/list/0/138059.java#742909
Vlw… :smiley: