Você está na página 1de 2

Acessando Dados com Java: Parte 2 - Prevendo problemas

Publicado por jesuino em 17/08/2009 - 37.542 visualizaes

comentrios: 0 No leia esse se voc no leu a primeira parte! Nessa parte vamos abordar pontos que deixaram a desejar na parte anterior.

Melhorar o que? O proposto no artigo anterior funciona!


Sim funciona! No entanto, vamos abordar detalhadamente o que pode ocorrer. Observe que muitas coisas dependem da opinio e experincia do desenvolvedor, e por muitas vezes a soluo encontrada no a ideal, assim, alguns pontos no final desse artigo tambm so passveis de evoluo. 1-) Chave primria da tabela pessoa: Usamos como Chave primria o campo RG da tabela. Realmente identifica a tabela unicamente, mas pode gerar problemas futuros. necessrio termos uma chave nica, que identifica pelo sistema. Assim podemos controlar a tabela unicamente sem depender da abstrao que foi feita. Um problema real que pode ocorrer se nos requisitos do programa o RG no for um atributo desejada para a entidade em questo. claro que isso pode ocorrer com qualquer outro campo, mas com nossa chave os problemas so maiores, pois perdemos a identificao dessa tabela no sistema em si. Enfim, uma nova chave, com nmero no interessante para que usa o sistema, que far que o sistema identifique cada entidade independente do que est modulando. Na prtica usaremos uma chave com incremento automtico, que nunca pode ser nula: 1. CREATE TABLE pessoa ( 2. id int(4) not null auto_increment, 3. rg varchar(20) not null, 4. nome varchar(20) not null, 5. idade int(2) not null, 6. cidade varchar(20) not null, 7. estado varchar(2) not null, 8. primary key(id) 9. );

O auto_increment quer dizer que a cada pessoa acessada esse nmero ter seu valor adicionado em um sobre o ltimo valor adicionado. Ou seja, se eu adicionar uma pessoa "Jos", ele ter o id com valor 1, e adicionar "Maria" logo depois, ela ter o id com valor 2 e assim segue conforme vamos adicionando novas pessoas.

2-)DAO DAO! DAO significa Data Access Object. um padro criado pela Sun que prega a separao de acesso aos dados da lgica de negcio (business logic) e disponibiliza uma interface abstrata de persistncia a dados independente do banco utilizado. Bem simples e diretamente, sem se aprofundar: temos que ter uma classe de acesso aos dados. Conforme viram, acesso! Somente com as definies acima possvel ver que quebramos esse padro na implementao anterior. Vamos enumerar e falar brevemente o que est fora do padro no nosso caso. - Exibir mensagem de erro: Temos um mtodo que faz a exibio do erro(imprimeErro) que fica na DAO. A comunicao com o usurio deve ser feita pela View, afinal, esse o objetivo dessa camada. Conforme j dito, DAO serve para acessar dados, no exibir mensagem. O melhor a ser feito nesse caso "passar a bola", ou seja, lanar a exceo. Para isso usamos o comando throw.

Usando throws:
1. public ... throws Exception OBS: Como no tnhamos interface grfica, foi mantido o mtodo imprimeErro, no outro tutorial, buscando a simplicidade. E o DAO passa a ser independente de onde executado, ou seja, WEB ou desktop podem usar. Antigamente, somente em casos Desktop(JavaSwing) iramos ver a mensagem(JOptionPane), com throws podemos delegar o tratamento de exceo para quem usa o DAO. - Conectar ao banco de dados: DAO no tem nada a ver com a conexo, a conexo deve ser papel de outra classe, DAO deve permitir a manipulao dos dados, no deve se "envolver" com a impresso de dados e nem com a conexo. Outra coisa, com informaes locais da conexo faz nosso DAO perder a portabilidade e flexibilidade. No nosso caso reformulamos a conexo para conseguir maior flexibilidade. Como j dito, o resultado obtido no o perfeito, muitos podem opinar e melhorar esse resultado! Por fim, o DAO deve o mais genrico possvel! Em alguns pontos omitimos essa abstrao do DAO para conseguir maior simplicidade na hora de expor nosso objetivo, mas tenha em mente sempre deixar as classes DAO flexveis na medida do possvel, ou seja, o que poder ser feito para melhorar a abstrao, FAA! 3-) Cdigo O cdigo deixa muito a desejar em alguns pontos. Sem muito papo, vamos a eles: -Uso de Statement Absolutamente no est errado, mas o Statement deixa o cdigo sujo, no ajuda na manuteno e nem na visibilidade. Uma outra opo o PrepareStatement,

onde: *No precisamos imediatamente colocar as aspas simples que representam String, por exemplo, ele cuida da montagem do SQL. *No necessrio a concatenao da String do comando com os valores. Com somente esses dois argumentos fica claro que o uso de PrepareStatement ao contrrio de Statement mais vantajoso. -Tipo concreto de List invs de tipo abstrato. No retorno do mtodo estvamos usando Vector, um tipo de List. O melhor seria usar o tipo genrico, List, pois no garante maior flexibilidade, conforme j foi dito anteriormente. Cada tipo concreto de List se aplica melhor em determinados casos. Tendo uma List genrica voc pode utilizar o resultado da forma que melhor se aplica a sua necessidade. Concluso: Demonstrou-se melhores prticas e pontos prejudiciais no projeto anterior. Pretendemos montar uma verso melhor para as partes que viro.

Aguarde os prximos artigos onde iremos demonstrar o acesso a estes dados usando JavaSwing e outras tecnologias.

Artigos desta srie: Acessando dados com Java: 1 parte - Simples Dao Acessando Dados com Java: Parte 2 - Prevendo problemas Acessando Dados com Java: Parte 3 - Hibernate Annotations

Leia tambm: Acessando Banco de Dados em Java (PARTE 1) Acessando Banco de Dados em Java (PARTE 2) Acessando Banco de Dados em Java (PARTE 3)

Quer aprender mais sobre Java? O que Java? Caractersticas Bsicas Orientao a Objetos

Tutoriais para Certificao Java Fundamentos da Linguagem Modificadores Operadores e atribuies Controle de Fluxo Orientao a Objetos Java Lang e Wrappers Objetos e Conjuntos Classes Internas Threads (Segmentos)

comentrios: 0

Tpicos Relacionados
Conexo com banco de dados Netbeans 6 Banco de Dados e Java - Iniciante Problemas com result Acessando Banco de Dados em Java (PARTE 3) Pequeno Tutorial sobre Hibernate Acessando Banco de Dados em Java (PARTE 2) Acessando banco de dados em Java (PARTE 1) Ferramenta para PostgreSQL????????? Acessando Dados com Java: Parte 3 - Hibernate Annotations DataSource Algum tem um modelo de Classe de Acesso? Data Source como criar ? Vrias dvidas de Banco de Dados banco de dados Oracle 8i Acesso a banco de dados Introduo ao pattern DAO Relatrios com iReport

Você também pode gostar