Artigo SQL Magazine 10 - Manipulando Bases de Dados Utilizando o JBuilderX
Artigo da Revista SQL Magazine -Edição 10.
Os artigos dessa edição estão disponíveis somente através do formato HTML.
Clique aqui para ler todos os artigos desta edição
Manipulando Bases de Dados Utilizando o JBuilderX
Neste artigo desenvolveremos uma aplicação simples (baseada no tutorial presente na documentação do JBuilderX) apresentando os componentes básicos para acesso a base de dados.
Conhecendo o JBuilderX
O JBuilderX é a mais nova versão de um dos ambientes de programação mais utilizados pela comunidade Java. Sua interface com o usuário possui algumas semelhanças com outros produtos da Borland, como o Delphi e o C++ Builder.
A Figura 1 apresenta o JBuilderX. No destaque 1 temos o painel de projetos, onde é possível navegar pelos projetos que estejam sendo trabalhados e por cada arquivo contido em cada projeto. No destaque 2 é visualizado o painel de estrutura. Este painel muda conforme o contexto de utilização do JBuilderX; quando o usuário estiver codificando, são apresentados detalhes da classe sendo editada, incluindo seus atributos e métodos; quando o usuário estiver trabalhando na interface gráfica, são apresentados os componentes utilizados. Por fim, no destaque 3 temos a área de trabalho. É nesta última que se encontram algumas das diferenças mais visíveis em relação aos outros ambientes de programação da Borland. Mais especificamente, o destaque 4 apresenta uma dessas diferenças. Neste caso, a área de trabalho pode ser utilizada para codificação, elaboração da interface gráfica, manipulação do modelo UML e documentação da aplicação.
|
|
|
|
Figura 1.
Exemplo
A partir de agora será apresentado o desenvolvimento de uma aplicação simples acessando uma base de dados. Construiremos um programa para calcular o reajuste numa folha de pagamento - a aplicação efetuará um reajuste salarial de 10% nos salários. Serão apresentados o novo salário de cada um dos funcionários, o custo total atual com salários e o custo total pós-reajuste.
Ao final teremos uma aplicação que, ao ser executada, efetuará automaticamente todos os cálculos sem necessidade de interação com o usuário. Durante o desenvolvimento serão utilizadas as paletas DataExpress, More dbSwing e dbSwing do JBuilderX.
O exemplo construído neste artigo não é uma aplicação profissional e tem apenas o objetivo de mostrar o uso básico do JBuilderX. Por isso, não nos atentaremos na construção do modelo de classes e em outras questões relacionadas a uma aplicação orientada a objetos.
Criando o Projeto e a Aplicação
Antes de iniciar o desenvolvimento de uma aplicação no JBuilder é necessário criar um projeto no qual ela estará inserida. Com o JBuilder aberto vá ao menu File->New Project. Feito isto, aparecerá um wizard indicando os dados que devem ser preenchidos. Modificaremos apenas o nome do projeto e o local onde serão armazenados os arquivos gerados durante o desenvolvimento da aplicação. No campo Name coloque AcessaDadosApp e no campo Directory coloque o local onde deseja salvar os arquivos do seu projeto.
Tendo criado o projeto, podemos dar início à aplicação. Para isto, com o projeto aberto, vá ao menu File->New. Depois, no painel General, dê um clique duplo em Application. Será aberto então um wizard para informações genéricas sobre a aplicação. No passo 1, perceba que o projeto que acabou de criar aparece no campo Package. No campo Class Name, digite AcessaDadosApp. Este nome identificará o arquivo .java que conterá o método main() da aplicação. No passo 2, você deve nomear a classe que conterá as informações da interface com o usuário (digite AcessaDadosAppFrame no campo Class) e digitar um título para aparecer no topo do painel (digite “Aplicação Exemplo” no campo Title). Ainda no passo 2, existem algumas opções para incrementar a interface com o usuário. Como não utilizaremos, podemos desmarcá-las. Feita estas configurações, clique no botão Finish e depois salve as alterações no projeto (File->Save All). O destaque 1 da Figura 1 apresenta os arquivos criados.
Manipulando os Componentes de Acesso à Base de Dados
Neste passo configuraremos a camada de acesso a dados. Certifique-se que o documento ativo no momento seja AcessaDadosAppFrame.java e clique na palheta Design da área de trabalho (ver destaque 4 da Figura 1). O JBuilderX apresentará a interface gráfica inicial de sua aplicação e as palhetas de componentes disponíveis (ver Figura 2). A depender das opções definidas durante a criação da aplicação para incrementar a interface com o usuário, já existirão alguns botões no formulário.
Figura 2.
Vá à palheta DataExpress, selecione o componente Database e depois clique no painel da interface ou no painel de estrutura para adicionar o componente à aplicação. Neste ponto, perceba que foi acrescentado um componente Database na pasta Data Access do painel de estrutura. Agora, selecione o componente Database acrescentado para configurar suas propriedades. Na propriedade connection, clique no ícone correspondente para definir a conexão. A janela da Figura 3 será exibida - nela você informará o driver JDBC a ser utilizado (no nosso caso, com.borland.datastore.jdbc.DataStoreDriver), o local onde o banco está armazenado (<JBUILDER>/samples/JDataStore/datastores/employee.jds) e um usuário cadastrado no banco. Definidas estas três informações, clique no botão Test Connection para assegurar que as informações de conexão foram definidas corretamente. Isto é tudo que precisamos configurar para o componente Database.
Nota
JDBC consiste de um conjunto de classes escritas em Java que provêem uma interface de programação padrão para desenvolvedores de software construírem aplicações que acessam banco de dados.
Estamos utilizando neste exemplo o JDataStore, um banco de dados instalado junto com o JBuilderX (maiores informações sobre o JDataStore estão disponíveis na SQL Magazine 1). Caso o leitor queira utilizar outro banco de dados, basta alterar a propriedade driver, na janela Connection, apontando-a para o driver JDBC de acesso ao banco a ser utilizado e, claro, o novo local onde o banco está armazenado.
Por exemplo, se quisermos acessar o MySQL, devemos utilizar o driver JDBC para este banco, que está disponível para download em http://dev.mysql.com/downloads/connector/j/3.0.html. Para maiores informações sobre a instalação deste driver, consulte o site http://dev.mysql.com/doc/connector/j/en/.
Após instalar um novo driver JDBC é necessário configurar o JBuilder para reconhecê-lo. Para maiores detalhes, consulte o site http://info.borland.com/techpubs/jbuilder/jbuilderx/database/connecting.html#setup_jdbc_driver
Agora, acrescente ao painel de estrutura o componente QueryDataSet. Mais uma vez certifique-se de que ele foi acrescentado à pasta Data Access do painel de estrutura. Este componente possibilitará a definição da query a ser executada e será o responsável por manter em memória os dados retornados pela consulta. Neste exemplo, configuraremos apenas a propriedade query. Para isto, com o componente selecionado no painel de estrutura, vá na propriedade query e clique no ícone de definição. Feito isto será apresentada a janela da Figura 4. Inicialmente é preciso definir o banco de dados ao qual a query estará conectada. No campo Database selecione a opção Database1. Agora podemos criar a consulta - esta pode ser digitada diretamente no campo SQL Statement (ver Figura 4) ou criada através de um assistente. Para aqueles que preferirem digitar logo a query a ser utilizada no exemplo, o código pode ser visto na Listagem 1. Depois de digitada a consulta é possível verificar se ela foi definida corretamente clicando no botão Test Query.
SELECT DISTINCT EMPLOYEE.EMP_NO,EMPLOYEE.FULL_NAME,EMPLOYEE.SALARY,EMPLOYEE.HIRE_DATE,
JOB.JOB_TITLE,DEPARTMENT.DEPARTMENT
FROM EMPLOYEE,JOB,DEPARTMENT
WHERE DEPARTMENT.DEPT_NO=EMPLOYEE.DEPT_NO AND JOB.JOB_CODE=EMPLOYEE.JOB_CODE
ORDER BY EMPLOYEE.FULL_NAME
Listagem 1
Figura 3. Configurando a Conexão com o Banco.
Figura 4
Até agora temos um componente responsável pela conexão com o banco e outro por efetuar as buscas e manter o conjunto de dados retornados. Neste ponto vale uma ressalva: sabemos que não é uma boa prática abrir conexões e não fechá-las ao encerrar a aplicação. Para lidar automaticamente com isso iremos utilizar o componente DBDisposeMonitor da paleta More dbSwing. Selecione-o e depois clique no painel de estrutura para inserir o componente na aplicação. Agora clique no DBDiposeMonitor e configure sua propriedade dataAwareComponentContainer para this, atribuindo a ele a responsabilidade de encerrar a instância da conexão.
Feito isto, iremos configurar agora as colunas do resultado das buscas dando-lhes nomes mais sugestivos e criando algumas outras para apresentar mais algumas funcionalidades do JBuilderX. Para ter acesso à configuração de colunas do resultado, no painel de estrutura vá na pasta data access e depois no componente queryDataSet. Expandindo os nós, você perceberá que existe um nó chamado newColumn (destaque 1 da Figura 5). Dê um duplo clique nele para entrar no editor de colunas (destaque 2 da Figura 5).
Através da configuração de colunas iremos definir máscaras para edição e visualização, as legendas de cada coluna e definir novas colunas que serão campos calculados. Para a nossa aplicação exemplo, criaremos três campos calculados.
Para isso, clique no botão Insert Column três vezes. Configure as propriedades das colunas de acordo com a tabela 1 (as linhas em cinza correspondem aos campos calculados).
|
Coluna |
Propriedade |
Valor |
|
EMP_NO |
Caption |
Identificador |
|
EMP_NO |
Editable |
False |
|
FULL_NAME |
Caption |
Nome |
|
JOB_TITLE |
Caption |
Cargo |
|
DEPARTMENT |
Caption |
Departamento |
|
HIRE_DATE |
Caption |
Contratação |
|
HIRE_DATE |
DisplayMask |
dd/mm/yy |
|
HIRE_DATE |
EditMask |
dd/mm/yyyy |
|
SALARY |
Caption |
Salário |
|
TOTAL_COST |
Caption |
Custo Total |
|
TOTAL_COST |
DataType |
BigDecimal |
|
TOTAL_COST |
CalcType |
Aggregated |
|
NEW_TOTAL_COST |
Caption |
Novo Custo Total |
|
NEW_TOTAL_COST |
DataType |
BigDecimal |
|
NEW_TOTAL_COST |
CalcType |
Aggregated |
|
NEW_SALARY |
Caption |
Novo Salário |
|
NEW_SALARY |
DataType |
BigDecimal |
|
NEW_SALARY |
CalcType |
Calculated |
Tabela 1
Na Tabela 1 podemos perceber que configuramos os campos calculados utilizando dois tipos: calculado (calculated) onde há necessidade de implementação de um método para o cálculo do campo e agregado (aggregated) o qual pode ser configurado com auxílio do JBuilder.
|
|
Figura 5. Configurando colunas.
Para especificar como os campos do tipo calculated se comportarão, selecione o componente queryDataSet no painel de estrutura e na janela de eventos dê um duplo clique no evento calcFields – esse evento é acionado para cada linha lida da tabela. O JBuilder abrirá a janela de codificação para o método correspondente. Altere o código de forma que fique semelhante ao apresentado na Listagem 2. O que estamos fazendo nele é:
·recuperar o valor de atual do salário (linha em verde);
·efetuar o reajuste de 10% (linha em azul): a variável bDout recebe o novo valor;
·atualizar o campo calculado NEW_SALARY (linha em vermelho).
void queryDataSet1_calcFields(ReadRow readRow, DataRow dataRow, boolean boolean1) {
BigDecimal bDin = readRow.getBigDecimal("SALARY");
BigDecimal bDout = bDin.add(new BigDecimal(bDin.doubleValue()*10.0/100));
dataRow.setBigDecimal("NEW_SALARY", bDout);
}
Listagem 2
Agora que já temos os componentes básicos para acesso a uma base de dados configurados, construiremos a interface para permitir que o usuário acesse e manipule os dados. Os campos calculados do tipo aggregated serão configurados após a criação da interface.
Criando a Interface com o Usuário
Ao final deste passo, teremos a interface apresentada na Figura 6. Antes de iniciar a elaboração da interface, é preciso configurar a propriedade layout do local onde serão distribuídos os componentes visuais. A propriedade layout define como será possível criar a interface com o usuário. A depender de seu valor configurado, ela possibilita, por exemplo, que ao redimensionarmos a interface da aplicação, os componentes visuais sejam automaticamente re-arrumados de forma a tomar todo o espaço visual definido para a aplicação. Neste exemplo não utilizaremos esse recurso.
Selecione o contentPane no painel de estrutura e na propriedade layout, selecione null. Isto fará com que a organização dos componentes funcione de forma semelhante a outros ambientes de programação como Delphi e C++ Builder, ou seja, os componentes podem ser posicionados livremente na tela de interface. Estamos considerando essa forma de distribuição de componentes pelo fato de simplificar o projeto.
Figura 6
Agora acrescente no painel de interface os seguintes componentes da paleta dbSwing:
·TableScrollPane: provê barras de rolagem ao componente JdbTable.
·JdbTable: responsável por apresentar os dados retornados pelo queryDataSet1.
·JdbNavToolBar: provê um conjunto de botões para navegação nos dados apresentados no componente JdbTable.
·JdbTextField: é uma caixa de edição que apresenta um determinado campo do queryDataSet. No exemplo, utilizaremos ele para apresentar os dados dos campos calculados. Isso é feito configurando sua propriedade dataSet para o queryDataSet correspondente e columnName para o campo calculado que se deseja apresentar.
Para adicionar os componentes basta selecioná-los na paleta e clicar na área de interface. A exceção é o posicionamento do JdbTable que deverá ser feito dentro do TableScrollPane. Ao invés de clicar na área de interface, clique sobre o componente TableScrollPane no painel de estrutura. Tendo distribuído os componentes, configure suas propriedades de acordo com a Tabela 2.
|
Componente |
Propriedade |
Valor |
|
JdbTable |
DataSet |
queryDataSet1 |
|
JdbNavToolBar |
DataSet |
queryDataSet1 |
|
JdbTextField1 |
DataSet |
queryDataSet1 |
|
JdbTextField1 |
ColumnName |
TOTAL_COST |
|
JdbTextField2 |
DataSet |
queryDataSet1 |
|
JdbTextField2 |
ColumnName |
NEW_TOTAL_COST |
|
Label1 |
Text |
Total Inicial: |
|
Label2 |
Text |
Novo Total: |
Tabela 2
Basta agora configurar os componentes que apresentam dados de campos calculados do tipo aggregated. Para fazer isto, no painel de estrutura vá até a pasta Data Access e selecione o componente queryDataSet1. Configure a propriedade agg dos campos TOTAL_COST e NEW_TOTAL_COST. Para fazer isto, selecione o campo TOTAL_COST e clique na propriedade agg. A janela apresentada na Figura 7 aparecerá. Nela, configure os valores de Aggregate Column e Aggregate Operation para SALARY e SumAggOperator respectivamente. Configure o outro campo seguindo estes mesmos passos e os dados da Tabela 3. Com isto, estamos especificando que o valor dos campos calculados TOTAL_COST e NEW_TOTAL_COST é o somatório de todos os valores do campo especificado na propriedade Aggregate Column.
|
Campo |
Propriedade |
Valor |
|
NEW_TOTAL_COST |
Aggregate Column |
NEW_SALARY |
|
NEW_TOTAL_COST |
Aggregate Operation |
SumAggOperator |
Tabela 3.
Figura 7.
Agora é só executar (menu Run ? Run Project) o aplicativo e perceber que construímos um exemplo funcional com esforço de codificação minimizado.
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo