Sou iniciante em Java e estou tentando criar um JComboBox e vinculá-lo ao uma lista obtida por meio de uma consulta em uma tabela de um banco de dados Access. Para isso estou utilizando um vetor como segue no código abaixo
Vector<String>vetor=newVector<String>();ConexaoBdNova.getConexao();ConexaoBdNova.setRs("select distinct responsavel from tblResponsavel");ConexaoBdNova.rs.next();while(ConexaoBdNova.rs.next()){
vetor.addElement(ConexaoBdNova.rs.getString(1));
}
JComboBoxcboEquipe=newJComboBox(vetor);cboEquipe.setFont(newFont("Arial",Font.PLAIN,14));cboEquipe.setBounds(62,233,167,20);contentPane.add(cboEquipe);
Ao debugar o código a rotina do while funciona direitinho, inclusive os na aba de variáveis do eclipse vejo que os elementos estão sendo adicionados no vetor, so que depois do último registro da lista é adicionado no vetor a rotina cai no while e, ao invés de sair do loop, ele tenta adicionar um novo elemento no vetor e ocorre um SQLException("[Microsoft][ODBC Driver Manager] Estado de cursor inválido"). Acredito que o programa cai na Exception pq ele tenta adicionar um elemento no vetor e o resultset “esta no fim”, mas se eu estiver certo por que a rotina não saiu do loop já que o resultado do rs.next() é falso? Ou será que errei em alguma coisa e não estou conseguindo enxergar?
Pergunta - por que é que você dá um rs.next() antes do while ? É para desconsiderar a primeira linha do select?
Adicionei essa linha para o resultset apontar para o primeiro registro, pois pelo que me falaram que eu preciso fazer isso para que o ponteiro aponte para o primeiro registro do resultset, a fim de evitar o "Estado de Cursor Inválido". Fico na duvida se, no caso de usar o while para varrer o resultset, esta linha é desnecessária...
E
entanglement
Nesse caso, é desnecessária.
M
mariogpr
Um duvida;
Se colocar
while (ConexaoBdNova.rs.next()!= null) {
vetor.addElement(ConexaoBdNova.rs.getString(1));
}
Enquanto for diferente de nulo, faça;
Eu só não lembro se você joga esse resultado em alguma variavel para comparar ou consegue fazer direto;
Caso precise adicionar a uma variavel:
while ((variavel=ConexaoBdNova.rs.next())!= null) {
vetor.addElement(ConexaoBdNova.rs.getString(1));
}
Também não tenho certeza, mas acho que assim da certo
while (!ConexaoBdNova.rs.next()) {
vetor.addElement(ConexaoBdNova.rs.getString(1));
}
Bom, faça o teste e me diga xD
Fabricio_Bizo
Cara. Use outro banco de dados(Postgres, JavaDB, MySql). Este banco de dados é muito lento. Provavelmente este é o motivo do erro. Se quiser usar este banco terá que colocar um Sleep() dentro do while.
fabio.alves
Mario tentei utilizar a sua sugestão mas o operador != é invalido para tipos booleanos
Falei com um colega meu e ele me sugeriu alterar a construção do meu statement da classe de conexão de banco de dados, já que os parâmetros de tipo de resultset e concorrência do método createStatement(int resultSetType, int resultSetConcurrency) não são “bem digeridos” pelo ODBC do Access. Alterei para o método createStatement() e deu certo…
Código antigo:
publicstaticbooleangetConexao(Stringcaminho){try{Class.forName(DRIVER);conexao=DriverManager.getConnection(URL+caminho);stat=conexao.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);// JOptionPane.showMessageDialog(null,"Banco de Dados conectado. O robô pode ser executado.");returntrue;}catch(ClassNotFoundExceptione){JOptionPane.showMessageDialog(null,e.getMessage());returnfalse;}catch(SQLExceptione){JOptionPane.showMessageDialog(null,e.getMessage()+"\nO robô não pode ser executado.Entre em contato com o desenvolvedor");returnfalse;}
Código atualizado:
publicstaticbooleangetConexao(Stringcaminho){
try{
Class.forName(DRIVER);conexao=DriverManager.getConnection(URL+caminho);stat=conexao.createStatement();//JOptionPane.showMessageDialog(null,"Banco de Dados conectado. O robô pode ser executado.");returntrue;}catch(ClassNotFoundExceptione){
JOptionPane.showMessageDialog(null,e.getMessage());returnfalse;}catch(SQLExceptione){
JOptionPane.showMessageDialog(null,
e.getMessage()+"\nO robô não pode ser executado.Entre em contato com o desenvolvedor");returnfalse;}
Valeu pela ajuda!
fabio.alves
Aqui no trabalho to começando a usar Java agora e por enquanto só tenho a disposição o access para trabalhar…é osso…rssss
Mas já estou estudando a possibilidade de utilização do MySql…