Deu a louca no meu jcombobox - Só aparece um registro

Bom dia, galera!

Estou desenvolvendo um pequeno sistema educacional, onde no form de cadástro de funcionários tem um jComboBox chamado CARÁTER comandado por um jTextFiels com o mesmo nome e recebendo dados do PostGres SQL.
Funcionava tranquilamente até eu querer “me mostrar” para quando eu clicar nele, o campo de texto receber o código dele de imediato, como fiz nos outros forms. Os outros combos funcionam normalmente, recebendo todos os dados da coluna, exceto este CARATER.

As configurações de códigos estão corretas, de acordo com até mesmo os outros. Não sei o que ocore. ele só está recebendo o primeiro registro de 3.

SEGUE CÓDIGOS CORRESPONDENTE A ESTE OBJETO ABAIXO:

[code]
public funcionario() {
initComponents();

    con_funcionario = new conpostgres();
    con_funcionario.conecta();
    
    con_funcao = new conpostgres();
    con_funcao.conecta();
    
    con_carater = new conpostgres();
    con_carater.conecta();
    
    con_funcionario.executeSQL("select * from funcionarios order by "+ordenacao);
    con_funcao.executeSQL("Select * from funcao order by nome");
    con_carater.executeSQL("select * from carater order by nome");
    try
    {
            while (con_funcao.resultset.next())
            cb_funcao.addItem(con_funcao.resultset.getString("nome"));
       
            while (con_carater.resultset.next())
            cb_carater.addItem(con_carater.resultset.getString("nome"));
       
        con_funcionario.resultset.first();
        mostrar_dados();

private void cb_caraterActionPerformed(java.awt.event.ActionEvent evt) {
if (primeiraVezLog == false)
{
try
{
String sql = “select * from carater where nome like '”+cb_carater.getSelectedItem()+"’";
con_carater.executeSQL(sql);
con_carater.resultset.first();
tf_carater.setText(con_carater.resultset.getString(“codigo”));
}
catch(SQLException erro)
{
JOptionPane.showMessageDialog(null,“Erro ao tentar atualizar carater”);
}
}
primeiraVezLog=false;
}

public void mostrar_dados()
{
try
{
tf_codigo.setText(con_funcionario.resultset.getString(“codigo”));
tf_nome.setText(con_funcionario.resultset.getString(“nome”));
tf_idade.setText(con_funcionario.resultset.getString(“idade”));
tf_id.setText(con_funcionario.resultset.getString(“identidade”));
tf_cpf.setText(con_funcionario.resultset.getString(“cpf”));
tf_dataadm.setText(con_funcionario.resultset.getString(“dataadm”));
tf_funcao.setText(con_funcionario.resultset.getString(“funcao”));
tf_salario.setText(con_funcionario.resultset.getString(“salario”));
tf_carater.setText(con_funcionario.resultset.getString(“carater”));
tf_telefone.setText(con_funcionario.resultset.getString(“telefone”));
tf_celular.setText(con_funcionario.resultset.getString(“celular”));
tf_email.setText(con_funcionario.resultset.getString(“email”));
tf_foto.setText(con_funcionario.resultset.getString(“foto”));
tf_obs.setText(con_funcionario.resultset.getString(“observacao”));
lb_foto.setIcon(new ImageIcon("/spca/imagem/"+tf_foto.getText()));
atualizaComboBoxFuncao();
atualizaComboBoxCarater();
}
catch(SQLException erro)
{

public void atualizaComboBoxCarater()
{
try
{
String sql = "select * from carater where codigo = "+tf_carater.getText();
con_carater.executeSQL(sql);
con_carater.resultset.first();
cb_carater.setSelectedItem(con_carater.resultset.getString(“nome”));
}
catch (SQLException erro)
{
JOptionPane.showMessageDialog(null,“Não foi possível localizar carater”+erro);
tf_carater.requestFocus();
}
}[/code]

Na tabela do PostgreSQL estão os seguintes dados:
codigo | nome
1 |Efetivo
2 |Substitito
3 |Temporario

Mas só aparece no JComboBox CARATER o registro do cód. 1.

Por favor, me ajudem…

Cara pode ser porque dentro do metodo mostrarDados voce incoca o metodo de atualização do combo box carater, da uma olhada nisso, pode ser que seja isso o erro.

Quando você utiliza isso:

con_carater.resultset.first();  

Voccê está dizendo para ele pegar apena o primeiro registro do seu resultado(ResultSet).

Boa sorte.

Não ta faltando um while?

[code]private void cb_caraterActionPerformed(java.awt.event.ActionEvent evt) {
if (primeiraVezLog == false)
{
try
{
String sql = “select * from carater where nome like '”+cb_carater.getSelectedItem()+"’";
con_carater.executeSQL(sql);
con_carater.resultset.first(); // Pega apenas o primeiro resultado
tf_carater.setText(con_carater.resultset.getString(“codigo”));
}
catch(SQLException erro)
{
JOptionPane.showMessageDialog(null,“Erro ao tentar atualizar carater”);
}
}
primeiraVezLog=false;
}

public void mostrar_dados() {}

public void atualizaComboBoxCarater()
{
try
{
String sql = "select * from carater where codigo = "+tf_carater.getText();
con_carater.executeSQL(sql);
con_carater.resultset.first(); // Pega apenas o primeiro resultado
cb_carater.setSelectedItem(con_carater.resultset.getString(“nome”));
}
catch (SQLException erro)
{
JOptionPane.showMessageDialog(null,“Não foi possível localizar carater”+erro);
tf_carater.requestFocus();
}
} [/code]

Oi,

Ou então oseu select só esta retornando 1 elemento :shock:

Tchauzin!

[quote=lina]Oi,

Ou então oseu select só esta retornando 1 elemento :shock:

Tchauzin![/quote]

kkkkkkkk, Verdade já que o sql possui uma cláusula where.

Bom dia a todos.

A primeira coisa a ser observada, assim como já foi, é

   ....
   con_funcionario.resultset.first();
   ....

1º pergunta: Este “funcionario.resultset” é um [color=red]resultset unidirecional ou bidirecional[/color]

Como assim :?:

ResultSet Unidirecional só faz um tipo de navegação em registros, ou seja (Forward Only - Somente para frente), assim que o while vai para o último registro, você não poderá ir mais ao primeiro, pois o ponteiro do registro fica engessado no último, e a navegação morre ai.

ResultSet Bidirecional, este sim, faz a navegação nos dois sentidos:

Mas como eu configuro a conexão na sentido bidirecional :?:

Simples, você fará isto no CreateStatement(Navegação, Ação), onde:

A Navegação pode ser:

1º) TYPE_FORWARD_ONLY: Navegação Unidirecional, ou seja, somente para frente.

2º) TYPE_SCROLL_INSENSITIVE: Navegação Bidirecional, ou seja, nos dois sentidos, sendo que se houver alterações no conteúdo da tabela em tempo de execução da aplicação, não aparecerá no resultado de um select.

3º) TYPE_SCROLL_SENSITIVE: Navegação Bidirecional com os reflexos de alterações na tabela em tempo de execução.

A Ação pode ser:

1º) CONCUR_READ_ONLY: Seleção que só permite a leitura dos dados.

2º) CONCUR_UPDATABLE: Permite a atualição dos dados.

Vamos ao exemplo do CreateStatement:

  ....
  Statement meuState = minhaConexão.CreateStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
  ResultSet rs = meuState.executeQuery("select * from funcionarios order by "+ordenacao);
  ....

Quanto a segunda pergunta que eu ia fazer, creio eu que já foi observada aqui:

E também aqui

Ou seja, você deve fazer uma observação exatamente de como está sendo feita esta navegação dos registros e ainda assim se o mesmo só esteja retornando apenas um registro.

Outro fato que você deve considerar é que para preencher JComboBoxes, JTables e etc. se você usar um ResulSet Unidirecional, deve fazer a navegação dos registros na Persistência de Dados contidas nos Objetos dos JComboBoxes, JTables e etc, enquanto que com o ResultSet Bidirecional, você deve aproveitar a navegação do ResultSet, haja vista que o ResultSet passou a ser a persistência de dados.

Um abraço.