You are on page 1of 11

< Anterior | Menu | Prximo >

Retificaes no tutorial Criar um programa para manipular dados de uma tabela do SGBD PostgreSQL
tornaram esse tutorial compatvel apenas com a verso JDB 1.0.9 ou superior.
Contornando deficincia no driver JDBC para o SGBD
PostgreSQL
Compatvel a partir da verso
JDB 1.0.9
FrameWork JDB - Tutoriais http://jdbframework.com/pt/tutorial/tutorial_13/tutorial_13.php
1 de 11 08/08/2014 22:48
Conforme explicado no artigo Java Desktop Basis, o Framework JDB trabalha sobre driver JDBC especfico
para cada SGBD, portanto, para o perfeito funcionamento do JDB necessrio que o driver JDBC esteja em
conformidade com as especificaes da API JDBC (veja as especificaes JDBC). Infelizmente bastante frequente
encontrar drivers que no implementam todas as especificaes daquela API, ou com implementaes que no
correspondem perfeitamente s especificaes.
Nesse tutorial veremos um pequeno exemplo de dificuldade relacionada a problemas de implementao do
driver JDBC para o SGBD PostgreSQL. Usaremos a verso mais recente do driver, que atualmente JDBC4
Postgresql Driver 9.0-801, disponvel em http://www.postgresql.org/download. Trabalharemos com o projeto produto
do tutorial Criar um programa para manipular dados de uma tabela do SGBD PostgreSQL.
Tutoriais Pr-requisitos
Importar um banco de dados para o PostgreSQL usando o pgAdmin III
Criar um programa para manipular dados de uma tabela do SGBD PostgreSQL
Referncias
http://netbeans.org
http://www.postgresql.org/download
http://www.oracle.com/technetwork/java/download-141179.html
FrameWork JDB - Tutoriais http://jdbframework.com/pt/tutorial/tutorial_13/tutorial_13.php
2 de 11 08/08/2014 22:48
Downloads
Projeto Netbeans: produto_Problema_JDBC_Driver.zip
Para visualizao do problema, execute o projeto produto e inicie a insero de um novo registro. No
campo nome escreva Desodorante, no campo preco escreva 5,56 e salve. Observe que o registro recm
adicionado no apresenta valor (valor zero) no campo id (chave primria). Veja a Figura 1. Isso ocorre porque o
PostgreSQL no retorna a(s) chave(s) primria(s) do registro recm inserido. S ser possvel ter esse valor aps a
execuo de uma nova consulta ao banco de dados. Ento, atualize a tabela clicando no boto ; aps isso voc
ver o valor do campo id. At agora no h problema visvel. Ento permita-nos continuar com o exemplo e insira
um novo registro: escreva Ervilha no campo nome, 3,99 no campo preco e salve. Ainda no atualize! Em
seguida, altere o valor Ervilha para Milho e salve. Voc ainda no observou problema algum, no ? Ento
atualize a tabela e veja que o valor continua sendo Ervilha, ou seja, a alterao logo aps a insero no
funcionou e nenhum erro foi gerado para informar o problema. A alterao no foi efetivada porque a API JDBC
necessita conhecer a(s) chave(s) primria(s) da tabela para process-la. Portanto, esse no um problema do JDB
nem da API JDBC, mas sim do driver JDBC Postgresql que no podendo alterar o registro deveria disparar uma
exceo do tipo SQLException, a qual seria capturada pelo JDB e tratada como um erro. Nesse caso o JDB no
apresentaria o valor alterado em seus componentes visuais e ainda exibiria mensagem de erro.
importante saber que tal problema tambm ocorrer se o registro recm adicionado for excludo, ou seja,
a excluso no ser efetivada.
FrameWork JDB - Tutoriais http://jdbframework.com/pt/tutorial/tutorial_13/tutorial_13.php
3 de 11 08/08/2014 22:48
Figura 1 - Exemplo de insero de novo registro.
Para contornar essa dificuldade, pode-se forar o JDB a realizar uma atualizao sempre que uma
operao de salvar for executada. Para isso, deve-se usar o evento beforeSave de JDBQuery. No entanto, aps
atualizar, o ponteiro do JDBQuery estar apontado para o primeiro registro da tabela. Isso pode ser corrigido usando
o mtodo public int locate(String fieldName, String value, boolean ignoreAccent) de
JDBQuery. Vamos, ento, fazer as alteraes necessrias no projeto.
FrameWork JDB - Tutoriais http://jdbframework.com/pt/tutorial/tutorial_13/tutorial_13.php
4 de 11 08/08/2014 22:48
Acesse as propriedades do projeto produto e remova o driver JDBC Postgresql que havia sido adicionado
quando da criao do projeto Criar um programa para manipular dados de uma tabela do SGBD PostgreSQL Para
remover o driver clique no boto Remove (Figura 2). Esse item poder ser ignorado (veja Nota).
Figura 2 - Remoo do driver JDBC Postgresql antigo.
FrameWork JDB - Tutoriais http://jdbframework.com/pt/tutorial/tutorial_13/tutorial_13.php
5 de 11 08/08/2014 22:48
Ainda nas propriedades do projeto, adicione o driver JDBC4 Postgresql Driver, verso 9.0-801 (disponvel em
http://www.postgresql.org/download.) Para fazer isso, clique no boto Add/Jar Folder e localize o arquivo .jar do
driver. Veja a Figura 3. Esse item poder ser ignorado (veja Nota).
Figura 3 - Adio da verso recente do driver JDBC Postgresql.
FrameWork JDB - Tutoriais http://jdbframework.com/pt/tutorial/tutorial_13/tutorial_13.php
6 de 11 08/08/2014 22:48
Acesse o cdigo do projeto e crie a varivel nomeProduto, na parte mais inferior da classe
JFrameProduto.java. Veja a Figura 4.
Clique na imagem para copiar o cdigo.
Clique na imagem para copiar o cdigo.
Figura 4 - Criao da varivel nomeProduto.
Adicione o evento beforeSave no jDBQuery1 (Figura 5). No interior do mtodo tratador do evento
beforeSave insira o cdigo mostrado na Figura 6.
FrameWork JDB - Tutoriais http://jdbframework.com/pt/tutorial/tutorial_13/tutorial_13.php
7 de 11 08/08/2014 22:48
Figura 5 - Adio do evento beforeSave.
Clique na imagem para copiar o cdigo.
Clique na imagem para copiar o cdigo.
Figura 6 - Codificao do mtodo tratador do evento beforeSave.
Adicione o evento afterSave no jDBQuery1 (Figura 7). No interior do mtodo tratador do evento
FrameWork JDB - Tutoriais http://jdbframework.com/pt/tutorial/tutorial_13/tutorial_13.php
8 de 11 08/08/2014 22:48
afterSave insira o cdigo mostrado na Figura 8.
Figura 7 - Adio do evento afterSave no jDBQuery1.
Clique na imagem para copiar o cdigo.
FrameWork JDB - Tutoriais http://jdbframework.com/pt/tutorial/tutorial_13/tutorial_13.php
9 de 11 08/08/2014 22:48
Clique na imagem para copiar o cdigo.
Figura 8 - Codificao do mtodo tratador do evento afterSave.
os itens 1 e 2 no so necessrios, exceto se voc quiser realmente se certificar que o
problema ainda existe para o driver JDBC Postgresql que voc deseja usar.
para resolver o problema evidenciado neste tutorial no seria necessrio realizar nenhuma
codificao. Bastaria configurar as seguintes propriedades do jDBQuery1:
refreshAfterInsert - Dever ser marcada (true) para fazer com que o jDBQuery1 execute uma atualizao
sempre que uma insero for concluda.
refreshAfterInsertLocateField - Dever receber o valor nome para posicionar o cursor, aps a atualizao,
na linha recentemente inserida.
FrameWork JDB - Tutoriais http://jdbframework.com/pt/tutorial/tutorial_13/tutorial_13.php
10 de 11 08/08/2014 22:48
Veja Tambm
Distribuir um programa Java Application usando o Netbeans
Usar o JavaDoc do JDB no Netbeans
< Anterior | Menu | Prximo >
FrameWork JDB - Tutoriais http://jdbframework.com/pt/tutorial/tutorial_13/tutorial_13.php
11 de 11 08/08/2014 22:48