botões de navegação

8 respostas
Naruto

Bom dia... eu criei uma tela de cadastro e inserir nela alguns botões para navegar nos registros e esta funcionando so que gostaria de saber c é a forma correta de fazer isso

segue a baixo o codigo

DAO
public ResultSet buscarFornecedor() {

		Connection con = null;
		Statement stmt = null;

		try {
			con = Conexao.getConnection();

			stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);

			rs = stmt.executeQuery("Select * from fornecedor order by id_fornecedor");

			return rs;
		} catch (SQLException ignored) {
		}
		return rs;

	}

CTR

public ResultSet buscarFornecedor(){
		
		FornecedorDAO fornecedorDAO = new FornecedorDAO();
		rs = fornecedorDAO.buscarFornecedor();
		return rs;
	}

e na view a forma que eu chamo

public void atribuirvaloresedits() throws SQLException {

		lblcodigo.setText(rs.getString("id_fornecedor"));
		edtnomefantasia.setText(rs.getString("nomefantasia"));
		edtrazaosocial.setText(rs.getString("razaosocial"));
		edtcnpj.setText(rs.getString("cnpj"));
		edtie.setText(rs.getString("ie"));
		edtdatacad.setText(rs.getString("datacadastro"));
		edtendereco.setText(rs.getString("endereco"));
		edtnumero.setText(rs.getString("numero"));
		edtbairro.setText(rs.getString("bairro"));
		edtcidade.setText(rs.getString("cidade"));
		edtcep.setText(rs.getString("cep"));
		cmbuf.setSelectedItem(rs.getString("uf"));
		edttelefone.setText(rs.getString("telefone"));
		edtfax.setText(rs.getString("fax"));
		edtcelular.setText(rs.getString("celular"));
		edtemail.setText(rs.getString("email"));
		edtsite.setText(rs.getString("site"));
		txtobs.setText(rs.getString("observacao"));
		edtprazo.setText(rs.getString("prazo"));
		edtdesconto.setText(rs.getString("desconto"));
		edtnomecontato.setText(rs.getString("nomecontato"));
		edttelefonecontato.setText(rs.getString("telefonecontato"));
		edtramal.setText(rs.getString("ramalcontato"));

	}
btnproximo.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					try {
						rs.next();
						atribuirvaloresedits();
					} catch (Exception e1) {

					}
				}
			});

8 Respostas

Link_pg

Olá!

Seria legal ao invés do buscarFornecedor retornar um ResultSet, ele empacotar todos os dados dentro de uma lista e retornar um List, pois assim tua classe de negócio fica independente… se por acaso os dados ao invés de vir do banco de dados, virem de um xml ou de um arquivo? ResultSet é uma implmentação de uma lista específica para banco de dados, portanto se por acaso mudar a maneira de obter os dados muito código terá que ser alterado. Já o List é uma definição abstrata para listas que pode ser usada pra qualquer origem de dados…

No teu Próximo, aconselho a fazer uma classe separada pra gerenciar a navegação, que basicamente vai pegar a lista e vai dar um get() no objeto da posição index + 1 e o anterior index - 1, sempre cuidando para não dar um NoSuchElementException (pegar um objeto da list numa posição vazia, como -1).

Uma dica: detalhes de implementação de COMO você está buscando os dados (SGBD, arquivo, rede) não devem ser mostrados pra camada de negócios.

Abraços

Naruto

como eu faria com a lista??? pode me da uma ajuda?

Link_pg

Então,

basicamente tu iria empacotar tudo dentro de um objeto… cria uma classe Fornecedor, com os atributos que um fornecedor tem (id, razão social, nome fantasia, etc…)

public class Fornecedor{
    private int id;
    private String nomeFantasia, razaoSocial;

    //getters and setters
    public void setId(int id){
        this.id = id;
    }

    public int getId(){
        return this.id;
    }

    //mais getters and setters...
}

daí o teu buscarFornecedor no DAO ficaria assim

