Olá…
Gostaria de saber como faço para navegar entre os registros que estão lá no Banco.
Tenho os Botões: Próximo, Primeiro, Anterior e Ultimo.
Estou usando o Modelo MVC. Encontrei alguns exemplos, mas os códigos estavam todos misturados na mesma classe de persistência e visão, enfim, não consegui entender.
Sei sobre os comandos: rs.first(), previous… Mas não sei como criar os metodos. Alguém poderia explicar como crio eles no persistência e como chamo eles lá no view?
A tela no View, tem os TextField com os dados dos clientes, quando clicar ex: Próximo ele mostra na text field todos os dados do Próximo cliente.
Obrigado.
Em MVC normalmente em C tem uma classe que faz conexão com o banco
e DAOs para fazem a chamada de selects para cada item do registro.
Então quando o cara clica na tela (em V) ela passa para a classe em C
um pedido de mostrar um registro de determinado ID.
Essa classe acessa
o banco, carrega um objeto de M com as informações e manda para
uma classe em V mostrar as informações.
Nessas classes de C, os DAOs, normalmente tem metodos que
recebem o ID e retornam um objeto carregado com as informacoes,
algo assim:
public Medico select(int id) throws SQLException {
Medico med = new Medico();
try {
con = new ConnectionFactory().getConnection(dbType);
stmt = con.prepareStatement("SELECT * FROM MEDICOS WHERER ID = '" + id+ "'");
rs = stmt.executeQuery();
while(rs.next()){
med.setCodigo(rs.getInt("CODIGO"));
med.setNome(rs.getString("NOME"));
med.setSalario(rs.getFloat("SALARIO"));
}
} catch (SQLException e) {
e.printStackTrace();
}
finally {
con.close();
stmt.close();
}
return med;
}
E assim vc na classe de controle, cria um atributo que controle a posicao (ID) para ir para
frente ou para trás.
Obrigado pela atenção JoaoBluSCBR!
Até ai tudo bem… mas a questão é a implementação no view…Como buscar da persistência?
Eu ja tenho um metódo Pesquisar que me retorna uma lista.
Porém, acho que tenho q criar outro metodo na persistência, além disso, estava vendo que o ResultSet também tem que ter um parâmetro assim: (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)… Mas não tenho a minima idéia de como cria-l. Não sei se vou ter q criar um novo metodo no persistência ou se mecho no que eu ja tenho e como chama-lo no view.
Vc diz que está usando MVC e depois diz que quer chamar o método do View.
View não chamam métodos de banco. Passam para o controle essa chamada e o
controle se encarrega de fazer a requisicao para o DAO.
Você tá usando uma lista? Já carregou os registros em uma lista de objetos.
Então tudo bem, apenas pegue um objeto da lista e carregue no seu View.
Não estou entendendo qual a relação de tudo isso com a Persistencia. Vc tem uma
classe que acessa a persistencia, crie varios métodos nela que tragam os registros,
sejam de 1 em 1, ou todos de uma vez se precisar.
Vc parece estar em um conflito entre Tela e Banco, e no final das contas, 1 não tem
nada a ver com o outro.
Na tela você clica, por exemplo, no botão Próximo. Pronto é só isso que a tela sabe
que o usuário quer o proximo. Ela usa um objeto da classe Controle e aciona um
método dela que seria, por exemplo: trazerProximoRegistro(). A classe controle
pega o objeto do banco e aciona um método trazerProximoRegistro.
No banco tem um atributo que sabe em que registro ele está posicionado. E o
metodo trazerProximoRegistro usa essa posicao +1 para trazer o proximoRegistro
Faz o select, cria o objeto desse registro. Devolve para o controle que manda
para um método da tela digamos: mostrarObjeto(Objeto x). Este método da
tela coloca as informacoes nos controles.
No mais, vc tem que resolver se quer mais métodos, quantos, qual o problema nisso?
E claro, que parâmetros vc vai usar, depende de que banco está usando, de como
quer o acesso a ele. E tudo mais, não tenho como te auxiliar nisso.
[quote=efc]Olá…
Gostaria de saber como faço para navegar entre os registros que estão lá no Banco.
Tenho os Botões: Próximo, Primeiro, Anterior e Ultimo.
Estou usando o Modelo MVC. Encontrei alguns exemplos, mas os códigos estavam todos misturados na mesma classe de persistência e visão, enfim, não consegui entender.
Sei sobre os comandos: rs.first(), previous… Mas não sei como criar os metodos. Alguém poderia explicar como crio eles no persistência e como chamo eles lá no view?
A tela no View, tem os TextField com os dados dos clientes, quando clicar ex: Próximo ele mostra na text field todos os dados do Próximo cliente.
Obrigado.[/quote]
Eu já te mandei o exemplo de como fazer isso, criando sua própria coleção com métodos de navegação dentro dela, não?
Opa Nicolas…então…daquela forma não consegui…
Mas é a forma mais simples de se fazer, se quer seguir um padrão MVC.
- Recupero a lista de dados (Alunos):
[code]public class PersistenciaAluno {
public List<Aluno> recuperarAlunos() throws SQLException {
List<Aluno> alunos = new ArrayList<Aluno>();
/* sua consulta no banco de dados, preenchendo a coleção acima. */
return alunos;
}
}
[/code]
- Crio a classe que fornece os serviços do DAO:
[code]public class ServicosAluno {
public List<Aluno> recuperarTodosAlunos() throws SQLException {
PersistenciaAluno persistenciaAluno = new PersistenciaAluno();
return persistenciaAluno.recuperarAlunos();
}
}[/code]
- Cria sua View, que recebe no construtor a lista de dados e trabalha nela:
[code]public class ViewAluno extends JFrame {
private CustomList<Aluno> collectionAlunos;
public ViewAluno() {
try {
// busca os alunos no DB...
ServicosAluno servicosAluno = new ServicosAluno();
List<Aluno> alunos = servicosAluno.recuperarTodosAlunos();
// e adiciono na CustomList!
collectionAlunos = new CustomList<Aluno>(alunos);
}
catch (SQLException errSQL) {
errSQL.printStackTrace();
}
catch (Exception err) {
err.printStackTrace();
}
}
}
[/code]
No seu botão de próximo…
[code]
JButton buttonProximo = new JButton(">");
buttonProximo.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
Aluno aluno = collectionAluno.getNextItem();
textfieldNome.setText(aluno.getNome());
textfieldMatricula.setText(aluno.getMatricula());
}
});[/code]
No seu botão de anterior…
[code]
JButton buttonAnterior = new JButton("<");
buttonAnterior.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
Aluno aluno = collectionAluno.getPreviousItem();
textfieldNome.setText(aluno.getNome());
textfieldMatricula.setText(aluno.getMatricula());
}
});[/code]
No seu botão de primeiro…
[code]
JButton buttonPrimeiroRegistro = new JButton("<<");
buttonPrimeiroRegistro.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
Aluno aluno = collectionAluno.getFirstItem();
textfieldNome.setText(aluno.getNome());
textfieldMatricula.setText(aluno.getMatricula());
}
});[/code]
No seu botão de último…
[code]
JButton buttonUltimoRegistro = new JButton(">>");
buttonUltimoRegistro.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
Aluno aluno = collectionAluno.getLastItem();
textfieldNome.setText(aluno.getNome());
textfieldMatricula.setText(aluno.getMatricula());
}
});[/code]
Já tá pronta a classe, é só você usar o que te mandei, não tem segredo! Qual é a dúvida?
Hahaha Nicolas…Muito Bom…
Desse jeito ficou excelente…
Você não tinha falado desse jeito, ou pelo menos não tinha entendido dessa maneira…
Agora Vai ficar Muito Fácil!!!
Obrigado Nicolas…Valeu mesmo…
Vou testar hj a tarde…depois posto aqui de novo…
Parabéns Nicolas…
[quote=efc]Hahaha Nicolas…Muito Bom…
Desse jeito ficou excelente…
Você não tinha falado desse jeito, ou pelo menos não tinha entendido dessa maneira…
Agora Vai ficar Muito Fácil!!!
Obrigado Nicolas…Valeu mesmo…
Vou testar hj a tarde…depois posto aqui de novo…
Parabéns Nicolas…[/quote]
Mas é claro que eu não vou te dar a solução de mão beijada, né?
Existe um provérbio chinês que diz: “Não dê o peixe; ensine a pescar”. É bem por aí! Te auxilio, e você aprende a fazer; não te passo a solução completa, se não você fica preguiçoso e não quer aprender por conta… rsrs
Eu te passei como criar sua CustomList… Já tava de bom tamanho… Seria bom você pensar em como usá-la na sua View; iria aprender bastante. Mas tá aí, bom proveito!
Eu não conseguia implementar a CustomList…tentei , tentei e tentei…mas não conseguia…
Valeu mesmo…
[quote=efc]Eu não conseguia implementar a CustomList…tentei , tentei e tentei…mas não conseguia…
Valeu mesmo…[/quote]
Ela já tá implementada, é só você adiconá-la ao projeto…