Java.sql.SQLException: Column '...' not found

13 respostas
N

Boa noite, tenho um sério e urgente problema...

Eu executo meu projeto... normal... mas qnd clico no botão buscar ele não ta buscando . Tem um erro que deve estar na sua condicional, que envolve a coluna CÓDIDO. pois a classe nao encontra, e passa o erro: java.sql.SQLException: Column 'codigo' not found. Mas eu não sei onde tá exatamente o erro.. eu verifiquei no MySql e pra mim ta tudo normal.. E esse erro com a condicional que também não está salvando os dados que cadastro, para aparecer na tabela...

Por favor alguém me ajuda? Preciso mto de uma solução. Amanhã é minha apresentação do TCC e o sistema tem que funcionar... :S

public class ProfessorControl {
    PreparedStatement pstm;
     ResultSet rs;
    String consultaProfessor="SELECT * FROM PROFESSOR WHERE NOME LIKE?";
   String cadastraProfessor="INSERT INTO PROFESSOR(NOME, ENDERECO, CIDADE, BAIRRO, DDD, UF, TELEFONE, CELULAR, FORMACAO, RG, CPF, NUMERO, "+
           "ATIVIDADEEXTRACURRICULAR) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?)";
   String alterarProfessor="UPDATE PROFESSOR SET NOME=?, ENDERECO=?, CIDADE=?, BAIRRO=?, TELEFONE=?, FORMACAO=?, CPF=?, RG=?, UF=?, DDD=?, CELULAR=?, "+ 
           "ATIVIDADEEXTRACURRICULAR=?, NUMERO=? WHERE CODIGO = ?";  
    AcessoMySql bd=new AcessoMySql();
    
   
   public void alterarProfessor(ProfessorBean professor){
    try{
        pstm= (PreparedStatement) bd.conectar().prepareStatement(alterarProfessor);
        pstm.setString(1, professor.getNomecompleto());
        pstm.setString(2, professor.getEndereco());
        pstm.setString(3, professor.getCidade());
        pstm.setString(4, professor.getFormacao());
        pstm.setString(5, professor.getBairro());
        pstm.setString(6, professor.getUf());
        pstm.setString(7, professor.getTelefone());
        pstm.setString(8, professor.getAtividadeextracurricular());
        pstm.setString(9, professor.getCelular());
        pstm.setString(10, professor.getCpf());
        pstm.setString(11,professor.getRg());
        pstm.setString(12, professor.getNumero());
        pstm.setString(13, professor.getDdd());
        pstm.setInt(14, professor.getCodigo());
        pstm.executeUpdate();
        bd.desconectar();
    }catch(Exception e){
        e.printStackTrace();
    }
    }
    
   
    public void cadastrarProfessor(ProfessorBean professor){
    try{
        pstm=(PreparedStatement) bd.conectar().prepareStatement(cadastraProfessor);
        pstm.setString(1, professor.getNomecompleto());
        pstm.setString(2, professor.getEndereco());
        pstm.setString(3, professor.getCidade());
        pstm.setString(4, professor.getFormacao());
        pstm.setString(5, professor.getBairro());
        pstm.setString(6, professor.getUf());
        pstm.setString(7, professor.getTelefone());
        pstm.setString(8, professor.getAtividadeextracurricular());
        pstm.setString(9, professor.getCelular());
        pstm.setString(10, professor.getCpf());
        pstm.setString(11,professor.getRg());
        pstm.setString(12, professor.getNumero());
        pstm.setString(13, professor.getDdd());
        pstm.setInt(14, professor.getCodigo());
        pstm.executeUpdate();
        bd.desconectar();
    }catch(Exception e){
        e.printStackTrace();
    }
    }
    

    public List<ProfessorBean> listarProfessores(String nome){
      List<ProfessorBean> professores=new ArrayList();  
      try{
          pstm =(PreparedStatement) bd.conectar().prepareStatement(consultaProfessor);
          pstm.setString(1, nome); //SELECT * FROM PROFESSOR WHERE NOME LIKE 
          rs = pstm.executeQuery();
          ProfessorBean pro;
          
          while (rs.next()) {
              pro = new ProfessorBean();
              pro.setCodigo(rs.getInt("codigo"));
              pro.setNomecompleto(rs.getString("nomecompleto"));
              pro.setEndereco(rs.getString("endereco"));
              pro.setBairro(rs.getString("bairro"));
              pro.setCidade(rs.getString("cidade"));
              pro.setNumero(rs.getString("numero"));
              pro.setDdd(rs.getString("ddd"));
              pro.setCpf(rs.getString("cpf"));
              pro.setFormacao(rs.getString("formacao"));
              pro.setRg(rs.getString("rg"));
              pro.setUf(rs.getString("uf"));
              pro.setCelular(rs.getString("celular"));
              pro.setTelefone(rs.getString("telefone"));
              pro.setAtividadeextracurricular(rs.getString("atividadeextracurricular"));
              professores.add(pro);
          }
          bd.desconectar();
      } catch(Exception e){
          e.printStackTrace();
      }
      return professores;
    
    }
}