public List buscarFornecedor() {  
    //continua do jeito que está...
    //Connection con = null...

    Fornecedor f = null;
    List<Fornecedor> listaFornecedores = new ArrayList<Fronecedor>();
    while(rs.next()){
        f = new Fornecedor();
        f.setId(rs.getString("id_fornecedor"));
        f.setNomeFantasia(rs.getString("nomefantasia"));
        f.setRazaoSocial(rs.getString("razaosocial")); 
        
        //e assim por diante até preencher todos atributos

        listaFornecedores.add(f);
    }

    return listaFornecedores;
}

na view:

FornecedorDAO fornecedorDAO = new FornecedorDAO();  
List listaFornecedores = fornecedorDAO.buscarFornecedor();
Fornecedor f = listaFornecedores.get(posicao);

lblcodigo.setText(f.getId("id_fornecedor"));
edtnomefantasia.setText(f.getNomeFantasia("nomefantasia"));

//e assim por diante...
//no próximo tu faz posicao + 1, no anterior posicao - 1, 
//sempre verificando se não vai ultrapassar os limites da lista
Naruto

tpw mais ai como eu navegaria para frente e para tras ou para o ultimo???

e não passaria pelo CTR assim???

Link_pg

posicao é uma variavel do tipo int… no próximo tu vai dar um posicao + 1 e no anterior posicao - 1, quando tu der um get(posicao) na lista, tu vai pegar uma posicao diferente…

primeiro: posicao = 0;

último: posicao = lista.size() -1;

passaria sim, é só você fazer o mesmo método pegando do banco e retornando a lista… ali eu fiz direto só pra dar menos trabalho…

Naruto

legal cara acho que vo seguir o seu conselho hehehe
vlww

fabio_kaspar

Olá pessoal, estou com um problema. No meu programa de cadastro estou querendo navegar entre os registros de uma tabela utilizando botões, porém estou com muita dificuldade. Com o JOptionPane ele move os registros, porém se eu tirar ele, o cursor pára no primeiro registro e não é isso que eu queria. Eu queria avançar os registros conforme eu clicar no botão “proximo”. Vou postar o meu código aqui e aguardo a opinião de vocês. Muito obrigado desde já.

public class BtnProxActionListener implements ActionListener {  
             public void actionPerformed(ActionEvent e) {  
                  String url = "jdbc:mysql://127.0.0.1/javabd2";  
                 String usuario = "root";  
                 String senha = null;  
                  Connection conx;  
     
    try {  
      conx = DriverManager.getConnection(url, usuario, senha);  
        stt = conx.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,  
                            ResultSet.CONCUR_UPDATABLE);  
                      ResultSet nx = stt.executeQuery("SELECT * FROM cliente");   
              while(nx != null){  
                         JOptionPane.showMessageDialog(null, "próximo registro");  
                             nx.next();  
                          txtNmCl.setText(nx.getString("cl_nome"));  
                           txtRgCl.setText(nx.getString("cl_rg"));  
                          txtCpfCl.setText(nx.getString("cl_cpf"));  
                           txtTelCl.setText(nx.getString("cl_tel"));  
                          txtEndCl.setText(nx.getString("cl_end"));  
                  
                         
                  }  
                  stt.close();  
                   
                 }catch(SQLException e1){  
                   e1.printStackTrace();  
          }  
              
       }  
  }
gergon

Tente fazer assim… fabio

while(nx.next()){    
                       JOptionPane.showMessageDialog(null, "próximo registro"); 
                        txtNmCl.setText(nx.getString("cl_nome"));    
                        txtRgCl.setText(nx.getString("cl_rg"));    
                        txtCpfCl.setText(nx.getString("cl_cpf"));    
                        txtTelCl.setText(nx.getString("cl_tel"));    
                        txtEndCl.setText(nx.getString("cl_end"));    
                }
Criado 6 de agosto de 2008
Ultima resposta 1 de ago. de 2010
Respostas 8
Participantes 4