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

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

[code]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;

}

}
[/code]

CODIGO DO PROFESSOR

[code]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 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 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();[/code]

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

coloca sql da tabela que você criou.

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"));

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

Meu Código já está assim Lucas:

[code]public List listarProfessores(String nome){
List 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"));  // <---

[/code]

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

[code]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 professores;
String tipoCadastro;
[/code]

Condicional

[code]private void mostrarProfessores(List 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);  
    }          
}  

} [/code]

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

Bom… o curso tras assim… :stuck_out_tongue_winking_eye: rs

Alguém me ajuda?? :(’

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%’

??

Isso responde sua pergunta ?

[code]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();
}
}
}[/code]

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?"; //<–

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

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

[quote=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.

  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[/quote]

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. :stuck_out_tongue_winking_eye:

[code]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();
}
}

}[/code]

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