CODIGO DO PROFESSOR

public class Professor extends javax.swing.JFrame{

    
    public Professor() {
        initComponents();
    }
 DefaultTableModel tmProfessor=new DefaultTableModel(null, new String[]{"Código", "Nome","Endereço", "Formação", "Telefone"});
 
 ListSelectionModel lsmProfessores;   
 List<ProfessorBean> professores;
  String tipoCadastro;                  

      

private void jBCadastrarActionPerformed(java.awt.event.ActionEvent evt) {                                            
if(tipoCadastro.equals("novo")){
    cadastraProfessor();
}else if(tipoCadastro.equals("alteracao")){
alteraProfessor();
    
}  
}                                           


private void cadastraProfessor(){
    if (verificarCampos()){
ProfessorBean professor=new ProfessorBean();
professor.setNomecompleto(jTfnomecompleto.getText().trim());
professor.setAtividadeextracurricular(jTfatividadeextracurricular.getText().trim());
professor.setBairro(jTfBairro.getText().trim());
professor.setCelular(jTfcelular.getText().trim());
professor.setCidade(jTfcidade.getText().trim());
professor.setCpf(jTfCPF.getText());
professor.setDdd(jTfddd.getText().trim());
professor.setEndereco(jTfEndereço.getText().trim());
professor.setFormacao(jTfFormação.getText().trim());
professor.setNumero(jTfnumero.getText());
professor.setRg(jTfRG.getText());
professor.setTelefone(jTftelefone.getText().trim());
professor.setUf(jTfestado.getText().trim());
ProfessorControl p=new ProfessorControl();
p.cadastrarProfessor(professor);
desabilitarCampos();
   }
}
private boolean verificarCampos(){
    if(!jTfnomecompleto.getText().trim().equals("")){
        return true;
    }
    return false;
 
}

private void btNovoActionPerformed(java.awt.event.ActionEvent evt) {                                       
tipoCadastro="novo";   
novoProfessor();

}                                      

                                         

private void listarProfessores(){
    ProfessorControl pro=new ProfessorControl();
    professores=pro.listarProfessores(jTfbusca.getText().trim() + "%");
    mostrarProfessores(professores);
}
    

private void mostrarProfessores(List<ProfessorBean> professores){
while(tmProfessor.getRowCount() > 0){
            tmProfessor.removeRow(0);   
    }
     if(professores.size() == 0){
     JOptionPane.showMessageDialog(this, "Nenhum professor encontrado!"); // Qnd Clico em buscar só aparece essa <- msg. Por mais que eu salve ;S
      } else{
     
        String[] campos = new String[] {tipoCadastro};
        for (int i=0; i < professores.size(); i++){
            tmProfessor.addRow(campos);
            tmProfessor.setValueAt(professores.get(i).getCodigo(), i, 0);
            tmProfessor.setValueAt(professores.get(i).getNomecompleto(), i, 1);
            tmProfessor.setValueAt(professores.get(i).getEndereco(), i, 2);
            tmProfessor.setValueAt(professores.get(i).getFormacao(), i, 3);
            tmProfessor.setValueAt(professores.get(i).getTelefone(), i, 4);
        }        
    }
}

private void alteraProfessor(){
    if(tbProfessor.getSelectedRow()!=-1){
        habilitarCampos();
    }else{
        JOptionPane.showMessageDialog(this,"Selecione um professor!");
    }
}
private void alterarProfessor(){
    if (verificarCampos()){
ProfessorBean professor=new ProfessorBean();
professor.setCodigo(professores.get(tbProfessor.getSelectedRow()).getCodigo());
professor.setNomecompleto(jTfnomecompleto.getText().trim());
professor.setAtividadeextracurricular(jTfatividadeextracurricular.getText().trim());
professor.setBairro(jTfBairro.getText().trim());
professor.setCelular(jTfcelular.getText().trim());
professor.setCidade(jTfcidade.getText().trim());
professor.setCpf(jTfCPF.getText());
professor.setDdd(jTfddd.getText().trim());
professor.setEndereco(jTfEndereço.getText().trim());
professor.setFormacao(jTfFormação.getText().trim());
professor.setNumero(jTfnumero.getText());
professor.setRg(jTfRG.getText());
professor.setTelefone(jTftelefone.getText().trim());
professor.setUf(jTfestado.getText().trim());
ProfessorControl p=new ProfessorControl();
p.alterarProfessor(professor);
desabilitarCampos();
   } else{
        JOptionPane.showMessageDialog(this, "Informe o nome do professor!");
        jTfnomecompleto.requestFocus();
    }
}



private void jBBuscarActionPerformed(java.awt.event.ActionEvent evt) {                                         
  listarProfessores();

OBS.: To fazendo o codigo com o curso T2Ti - Java Starter

13 Respostas

R

coloca sql da tabela que você criou.

L

O errro acusa que este select -> SELECT * FROM PROFESSOR WHERE NOME LIKE?
não possui a coluna codigo.

Verifique a estrutura de sua tabela. Não sei se o java é case sensitive nesta situação mais so para tirar a duvida faça:

pro.setCodigo(rs.getInt("CODIGO"));

B

Pergunta boba: pq o ? está junto to like? Não era pra ser
“SELECT * FROM PROFESSOR WHERE NOME LIKE ?” não?

N

Meu Código já está assim Lucas:

public List<ProfessorBean> listarProfessores(String nome){  
      List<ProfessorBean> professores=new ArrayList();    
      try{  
          pstm =(PreparedStatement) bd.conectar().prepareStatement(consultaProfessor);  
          pstm.setString(1, nome); //SELECT * FROM PROFESSOR WHERE NOME LIKE   
          rs = pstm.executeQuery();  
          ProfessorBean pro;  
            
          while (rs.next()) {  
              pro = new ProfessorBean();  
              pro.setCodigo(rs.getInt("codigo"));  // <---

Ramon não entendi sua pergunta... vc tá falando das condicionais que preciso para chegar na tabela?

public class Professor extends javax.swing.JFrame{  
  
      
    public Professor() {  
        initComponents();  
    }  
DefaultTableModel tmProfessor=new DefaultTableModel(null, new String[]{"Código", "Nome","Endereço", "Formação", "Telefone"});  //Definindo as colunas
  
ListSelectionModel lsmProfessores;     
List<ProfessorBean> professores;  
  String tipoCadastro;

Condicional

private void mostrarProfessores(List<ProfessorBean> professores){  
while(tmProfessor.getRowCount() > 0){  
            tmProfessor.removeRow(0);     
    }  
     if(professores.size() == 0){  
     JOptionPane.showMessageDialog(this, "Nenhum professor encontrado!"); // Qnd Clico em buscar  aparece essa <- msg. Por mais que eu salve ;S  
      } else{  
       
        String[] campos = new String[] {tipoCadastro};  
        for (int i=0; i < professores.size(); i++){  
            tmProfessor.addRow(campos);  
            tmProfessor.setValueAt(professores.get(i).getCodigo(), i, 0);  
            tmProfessor.setValueAt(professores.get(i).getNomecompleto(), i, 1);  
            tmProfessor.setValueAt(professores.get(i).getEndereco(), i, 2);  
            tmProfessor.setValueAt(professores.get(i).getFormacao(), i, 3);  
            tmProfessor.setValueAt(professores.get(i).getTelefone(), i, 4);  
        }          
    }  
}
N

Pergunta boba: pq o ? está junto to like? Não era pra ser
“SELECT * FROM PROFESSOR WHERE NOME LIKE ?” não?

Bom… o curso tras assim… :stuck_out_tongue_winking_eye: rs

N

Alguém me ajuda?? :(’

B

Naah

faz o seguinte, pega o sql q roda direto no bco pra ver se vc encontra.
vc ta colocando as aspas e percentuais no like?

ex.: select * from professor where nome like ‘%berg%’

??

N

Isso responde sua pergunta ?

public class Conexao {
public static void main (String[] args){
    try{
    Class.forName("com.mysql.jdbc.Driver");
    String url="jdbc:mysql://localhost:3306/timedb";
    Connection con=DriverManager.getConnection(url,"admin","123");
    System.out.println("Con: "+con);
    Statement statement=con.createStatement();
    //statement.executeUpdate("Insert into professor(rg, nome)values(5, 'fulano')");
    ResultSet rs=statement.executeQuery("Select * from professor where nome like");    // <--------------
   if(rs.first())
   {
       do
       {
            System.out.println("Nome: "+rs.getString("nome"));
       }while(rs.next());
      
   }
    } catch(ClassNotFoundException e){
         e.printStackTrace();
    }catch(SQLException e){
        e.printStackTrace();
    }
}    
}
N

Obs.: Quando eu tiro o ‘?’ aparece o erro parameter index out of range (1 number of parameters which is 0)

E qnd eu deixo aparece java.sql.SQLException: Column ‘codigo’ not found.

Oque eu faço? ;S

Isso na Classe ProfessorControl

public class ProfessorControl { PreparedStatement pstm; ResultSet rs; String consultaProfessor="SELECT * FROM PROFESSOR WHERE NOME LIKE?"; //<–

B

Talvez eu tenha me expressado mal.

  1. O que eu quis dizer, foi: vc pegou o sql que está sendo gerado na aplicação e rodou diretamente no banco (sem ser pela SUA aplicação) para saber se está retornando valores?

Quanto ao like que falei: o operador like faz a pesquisa numa tabela à procura de um padrão. Então, por exemplo, se vc fizer um:

  • SELECT * FROM PROFESSOR WHERE NOME LIKE ‘%berg’, vai retornar todos professores que terminem com o final ‘berg’.
  • Se vc fizer SELECT * FROM PROFESSOR WHERE NOME LIKE ‘berg%’, retorna os caras que começam por ‘berg’
  • se vc fizer SELECT * FROM PROFESSOR WHERE NOME LIKE ‘%berg%’, acho que vc já deduziu.

Por isso que estou questionando sobre a possibilidade da string SQL não estar rodando certo.

  1. Qdo eu perguntei do “LIKE?”, não quis dizer que tirasse, somente desse um espaço entre o ‘LIKE’ e o ‘?’. Mas se não tá dando erro assim, deixa.]

  2. Então, partindo do princípio que sua pesquisa está rodando blz no bco (sem interferência da app),
    . existe essa coluna codigo, da forma como está escrita?
    . vc verificou se o resultset está retornando algum valor ou está vazio?
    . como o resultset aponta inicialmente antes do primeiro registro, pq vc não usa um rs.next() pra avançar, em vez de ir p first()?

Qq coisa, passa o rádio.
Abcs

B

já verificasse se é case sensitive esse teu banco? pode ser que não esteja encontrando a coluna ‘codigo’, pq ela é ‘Codigo’ ou ‘CODIGO’.

verifica ae

N
berg.pb:
Talvez eu tenha me expressado mal.

1) O que eu quis dizer, foi: vc pegou o sql que está sendo gerado na aplicação e rodou diretamente no banco (sem ser pela SUA aplicação) para saber se está retornando valores?

Quanto ao like que falei: o operador like faz a pesquisa numa tabela à procura de um padrão. Então, por exemplo, se vc fizer um:
* SELECT * FROM PROFESSOR WHERE NOME LIKE '%berg', vai retornar todos professores que terminem com o final 'berg'.
* Se vc fizer SELECT * FROM PROFESSOR WHERE NOME LIKE 'berg%', retorna os caras que começam por 'berg'
* se vc fizer SELECT * FROM PROFESSOR WHERE NOME LIKE '%berg%', acho que vc já deduziu.

Por isso que estou questionando sobre a possibilidade da string SQL não estar rodando certo.

2) Qdo eu perguntei do "LIKE?", não quis dizer que tirasse, somente desse um espaço entre o 'LIKE' e o '?'. Mas se não tá dando erro assim, deixa.]

3) Então, partindo do princípio que sua pesquisa está rodando blz no bco (sem interferência da app),
. existe essa coluna codigo, da forma como está escrita?
. vc verificou se o resultset está retornando algum valor ou está vazio?
. como o resultset aponta inicialmente antes do primeiro registro, pq vc não usa um rs.next() pra avançar, em vez de ir p first()?

Qq coisa, passa o rádio.
Abcs

Percebi que não está inserindo nada no banco continua o que eu criei anteriormente no cmd e inserido um dado em outro aplicativo..
Porém qnd eu executo a Classe AcessoMySql , conecta com o Banco pelo menos.

Obs: eu mandei a classe de conexao errada... ;S Desculpa pelo vacilo. Tai a certa. ;P

public class AcessoMySql {
    Connection con;
    
    
        
    
    public AcessoMySql () {
       
    } 
    public Connection conectar (){
        try {
      Class.forName("com.mysql.jdbc.Driver");
      con = DriverManager.getConnection("jdbc:mysql://localhost:3306/timedb?user=admin&password=123");
        } catch (ClassNotFoundException ex){
            ex.printStackTrace();
            System.out.println("Não foi possível encontrar o Driver");
        } catch (SQLException ex){
            ex.printStackTrace();
            System.out.println("Não foi possível conectar ao banco!");
        }
        return con;
        }
    public void desconectar(){
  try{
        con.close();
  } catch (SQLException ex){
      ex.printStackTrace();
  }
    }


}
B

sinceramente não entendi.
não tem nada no banco, é isso?

com relação à conexão, não acho que este seja o erro. se não deu erro de conexão, então não eh ela. melhor vc fazer o que disse antes, verificar se a sql, executada dentro do mySql, retorna alguma coisa.

abcs

Criado 16 de janeiro de 2013
Ultima resposta 17 de jan. de 2013
Respostas 13
Participantes 4