Erro: Column not found [RESOLVIDO]

21 respostas
V

pessoal alguém sabe o qué é esse erro?

java.sql.SQLException: Column not found

ja verifiquei todas as colunas do banco, e estão todas corretas. O banco que estou utilizando é o Acces.

21 Respostas

G

De uma revisada no seu código novamente ou posta ele ai, porque esse erro dá quando não encontra a coluna…

flw!

V

pessoal alguém ai me ajude por favor… preciso mesmo … urgente…

V

ai meu codigo, ja revisei o banco várias vezes e as colunas estão iguais a que estou pegando…

package Internos;

import conectar.Conexao;

import java.sql.SQLException;

import java.util.List;

/**
*

  • @author vagner duarte
    
    */
    
    public class AdicionarContatoControl {
    
    Conexao conec;
    

    public List listarContato (String busca){

    List<AdicionarContatoBean> contato = null;
     
     try {
    String sql = "select nome from contato where  nome like '" + busca + "'" ;
     AdicionarContatoBean cont;
     conec = new Conexao();
     conec.Conectar();
     conec.Consultas(sql);
     while (conec.rs.next()) {
        cont = new AdicionarContatoBean();
        cont.setNome(conec.rs.getString("nome"));
        cont.setEmpresa(conec.rs.getString("empresa"));
        cont.setDd1(conec.rs.getString("dd1"));
        cont.setDd2(conec.rs.getString("dd2"));
        cont.setFone1(conec.rs.getString("telefone1"));
        cont.setFone2(conec.rs.getString("telefone2"));
        cont.setData(conec.rs.getString("data_de_cadastro"));
        cont.setCodigo(conec.rs.getInt("codigo"));
        contato.add(cont);
         }
     } catch (SQLException ex) {
         ex.printStackTrace();
     }
    

    return contato;

    }

}

G

Posta seu código!!!

V

vejam todo o erro:

java.sql.SQLException: Column not found

at sun.jdbc.odbc.JdbcOdbcResultSet.findColumn(JdbcOdbcResultSet.java:1850)

at sun.jdbc.odbc.JdbcOdbcResultSet.getString(JdbcOdbcResultSet.java:411)

at Internos.AdicionarContatoControl.listarContato(AdicionarContatoControl.java:32)

at Tela.Buscar.ListarContato(Buscar.java:250)

at Tela.Buscar.bt_pesquisarActionPerformed(Buscar.java:254)

at Tela.Buscar.access$000(Buscar.java:26)

at Tela.Buscar$1.actionPerformed(Buscar.java:75)

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:6134)

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

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

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

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

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

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

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

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

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

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

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

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

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)

CONSTRUÍDO COM SUCESSO (tempo total: 14 segundos)
G

vagner.analista:
ai meu codigo, ja revisei o banco várias vezes e as colunas estão iguais a que estou pegando…

package Internos;

import conectar.Conexao;
import java.sql.SQLException;
import java.util.List;

/**
 *
 * @author vagner duarte
 */
public class AdicionarContatoControl {
    Conexao conec;

    public List<AdicionarContatoBean> listarContato (String busca){
        
        List<AdicionarContatoBean> contato = null;
        
        try {
       String sql = "select nome from contato where  nome like '" + busca + "'" ;
        AdicionarContatoBean cont;
        conec = new Conexao();
        conec.Conectar();
        conec.Consultas(sql);
        while (conec.rs.next()) {
           cont = new AdicionarContatoBean();
           cont.setNome(conec.rs.getString("nome"));
           cont.setEmpresa(conec.rs.getString("empresa"));
           cont.setDd1(conec.rs.getString("dd1"));
           cont.setDd2(conec.rs.getString("dd2"));
           cont.setFone1(conec.rs.getString("telefone1"));
           cont.setFone2(conec.rs.getString("telefone2"));
           cont.setData(conec.rs.getString("data_de_cadastro"));
           cont.setCodigo(conec.rs.getInt("codigo"));
           contato.add(cont);
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
    return contato;

    }

}

Se a variavel conec for um ResultSet válido, tá tudo certo com o seu código.
Pelo erro tem alguma coluna que o nome não está batendo, para descobrir qual é comenta o código testa com uma de cada vez.
Tenta rodar o sql q está na sua variavel sql direto no banco pra ver se não está com erro.

Espero ter ajudado!

G

Outra dica evite usar o comando like ele atrapalha muito o desempenho das suas consultas, se tiver muitas linhas na sua tabela ele vai ter que verificar linha por linha e String por string do campo para encontrar o q vc procura.

flw!

V

ok pessoal, agradeço a todos pela atenção vou fazer isso e tentar descobrir onde esta esse erro, valeu a todos…

T

Algum desses campos não existem na Tabela [color=red]Contato[/color]: nome,empresa,dd1,dd2,telefone1,telefone2,data_de_cadastro,codigo

Abraço.

V

cara valeu, mas infelizmente eu posso te afirmar isso, ja conferi isso umas 30 vezes, inclusive ja abri a tabela e fui copiando os nomes das colunas e colando para mim evitar o erro de digitação mas mesmo assim da o mesmo erro. Mas ainda não desistir to verificando tudo aqui…se alguém tiver idéia poste-me ai por favor, agradeço a todos…

G

Puts essa eu deixei passar, foi vacilo meu… kkkkk :smiley: :smiley: :smiley:

O seu select está assim:

String sql = "select nome from contato where  nome like '" + busca + "'" ; // <-- Essa query só retorna a coluna nome

E nessa parte do código você está tentando recuperar outros campos que não são retornados na query acima, por isso o erro column not found

cont.setNome(conec.rs.getString("nome"));  
cont.setEmpresa(conec.rs.getString("empresa"));  // <- inválido empresa não retorna 
cont.setDd1(conec.rs.getString("dd1"));  // <- inválido idem o de cima
cont.setDd2(conec.rs.getString("dd2"));  / <- inválido idem o de cima
cont.setFone1(conec.rs.getString("telefone1"));  // <- inválido idem o de cima
cont.setFone2(conec.rs.getString("telefone2"));  // <- inválido idem o de cima
cont.setData(conec.rs.getString("data_de_cadastro"));  // <- inválido idem o de cima
cont.setCodigo(conec.rs.getInt("codigo"));  // <- inválido idem o de cima

Se você quiser que sejam retornados deve mudar sua query.

Mude para isso:

String sql = "select * from contato where  nome like '" + busca + "'" ; // <--  Retorna todos os campos da tabela

flw!

J

Utilize o prepareStatement ficar melhor e não tem risco de sql inject ^^

PreparedStatement pstmt = null;
Connection con = null;
ResultSet rs = null

con = //Factory de conexão ... 

String sql = "SELECT nome, empresa, dd1, dd2, telefone1, telefone2, data_de_cadastro, codigo FROM contato WHERE nome LIKE = ?"

pstmt = con.prepareStatement(sql);
pstmt.setString(1,busca);

rs = pstmt.executeQuery();

Abraço

V

Primeiramente eu gostaria de agradecer a todos aqueles que me ajudaram e colaboraram comigo, mas infelizmente sou desistir de terminar esse pequeno sistema, ja tenho o problema de ser iniciante, e a cada hora que eu consigo resolver um problema surge outro e nada nunca funciona. ja tem mais de mês que estou tentando fazer essa coisa que parece ser tão simples mas ao mesmo tempo tão complicado. Valeu a todos mais uma vez.

G

Cara o erro estava no seu select, veja na minha mensagem anterior…

Quando agente está iniciando é comum ter bastante erros e dúvidas.

abraços!

V

sim, sim eu vi inclusive consertei isso mas como eu disse, outro erro surgiu, quer dizer nenhum erro não sugiu mas quando vou mostrar os dados da a mensagem que nenhum registro foi encontrado, mas quando eu coloco o mesmo codigo no banco aparece todos os dados e ja não sei mais o que fazer… pior que não tem nem como colocar o codigo pois ele é muito grande…

I

Poste o nome e o tipo das colunas no banco.

V

vamos la:

nome = tipo texto
empresa = tipo texto
dd1 = tipo texto
dd2 = tipo texto
telefone1 = tipo texto
telefone2 = tipo texto
data = tipo texto
codigo = tipo numerico

OBS: banco de dados Acces.

V

só mais uma consideração breve, o problema agora não esta mais na consulta no banco, pois fiz como o gilmaslima falou e deu tudo certou ou seja, não esta dando mais erro nenhum, ai pego todo o meu resultset e jogo em um arraylist, mas quando vou mostrar os dados diz que não foi encontrado nehum registro. Mas o mesmo codigo sql no banco me retorna os registro sim.

I

Onde tu declarou

List&lt;AdicionarContatoBean&gt; contato = null;

Faça assim

List&lt;AdicionarContatoBean&gt; contato = new ArrayList<AdicionarContatoBean>;
J

Faça com o pstmt como mostrei anteriormente …

E outra coisa olhe se você não concatenou sua string sql de maneira errada, já apaguei uma vez para descobrir por que um select funcionava no banco e na aplicação não ai descobri esse erro.

Ex:

String sql = "SELECT nome, " +
"logradouro, " +
"bairro, " +
"numero, " +
"cidade" +
"FROM tab_funcionario " +
"WHERE cd_funcionario = ?";

Aparentemente está tudo certo, se você tirar as aspas e setar o parametro na base de dados iriam funcionar mais repare no campo cidade, se você der um System.out.println(sql) vai acontecer o seguinte:

SELECT nome, logradouro, bairro, numero, cidadeFROM tab_funcionario WHERE cd_funcionario = ?

E iria dar um erro na hora da consulta.

Abraço e utilize o pstmt !! =]

V

Pessoal primeiramente gostaria de agradecer a todos novamente depois de quase desistir consegui resolver aqui com a ajuda de todos, o erro era o seguinte:

eu iniciando o meu List com null.

List contato = null;

depois eu fiz assim, como um colega ai indicou:

List contato = new ArrayList(500);

ai tudo passou a funcionar perfeitamente, todos os dados em cada linha da tabela.

Muito obrigado novamente a todos.

Criado 12 de janeiro de 2009
Ultima resposta 13 de jan. de 2009
Respostas 21
Participantes 5