Você está na página 1de 50

ANUNCIO

SQL
Magazine - 3
ndice
06
SQL News
Novas tecnologias, atualizaes, lanamentos de
produtos,eventos e livros.
12
Otimizao de comandos SQL
Conceitos e diretrizes para aumento da perfor-
mance na execuo de comandos SQL.
22
Introduo a UML
Defnio, implementao e utilizo de um
modelo usando UML
34
Emacs SQL
Utilizando o Emacs para acesso e manuteno de
bancos de dados.
42
PostgreSQL
Uma anlise dos recursos do postgre e vantagens
de sua distribuio nacional.
48
JDataStore
Conhecendo o banco de dados e uma entrevista
com Sergio Cardoso.
08
Guia Rpido da SQL
Explorando os princupais recursos do comando
SELECT.
18
Modelagem de dados com ErWin
Uma introduo aos recursos e utilizao desta
ferramenta.
26
Conctando Front-Ends
Exemplos prticos para o acesso a banco de dados
com diversas ferramentas.
39
MySQL
Instalao, overview dos recursos e utlilizao do
MySQL no linux.
44
Replicao de dados
Teoria e prtica envolvendo replicao de dados
no SQL Server.
SQL
4 - Magazine
E DI T OR I A L
Coordenador Editorial
Gladstone Matos
gladstone@neocio.com.br
Editor Geral
Gustavo Viegas
gustavo@sqlmagazine.com.br
Equipe Editorial
Cristina Viegas
Edgar Silva
Fbio Faldini
Gisele Nichols
Pedro Henrique dos Santos
Acessora de Imprensa
Kaline Dolabela
kalined@hotmail.com
Contriburam nesta edio
Clementino Leal, Cleison Santos,
Everson Ramos, Edgar Silva, Fbio
Faldini, Gustavo Viegas, Gisele Nichols,
Gladstone Matos, Paulo Ribeiro, Pedro
Henrique
Editor de Arte
Vinicius O. Andrade
viniciusoandrade@gmail.com
Capa
Mauro Lassance
mauro@bitourisn.com
Gerente Geral
Rosngela Matos
rosangela@neocio.com.br
Publicidade
Julio Csar Lopes
julio@neocio.com.br
Jornalista Resposvel
Srgio Moraes C. Brando
MTb: 15183-68-148
Impresso
Ediouro Grca e Editora S/A
Atendimento ao Leitor
info@sqlmagazine.com.br
Assinaturas
assinaturas@sqlmagazine.com.br
Colaborao de Artigos
gustavo@sqlmagazine.com.br
Na Web
www.sqlmagazine.com.br
Distribuio
Fernando Chinaglia Dist. S/A
Rua Teodoro da Silva, 907
Graja - RJ - CEP: 206563-900
Atualmente, na medida em que as tecnologias de banco de dados e ferramentas
para desenvolvimento de aplicaes vem evoluindo, temos um abismo cada vez
maior entre o prossional de informtica e as reas de conhecimento fora de sua
especializao. Questiono: At onde deve ir o conhecimento do prossional de
tecnologia da informao? Ser que a especializao total o melhor caminho? Seja
tcnico, desenvolvedor ou analista, a questo quanto de sua rea ele precisa saber
para implementar, analisar, projetar e interagir num processo de desenvolvimento
e manuteno de uma aplicao? Ser que podemos armar que um desenvolvedor
deve ter somente conhecimentos profundos de uma determinada ferramenta de
desenvolvimento e, no caso de uma aplicao que acesse um banco de dados, no
ter a mnima noo deste banco? Ou ainda: um DBA que tem a responsabilidade de
instalar, congurar, dimensionar, criar os objetos de um modelo, garantir uma boa
performance, entre outras, no faria suas tarefas de modo mais consciente sabendo
um pouco sobre como os dados sero acessados e manipulados? Podemos citar ainda
aqueles que participam das denies de um projeto, l no estgio embrionrio
do sistema. Para estes, o conhecimento do banco de dados, das tecnologias e
ferramentas utilizadas para desenvolvimento, afetariam na denio do projeto a
ponto de facilitar sua implementao e futura manuteno? Como disse, o abismo
que separa o conhecimento entre cada prossional de informtica tem se mostrado
crescente, e isso, de certa forma, no bom.
A SQL Magazine chega at voc com o objetivo de trazer informaes sobre
o mundo dos bancos de dados, tecnologias e ferramentas de desenvolvimento.
Temos uma rdua tarefa diante dos leitores: diminuir o abismo citado, atravs da
publicao de artigos de base, fomentando o conhecimento daqueles que ainda
no lidam com o assunto, artigos tcnicos, para os que j utilizam algum tipo de
SGBD e artigos avanados, voltados para DBAs. Alm de novidades, previews,
cursos e dicas.
Espero que voc encontre na SQL Magazine informaes para o seu
crescimento prossional, tomada de deciso, auxlio na soluo de problemas, base
para denio de projetos independente do seu papel nos mesmos e acima de tudo:
uma fonte de consultas e mais consultas. Boa leitura.
Gustavo Viegas
Editor
Gustavo@sqlmagazine.com.br
SQL
Magazine - 5
ANUNCIO
!
"
#

!
"
#
$
Usando UML Com .NET
Atravs do Rational XDE ( eXtended Development Environment ) Professional v2002
voc pode ter na IDE do Visual Studio o ambiente nescessrio para analisar, implementar e
documentar suas solues baseadas no .Net FrameWork utilizando UML. Esta integrao
extremamente til para implementao de sistemas complexo utilizando C#. O XDE suporta
os principais diagramas UML, possibilita a utilizao de vrios Design Patterns alm de facilitar
a implementao de Design Patterns prprios. Consulte www.rational.com <http://www.
rational.com> para um overview do produto.
Application Server da Oracle oferece business intelligence incorporado
Integrado ao servidor de aplicao, o Oracle9i Application Server proporciona todo o
middleware necessrio para uma eciente comunicao de dados em e-business. Com um nico
produto possvel executar diversas aplicaes (Java, portal, integrao de aplicativos, wireless
e outras). Foram efetuadas customizaes que otimizam o processo de congurao de backup
e recovery, gerenciamento automtico de backups e logs arquivados, backups e restauraes
reiniciveis e restaurao/recuperao de teste. O SQL e o PL/SQL receberam outras melhorias
no Oracle9iAS. Foi adicionada depurao no lado servidor para mltiplas linguagens, permitindo
que os ambientes de desenvolvimento integrado (IDEs) depurem tanto Java quanto PL/SQL
dentro da mesma estrutura. Mais informaes em www.oracle.com.br.
Cresce a competio entre os bancos de dados da IBM, Microsoft, e Oracle
Enquanto a Microsoft fala de futuras implementaes no SQL Server, a Big Blue disponibiliza a
verso DB2 8.1 UDB. Nesta ltima verso, a IBM est tentando tornar o seu banco de dados mais
fcil de ser utilizado, distribudo, e administrado. Implementaes que aumentam a performance
na execuo de queryes e capacidades autnomas esto entre as novidades do DB2 8.1.
A Microsoft anunciou a verso 64-bit do SQL Server (Beta) e espera conquistar maior conana
dos usurios de banco de dados.
A Oracle, por sua vez, utilizou a OracleWorld User Conference em San Francisco para mostrar
detalhes do seu novo banco de dados, chamado at ento de 10i e previsto para lanamento em
meados de 2003. Apesar do nome nal do produto no estar denido, a Oracle falou ocialmente
que a nova verso ter seu foco no gerenciamento, aumento da capacidade, e novo suporte para
XML e Web services.

Computador que se conserta sozinho
A IBM est desenvolvendo sistemas
que se consertam sozinhos e necessitam
de menos interveno humana.
Para isso, criou a diviso Autonomic
Computing, cuja meta fazer com que
os computadores sejam autnomos de
maneira semelhante ao comportamento
do sistema nervoso humano, que
permite adaptar-se s mudanas sua
volta, a defender-se de ataques externos
e a recuperar-se de falhas internas. As
capacidades autnomas estaro includas
inclusive no banco de dados DB2. A
idia permitir que os computadores
dem conselhos sobre seu melhor
rendimento e, ento, permitir que esses
sistemas executem os conselhos sem o
aval dos tcnicos.
Oracle9i nas eleies
Mais de 185 milhes de votos foram
processados no primeiro e segundo turnos das
eleies pelo Tribunal Superior Eleitoral. Em
menos de 24 horas, os brasileiros j sabiam o
resultado dos 91 milhes de votos apurados
na primeira fase. Para realizar tal feito, o
TSE utilizou o banco de dados Oracle9i.
O sistema, desenvolvido em parceria do
TSE com a Oracle, o mais avanado no
segmento. Os dados de todos os Tribunais
Regionais Eleitorais, correspondentes aos
votos para deputados estaduais e federais,
senadores e governadores, so totalizados
e somados aos do TSE, que responsvel
pela centralizao e contagem dos votos
para presidente da Repblica. Esse processo
permitiu a divulgao imediata dos resultados
nos teles de apurao e na Internet.
SQL
Magazine - 7
IBM DB2 UDB 8.1 para Linux (Beta)
A IBM se orgulha do seu compromentimento com o Linux. Desde o seu portal
Linux at a campanha Paz, Amor, e Linux que foi gratada nas ruas de cidades
americanas no ano passado, a companhia tem deixado claro que pretende ser
vista na linha de frente do desenvolvimento para este sistema. A verso 8.1 (Beta)
do DB2 UDB esta disponvel para download no site da Big Blue (www.ibm.
com/db2/) e a IBM recomenda no mnimo 128Mb de memria e de 250Mb a
350Mb disponveis em disco para instalao e utilizao de um banco de dados
de tamanho mdio. Uma novidade est no db2setup utility, um utilitrio com
aparncia e operao semelhante a de muitos programas para Windows.
Informaes adicionais e uma anlise do produto esto disponveis no endereo
http://www.newarchitectmag.com/documents/s=7733/na1202m/index.html.
Microsoft SQL Server comemora seu 10 Aniversrio
A Microsoft Corp. anunciou no dia 20 de novembro o 10 aniversrio do
Microsoft(R) SQL Server (TM) na Associao de Prossionais de SQL Server
(PASS) em Seattle, num grande evento exclusivamente dedicado ao banco. No
keynote de abertura, Gordon Mangione, vice presidente corporativo do SQL
Server na Microsoft, falou do passado e das futuras implementaes no SQL Server
como motivos para os muitos clientes e parceiros continuarem a desenvolver
utilizando a plataforma Microsoft SQL Server. Com base nas inovaes do
produto, Mangione anunciou a disponibilizao do SQL Server 2000 (64-bit) Beta
2 e do Microsoft SQL Server 2000 Service Pack 3 (SP3) Beta 1. Ele encorajou aos
desenvolvedores a utilizarem ambas as verses Beta disponveis e reforou o
objetivo da Microsoft de desenvolver um conjunto de ferramentas que garantam
um alto nvel de performance, gerenciamento e escalabilidade.
Backups seguros e contnuos
A Storageteck, fornecedora de solues de armazenamento de dados, est
colocando no mercado as totecas robotizadas L20, L40 e L80, que permitem que os
backups sejam feitos continuamente, 24 horas por dia. O produto foi desenvolvido
para pequenas e mdias empresas cujas plataformas rodam em ambientes NT,
Novell, Linux ou Unix. Focados no mercado entry level, as bibliotecas de backup
destinam-se a redes com necessidades de armazenamento a partir de 400 GB. Na
prtica, os produtos da Srie L so disponveis nas verses 2, 4 ou 8 drives, com
capacidades de 110 GB a 220 GB cada.
Oracle 9i - O Manual do DBA
Autor: Kevin Loney
Editora Campus - 992 pginas.
R$ 159
Pertencente srie Oracle Press, cujos livros so guias ociais da Oracle
produzidos por especialistas da prpria empresa, este livro oferece uma cobertura
completa dos recursos mais recentes e as maneiras de incorporar esses recursos
no gerenciamento de um banco de dados Oracle.

Com este livro, o leitor aprender a implementar as solues administrativas
de especialistas, a manter os seus importantes sistemas da Internet e de comrcio
eletrnico exveis, seguros e disponveis - tudo com informaes exclusivas
autorizadas pela Oracle.

Este guia abrange todos os pontos importantes sobre Oracle 9i, fornecendo
exemplos e tcnicas reais. Alguns tpicos:
ANUNCIO
SQL
Guia rpido da
!"# GIadstone Matos
Iinguagem SQL sucinta e ao mesmo tempo poderosa. Atravs
de um idioma de fciI entendimento, a SQL permitiu a padronizao
na forma de comunicar os apIicativos front-ends com os diversos
bancos de dados disponveis. Neste artigo veremos os principais
parmetros do comando SELECT, a principaI forma de recuperar dados
atravs da SQL.
A
COMANDO SELECT
A SQL foi criada com o objetivo de
padronizar os comandos de manipulao
de dados em SGBDs. Hoje em dia, apesar
da linguagem possuir uma quantidade
considervel de extenses e implementaes
proprietrias, pode-se armar que a meta
foi alcanada. A maior parte do cdigo
SQL escrito nas aplicaes se encontra no
formato puro, conhecido como ANSI. O
sucesso da SQL trouxe uma produtividade
interessante para a manipulao de banco
de dados. Conhecendo bem a linguagem
possvel acessar os recursos bsicos de
qualquer banco relacional, como Oracle,
SQL Server ou MySQL, sem praticamente
nenhuma mudana.
Veremos neste artigo um pequeno
guia de referncia para os parmetros
do comando SELECT, um dos mais
importantes da linguagem SQL.
SELECT Simples
O comando SELECT permite recuperar
os dados de um objeto do banco, como uma
tabela, uma view e, em alguns casos, uma
stored procedure (alguns bancos de dados
permitem a criao de procedimentos que
retornam valor). A sintaxe mais bsica do
comando :
SELECT <LISTA_DE_CAMPOS>
FROM <NOME_DA_TABELA>
Exemplo:
SELECT CODIGO, NOME FROM CLIENTES;
SELECT * FROM CLIENTES;
O caracter * representa todos os campos.
Apesar de prtica, esta mscara no muito
utilizada, pois, para o SGBD, mais rpido
receber o comando com todos os campos
explicitados. O uso do * obriga o servidor
a consultar quais so os campos antes de
efetuar a busca dos dados, criando mais um
passo no processo.
COMANDO WHERE
A clusula Where permite ao comando
SQL passar condies de ltragem, Veja o
exemplo:
SELECT CODIGO, NOME FROM CLIENTES
WHERE CODIGO = 10;
SELECT CODIGO, NOME FROM CLIENTES
WHERE UF = RJ

SELECT CODIGO, NOME FROM CLIENTES
WHERE CODIGO >= 100 AND CODIGO <=500;
SELECT CODIGO, NOME FROM CLIENTES
WHERE UF=MG OR UF = SP
Guia Rpido da SQL
SQL
Magazine - 9
Os parnteses, corretamente utilizados,
do mais poder a consulta:
SELECT CODIGO, NOME FROM CLIENTES
WHERE UF = RJ OR (UF=SP AND ATIVO=N);
Neste comando, todos os clientes
do Rio de Janeiro e apenas os clientes
inativos de So Paulo seriam capturados.
SELECT CODIGO, NOME FROM CLIENTES
WHERE (ENDERECO IS NULL) OR (CIDADE IS NULL)
Aqui todos os clientes que no possuem
endereco ou cidade cadastrados sero
selecionados.
FILTRO DE TEXTO
SELECT CODIGO, NOME FROM FUNCIONARIO
WHERE DEPARTAMENTO=VENDAS;
SELECT CODIGO FROM CLIENTES
WHERE NOME > K;
Para busca parcial de strings, o SELECT
fornece o operador LIKE:
SELECT CODIGO, NOME FROM CLIENTES
WHERE NOME LIKE MARIA*;
Neste comando, todos os clientes
cujo nome iniciam com Maria sero
retornados. Se quisermos retornar
os nomes que contenham MARIA
tambm no meio, podemos alterar para:
SELECT CODIGO, NOME FROM CLIENTES
WHERE NOME LIKE *MARIA*
O uso da mscara no incio e no m da
string fornece maior poder de busca, mas
causa considervel perda de performance.
Este recurso deve ser utilizado com
critrio.
Nota: Em alguns bancos de dados a
mscara de tro no representada pelo
caracter *. Consulte a referncia do banco
utilizado para vericar o caracter correto.
Por padro, a SQL diferencia caixa
baixa de caixa alta. Para eliminar essa
diferena, utilize a funo UPPER:
SELECT CODIGO, NOME FROM CLIENTES WHERE
UPPER(NOME) LIKE MARIA*SILVA*
ORDENAO
A ordenao pode ser denida com
o comando ORDER BY. Assim como
no comando WHERE, o campo de
ordenao no precisa estar listado como
campo de visualizao:
SELECT CODIGO, NOME FROM CLIENTES
ORDER BY NOME
SELECT CODIGO, NOME FROM CLIENTES
ORDER BY UF, NOME
A incluso da palavra DESC garante a
ordenao invertida:
SELECT CODIGO, NOME FROM CLIENTES ORDER BY
NOME DESC
SELECT CODIGO, NOME FROM CLIENTES ORDER BY
UF DESC, NOME
JUNO DE TABELAS
O SELECT permite juntar duas ou
mais tabelas no mesmo resultado. Isso
pode ser feito de vrias formas:
SELECT CLIENTES.CODIGO, CLIENTES.NOME,
PEDIDOS.DATA, PEDIDOS.VALOR
FROM CLIENTES, PEDIDOS
WHERE CLIENTES.CODIGO = PEDIDOS.CODCLIENTE
Nesta linha as tabelas relacionadas
CLIENTES e PEDIDOS so unicada
atravs do campo chave, em uma
operao de igualdade. Repare que o
nome dos campos passam a ser prexados
pelo nome das tabelas, resolvendo
duplicidades. Uma verso resumida desta
comando pode ser:
SELECT A.CODIGO, A.NOME, B.DATA, B.VALOR
FROM CLIENTES A, PEDIDOS B
WHERE A.CODIGO = B.CODCLIENTE
O uso de aliases no cdigo SQL torna a
manuteno mais simples.
No comando abaixo temos vrias tabelas
unicadas em uma mesma clusula:
SELECT A.CODIGO, A.NOME, B.DATA, B.VALOR,
C.QTD, D.DESCRICAO
FROM CLIENTES A, PEDIDOS B, ITENS C, PRODUTOS D
WHERE A.CODIGO = B.CODCLIENTE
AND B.CODIGO = C.CODPEDIDO
AND C.CODPRODUTO = D.CODIGO
Neste comando unicamos as tabelas
relacionadas CLIENTES, PEDIDOS,
ITENS e PRODUTOS. Veja mais alguns
exemplos:
SELECT A.CODIGO, A.NOME, B.DATA, B.VALOR
FROM CLIENTES A, PEDIDOS B
WHERE A.CODIGO = B.CODCLIENTE
AND A.UF= RJ
SELECT A.CODIGO, A.NOME, B.DATA, B.VALOR
FROM CLIENTES A, PEDIDOS B
WHERE A.CODIGO = B.CODCLIENTE
AND UF = RJ OR (UF=SP AND ATIVO=N);
SELECT A.CODIGO, A.NOME, B.DATA, B.VALOR
FROM CLIENTES A, PEDIDOS B
WHERE A.CODIGO = B.CODCLIENTE
ORDER BY A.UF, A.NOME
Observe que a juno atravs da
igualdade de campos traz como resultado
somente os registros que possuem
referncia nas duas tabelas. Observe o
comando abaixo:
SELECT A.CODIGO, A.DESCRICAO, B.DESCRICAO
FROM PRODUTOS A , COMPONENTES B
WHERE A.CODIGO = B.CODPRODUTO
Os produtos que no possuem
componentes no so selecionados.
Caso seja necessrio criar uma listagem
incluindo tambm os registros que
no possuem correspondncia, deve-se
utilizar o comando JOIN.
COMANDO JOIN
A juno de tabelas no comando
SELECT tambm pode ser feita com o
comando JOIN. Este comando deve ser
utilizado com a palavra reservada INNER
ou com a palavra OUTER:
INNER - Semelhante ao uso do
operador = na juno de tabelas. Aqui,
os registros sem correspondncias no
so includos. Esta clusula opcional e
pode ser omitida no comando JOIN.
OUTER Os registros que no se
relacionam tambm so exibidos. Neste
caso, possvel denir qual tabela ser
includa na seleo, mesmo no tendo
correspondncia.
Para exemplicar, temos as tabelas
abaixo:
Produtos
Cdigo Descrio Categoria
1 Martelo 1
2 Chave de Fenda 1
3 Alicate 2
4 Desmagnetizador 2
5 Parafuso <null>
Componentes
Cdigo Cod.Produto Descrio Qtd
1 3 Adaptador CF 1
2 4 CaboMod A1 2
2 4 CaboMod A2 1
Categoria
Cdigo Descrio
1 Ferramenta A1
2 Ferramenta B1
3 Ferramenta C1
4 Ferramenta D1
Observe os exemplos e o resultado
produzido:
SELECT A.CODIGO, A.DESCRICAO, B.DESCRICAO, B.QTD
FROM PRODUTOS A
INNER JOIN COMPONENTES B
ON (A.CODIGO = B.CODPRODUTO)
SQL
10 - Magazine
ResuItado 1
Cd Descrio Descrio Qtd
1 Alicate Adaptador CF 1
2 Desmagnetizador CaboMod A1 2
3 Desmagnetizador CaboMod A2 1
Este comando pode ser escrito na
verso resumida abaixo:
SELECT A.CODIGO, A.DESCRICAO, B.DESCRICAO
FROM PRODUTOS A
JOIN COMPONENTES B
ON (A.CODIGO = B.CODPRODUTO)
Como mostrado no resultado, os
produtos que no possuem componentes
no so includos na seleo.
SELECT A.CODIGO, A.DESCRICAO, B.DESCRICAO , B.QTD
FROM PRODUTOS A
LEFT OUTER JOIN COMPONENTES B
ON (A.CODIGO = B.CODPRODUTO)
ResuItado 2
Cd Descrio Descrio Qtd
1 Martelo 1
2 Chave de Fenda 2
3 Alicate Adaptador CF 1
4 Desmagnetizador CaboMod A1
4 Desmagnetizador CaboMod B2
5 Parafuso
Neste comando todos os produtos
sero includos na seleo, independente
de possuirem um componente. Observe
que a palavra LEFT se refere a primeira
tabela no relacionamento. O mesmo
comando poderia ser descrito na forma:
SELECT A.CODIGO, A.DESCRICAO, B.DESCRICAO
FROM COMPONENTES A
RIGHT OUTER JOIN PRODUTOS B
ON ( A.CODIGO = B.CODPRODUTO )
A ordem das tabelas foi invertida, mas
o resultado o mesmo. Observe mais
alguns exemplos:
SELECT A.CODIGO, A.DESCRICAO, B.DESCRICAO ,
B.QTD
FROM PRODUTOS A
JOIN COMPONENTES B
ON ( A.CODIGO = B.CODPRODUTO )
WHERE A.CATEGORIA=1
ResuItado 3
Cd Descrio Descrio Qtd
<vazio> <vazio> <vazio> <vazio>
SELECT A.CODIGO, A.DESCRICAO, B.DESCRICAO
FROM PRODUTOS A JOIN COMPONENTES B
ON (A.CODIGO = B.CODPRODUTO )
WHERE A.CATEGORIA=1 OR A.CATEGORIA=2
ORDER BY A.CATEGORIA, A.DESCRICAO
ResuItado 4
Cd Descrio Descrio Qtd
3 Alicate Adaptador CF 1
4 Desmagnetizador CaboMod A1 2
4 Desmagnetizador CaboMod A2 1
FULL OUTER JOIN
Podemos ainda combinar o uso de
INNER e OUTER atravs do comando
FULL OUTER JOIN. Neste caso,
todos os registros das duas tabelas
envolvidas sero exibidos, tendo ou no
relacionamento. Observe:
SELECT A.CODIGO, A.DESCRICAO, B.DESCRICAO
FROM PRODUTOS A
FULL OUTER JOIN CATEGORIA B
ON ( A.CATEGORIA = B.CODIGO )
ORDER BY A.DESCRICAO
Produtos
Cdigo Descrio Categoria
1 Martelo Ferramenta A1
2 Chave de Fenda Ferramenta A1
3 Alicate Ferramenta B1
4 Desmagnetizador Ferramenta B1
5 Parafuso
Ferramenta C1
Ferramenta D1
UNION
Existe ainda uma Segunda forma de
juntar tabelas com o comando SELECT.
Atravs do parmetro UNION, possvel
colar o contedo de duas tabelas. Veja
o exemplo:
SELECT CODIGO, NOME FROM CLIENTES
UNION
SELECT CODIGO, NOME FROM FUNCIONARIOS
O resultado deste comando a
listagem de todos os clientes e a listagem
dos funcionrios, dentro do mesmo
result set. Repare que no comando JOIN
a unio horizontal e no UNION a unio
vertical.
Por default, os registros duplicados
so eliminados na clusula UNION. No
exemplo anterior, se tivssemos um
cliente com mesmo nome e cdigo de
um funcionrio, apenas o registro da
primeira tabela seria exibido. Para incluir
todos os registros, independente de
duplicidade, utilize a palavra ALL:
SELECT CODIGO, NOME FROM CLIENTES
UNION ALL
SELECT CODIGO, NOME FROM FUNCIONARIOS
FUNES DE AGRUPAMENTO
So cinco as funes bsicas de
agrupamento:
AVG: Retorna a mdia do campo
especicado:
SELECT AVG(VALOR) FROM PEDIDOS;
MIN/MAX/SUM: Respectivamente,
retorna o menor valor, o maior e o
somatrio de um grupo de registros:
SELECT MIN(VALOR) FROM PEDIDOS;
SELECT MAX(VALOR) FROM PEDIDOS;
SELECT AVG(VALOR) FROM PEDIDOS;
COUNT: Retorna a quantidade de
itens da seleo:
SELECT COUNT(CODIGO) FROM CLIENTES;
AGRUPAMENTO
Um poderoso recurso do comando
SELECT o parmetro GROUP
BY. Atravs dele podemos retornar
informaes agrupadas de um conjunto
de registros, estabelecendo uma condio
de agrupamento. um recurso muito
utilizado na confeco de relatrios. Para
exemplicar, temos as tabelas CLIENTES
e PEDIDOS:
CIientes
Cdigo Nome
1 Gustavo Viegas
2 Vinicius Andrade
3 Rosangela Mattos
Pedidos
Cdigo CodCliente Data Valor
1 1 01/10/2002 500
2 1 02/10/2002 100
3 2 01/10/2002 600
4 3 05/01/2002 100
5 3 10/10/2002 300
6 3 11/10/2002 80
SELECT CODCLIENTE, MAX(VALOR)
FROM PEDIDOS
GROUP BY CODCLIENTE
O comando acima retorna o maior
valor de pedido de cada cliente. Observe
o resultado:
ResuItado 6
CodCliente MAX (Valor)
1 500
2 600
3 300
Guia Rpido da SQL
SQL
Magazine - 11
SELECT CODCLIENTE, COUNT(*)
FROM PEDIDOS
GROUP BY CODCLIENTE
Aqui vemos quantos pedidos foram
feitos por cada cliente. Veja o resultado:
ResuItado 7
CodCliente COUNT(*)
1 2
2 1
3 3
HAVING
Atravs do comando HAVING
podemos ltrar a clusula GROUP BY.
Observe o comando abaixo:
SELECT CODCLIENTE, COUNT(*)
FROM PEDIDOS
GROUP BY CODCLIENTE
HAVING COUNT(*) >= 2
ResuItado 8
CodCliente COUNT(*)
1 2
3 3
Somente os clientes com 2 ou mais
pedidos sero selecionados. Repare que
o HAVING utilizado, geralmente,
com alguma funo de agrupamento.
Para ltros normais, pode-se utilizar o
comando WHERE. Observe o exemplo
abaixo:
SELECT CODCLIENTE, COUNT(*)
FROM PEDIDOS
WHERE DATA > 06/10/2002
GROUP BY CODCLIENTE
HAVING COUNT(*) >= 2
ResuItado 9
CodCliente COUNT(*)
3 2
Repare que o cliente nmero 3
apresentou apenas dois pedidos, visto
que o primeiro no possui data maior
que 6/10.
Concluso
O uso correto do comando SELECT
fornece uma poderosa interface de ltro.
Utilizando sempre a sintaxe padro,
o desenvolvedor conta com maior
independncia de plataforma, pois o SQL
ANSI compreendido pelos principais
bancos de dados. Existem ainda funes
especiais e funes de converso, que
sero abordados em futuras edies da
SQL Magazine. Para maior ecincia no
uso do SELECT, desejvel tambm o
bom planejamentos dos ndices do banco.
Para maiores informaes a respeito do
uso de ndices, leia a matria de Everson
Ramos, publicada nesta edio. Espero
que este artigo introdutrio sirva de
consulta em seus projetos!
A formatao no uso de campos do tipo
DATE pode sofrer alteraes de acordo com
o banco utilizado. Consulte o manual de
referncia do mesmo para maiores detalhes.
NOTA
webSITES
ClubeDelphi
www.clubedelphi.net/guias/index.asp
SQLAutor
Gladstone Matos coordenador das
revistas ClubeDelphi, Java Magazine e SQL
Magazine..
Pode ser contactado atravs do email:
gladstone@clubedelphi.net
ANUNCIO
SQL
Otimizao de comandos
!"# Everson VoIaco
esmo um aplicativo bem projetado poder experimentar problemas
de desempenho se a frase SQL que usa for mal construda. Falhas no proje-
to do aplicativo e na construo do SQL causam a maioria dos problemas de
desempenho em bancos de dados projetados adequadamente. Veremos neste
artigo como melhorar o comando SQL, para garantir maior performance em
sua execuo, tendo como base o ORACLE.
M
A forma como o banco de dados se or-
ganiza para responder a requisio de um
aplicativo diretamente inuenciada pela
maneira como a frase SQL construda.
Existem vrios pontos a serem observados
nesta construo.
O caminho mais
curto o uso de n-
dices para auxiliar a
pesquisa mas, im-
portante observar,
a simples criao de
um ndice nem sempre o melhor cami-
nho para otimizao de comandos SQL.
Alguns conceitos importantes
Antes de partir para como e quais as me-
lhores formas de se aplicar e se escrever
comandos SQL importante relembrar-
mos alguns conceitos importantes.
Existem dois mtodos bsicos utilizados
pelos SGDBs para localizar dados, tam-
bm conhecidos como caminhos de aces-
so. So eles:
-Full Table Scan: Leitura seqencial, blo-
co por bloco, de toda a tabela. Neste m-
todo, so vericados registro a registro os
critrios de seleo.
-Index Search: Procura de um ndice so-
bre a coluna denida no critrio de seleo,
identicando a localizao dos registros
qualicados.
O ORACLE possui seu prprio meca-
nismo de otimi-
zao, chamado
otimizador, para
executar co-
mandos SQL e
dinamicamente
determinar que
caminho de acesso seguir, dependendo
das informaes disponveis. O melhor
caminho de acesso , geralmente, o uso
de ndices, mas isso nem sempre verda-
deiro. Por exemplo, se existir uma forma
de identicar diretamente um registro
pelo seu endereo fsico, a resposta ser
mais rpida. (neste caso estamos falando
do rowid, endereo fsico do registro em
uma tabela ORACLE).
Ex.:
SELECT rowid INTO :emp_rowid FROM EMP
WHERE emp.empno = 5353 FOR UPDATE OF emp.ename;
UPDATE emp SET emp.ename = OTIMIZADOR
WHERE rowid = :emp_rowid;
A simples criao de ndices nem
sempre o melhor caminho para
otimizao de comandos SQL
Otimizao de Comandos SQL
SQL
Magazine - 13
Excluindo registros duplicados:
DELETE FROM emp e
WHERE e.rowid > (SELECT MIN(x.rowid) FROM emp x
WHERE x.empno = e.empno);
Algumas informaes para auxiliar o
acesso do otimizador:
Vericar nas colunas dentro da clusu-
la WHERE:
- Que colunas so ndices;
- Que colunas esto denidas como
NOT NULL;
- Que ndices podem ser usados.
possvel ajudar o otimizador a procu-
rar o melhor caminho de acesso atravs
da criao de ndices e clusters, o que ser
considerado a partir de agora.
Regras de Utilizao de ndices
Um ndice ser usado se :
- o ndice existir;
- a coluna ndice for referenciada na
clusula WHERE;
Um ndice pode ser usado para testes de:
- Igualdade:
SELECT e.empno, e.ename FROM emp e
WHERE e.job = CLERK;
- Intervalo ilimitado:
SELECT e.empno, e.ename FROM emp e
WHERE e.job > CLERK;
- Intervalo limitado:
SELECT e.empno, e.ename FROM emp e
WHERE e.job BETWEEN CLERK AND JONES;
A criao de ndices deve ser feita com
critrio. A atualizao (inserts, updates e
deletes) em tabelas de dados gera uma
ao equivalente nos ndices, sendo que o
tempo de atualizao dos ndices superior
ao de atualizao da tabelas, pois alm da
colocao do registro em seqncia dentro
do ndice necessrio a atualizao dos ra-
mos das rvores do ndice.
Considerando os detalhes acima, ndi-
ces devem ser criados somente quando
necessrio, pois a sua simples existncia
no implica em melhoria de performan-
ce, podendo muitas vezes ser a origem
de perda de performance.
Condies de no utilizao de ndices
1) Funes ou Operadores Aritmticos
Se a coluna ndice for modicada por
uma funo ou por operadores aritmticos
(+,-,*,/), o ndice no ser utilizado.
Um ndice sobre SAL ou ENAME no
ser utilizado nos seguintes casos:
SELECT e.ename, e.empno FROM emp e
WHERE e.sal*12 = 2400;
SELECT e.ename, e.empno FROM emp e
WHERE SUBSTR(e.ename,1,3) = JON
Nos casos acima, as seguintes modi-
caes permitem o uso de ndice:
SELECT e.ename, e.empno FROM emp e
WHERE e.sal = 2400/12
SELECT e.ename, e.empno FROM emp e
WHERE e.ename LIKE JON%
2) Converso de Dados
A converso de dados pode inibir a
utilizao do ndice da coluna em ques-
to se usado inadvertidamente.
Na seguinte sentena, um ndice sobre
a coluna HIREDATE no ser usado:
SELECT e.ename, e.empno FROM emp e
WHERE TO_CHAR(e.hiredate, month dd,yyyy) =
january 23,1982

Esta mesma sentena SQL, modica-
da, usar o ndice como segue:
SELECT e.ename, e.empno FROM emp e
WHERE e.hiredate = to_date(january 23,1982 ,
mounth dd,yyyy)
Se na clusula WHERE os predicati-
vos utilizam dados de tipos diferentes,
o ORACLE automaticamente converte
um deles sem a preocupao sobre a me-
lhor escolha para a utilizao dos ndices.
A converso por default escolhida, pelo
caso mais comum (Ex.: O valor de uma
coluna, onde o tipo number, rowid ou
date, comparado com uma constante de
tipo char). Em qualquer caso muito re-
comendado o controle da converso dos
dados de maneira explcita.
3) Caso de colunas com valores NULL
Os ndices no contm referncia para
valores do tipo null. Isto quer dizer que os
valores null podem ser
recuperados somente
atravs de uma leitura
seqencial completa da
tabela (Full Table Scan).
No comando abai-
xo o ndice sobre a
coluna COMM no
ser utilizado:
SELECT e.ename, e.empno FROM emp e
WHERE e.comm is null

Neste cdigo o otimizador considera
que a maioria dos registros dentro da ta-
bela so valores not null e ir escolher a
leitura seqencial (Full Table Scan):
SELECT e.ename, empno FROM emp e
WHERE e.comm > = 100
A velocidade de execuo depender
dos dados da tabela. Se a maioria dos
registros contiver valores no nulos, a
clusula comm is not null ser mais
rpida.
Os ndices concatenados no tero re-
ferncia para os registros onde todas as
colunas que o compem tiverem valores
nulos.
4) Caso de predicados com a condio
NOT EQUAL
Os ndices sobre colunas referencia-
das pela condio not equal no sero
usadas. O otimizador considera que o
nmero de registros que iro satisfazer a
condio ser maior do que os registros
que no a satisfazem.
O ndice sobre DEPTNO no ser usa-
do na seguinte sentena SQL:
SELECT e.ename, e.empno FROM emp e
WHERE e.deptno !=10

No comando abaixo, o ndice sobre
deptno ser utilizado:
SELECT e.ename, e.empno FROM emp e
WHERE not e.deptno > 20
O ORACLE executar a sentena SQL
como e.deptno <= 20
5) Casos de sentenas SQL com clusu-
la ORDER BY
A clusula ORDER BY aumenta con-
sideravelmente a necessidade de recursos
para execuo de uma sentena SQL. Em
geral, tabelas temporrias sero necess-
rias para operao de sort.
possvel evitar a utilizao de tabelas
temporrias se um ndice sobre a coluna
alvo do order by existir. As seguintes con-
dies devem ser cumpridas:
- A coluna order by
deve ser denida com
not null;
- A coluna order by
deve ser uma simples
coluna ndice ou as
primeiras
colunas de ndice
concatenado;
- A clusula order by deve conter so-
mente colunas e no expresses;
- No deve haver qualquer clusula
group by, distinct ou for update;
- No deve haver nenhum outro aces-
Se a maioria dos registros
contiver valores no nulos, a
clusula comm is not null ser
mais rpida.
SQL
14 - Magazine
so alternativo que seja prioritrio sobre o
ndice da coluna order by;
A seguinte sentena SQL ser executa-
da via ndice em DNAME se os requisitos
mencionados acima forem respeitados:
SELECT d.dname FROM dept d order by d.dname;
SELECT d.dname, d.deptno FROM dept d
WHERE d.loc = dallas order by d.dname;
SELECT d.dname, d.loc FROM dept d
WHERE d.dname != accouting order by d.dname;
Na sentena abaixo, se um ndice sobre
a coluna LOC existir, tornar-se- prio-
ritrio e o ndice sobre dname no ser
usado:
SELECT d.dname, d.deptno FROM dept d
WHERE d.loc = dallas order by d.dname;
6) Casos de sentenas SQL contendo
funes MAX ou `MIN
Um ndice ser usado para executar
uma sentena SQL com MAX ou MIN se
as seguintes condies forem satisfeitas:
- MAX ou MIN devem ser apenas ex-
presses da lista de seleo;
- A lista de seleo no deve ter qual-
quer outro operador de concatenao ou
adio a no ser somen-
te MAX ou MIN;
- A lista de seleo
no deve conter qual-
quer outra coluna a no
ser uma simples ocor-
rncia da coluna como
agrupamento de MAX
ou MIN;
- A sentena SQL no pode ser um
JOIN;
- A clusula WHERE e group by no
podem ser utilizadas;
- A coluna alvo do MAX ou MAX deve
ser indexada ou fazer parte das primeiras
colunas de um ndice concatenado.
A seguinte sentena SQL utilizar um
ndice sobre a coluna SAL:
SELECT (max(e.sal)*2) + 10000 FROM emp e;
7) Sentenas SQL recuperam informa-
es sobre uma simples tabela
Uma sentena SQL pode ter vrios
ndices nicos e/ou no nicos disposi-
o do otimizador. A escolha do ndice a
ser usado depende da presena de:
- ndices nicos e no nicos: os ndices
possvel ajudar o otimizador
a procurar o melhor caminho
de acesso atravs da criao de
ndices e clusters
nicos sero favorecidos sobre os ndices
no nicos.
- Vrios ndices no nicos : os regis-
tros identicados pelo caminho de acesso
do ndice condutor (o primeiro nome na
sentena SQL) sero unidos com aquele
identicado por outro ndice. A meta
identicar os registros pertencentes a to-
dos os ndices.
Se o otimizador no tiver clara esco-
lha concernente a qual ndice usar, ento
ir arbitrariamente escolher o primeiro
mencionado dentro da sentena SQL
como ndice condutor (Driving Index).
8) Caso de sentena SQL com inter-
seo de vrios predicados de igualdade
dentro da clusula WHERE com ndice
no nico.
O ndice no nico ser sorteado pela
coluna rowid a m de minimizar o n-
mero de comparaes necessrias.
Se ns temos ndice no nico sobre
JOB e DEPTNO:
SELECT e.ename FROM emp e WHERE e.job =
manager and e.deptno = 20;
a. Procura a primeira ou prxima
referncia do ndice sobre job (driving
index) con-
tendo manager.
b. Procura a pri-
meira ou a prxi-
ma referncia do
ndice deptno con-
tendo valor 20.
Compara as duas rowid.
- Se as duas forem iguais, registro en-
contrado. Vai a prxima referncia de
a. e compara com a prxima refe-
rncia de b..
- Se forem diferentes guarda a refern-
cia de a. e passa a prxima referncia
de b..
- c. Continua a procura at que no
existam mais referncias sobre o ndice
de job (driving index).
9) Caso de sentena SQL com interse-
o de um predicado de igualdade com
um predicado sem limite, dentro da clu-
sula WHERE com ndice no nico.
Somente o ndice sobre a igualdade
ser usado. No exemplo que segue, se n-
dices no nicos existirem sobre as colu-
nas JOB e DEPTNO, o ndice sobre JOB
ser utilizado, os registros corresponden-
tes sero recuperados e vericada a vali-
dade do segundo predicado.
SELECT e.ename FROM emp e
WHERE e.job = manager and e.deptno > 10
10) Caso de ndice Concatenado
ndices concatenados so ndices for-
mados por vrias colunas representados
como se fosse simplesmente uma nica
coluna.
a) Interseo de vrios predicados de
igualdade.
Se um ndice concatenado existir sobre
DEPTNO e JOB, somente uma refern-
cia ser necessria para localizar a
rowid correspondente :
SELECT e.ename FROM emp e
WHERE e.job = manager and e.deptno = 10
b) Interseo de predicados sem limite
com predicados de igualdade.
Se um ndice concatenado existir sobre
DEPTNO e JOB, ser utilizado para
executar a seguinte sentena SQL :
SELECT e.ename FROM emp e
WHERE e.job = manager and e.deptno > 10
c) Interseo de predicado sem limite.
Se um ndice concatenado existir sobre
DEPTNO e JOB, ser utilizado para
executar a seguinte sentena SQL:
SELECT e.ename FROM emp e
WHERE e.job > manager and e.deptno > 10
d) Utilizao parcial ou total dos ndi-
ces concatenados.
O otimizador pode somente usar a ou as
primeira(s) parte(s) do ndice concatenado.
No seguinte caso, um ndice concate-
nado foi criado sobre as colunas EMP-
NO, ENAME e DEPTNO:
A seguinte sentena SQL usa plena-
mente o ndice concatenado:
SELECT * FROM emp e
WHERE e.empno = 7369
AND e.ename = smith and e.depnto = 20

SELECT * FROM emp e
WHERE e.ename = smith
AND e.empno = 7369
AND e.deptno = 20
As seguintes sentenas SQL utilizam
parcialmente o ndice concatenado:
Otimizao de Comandos SQL
SQL
Magazine - 15
Uso parcial do ndice usando somente
EMPNO e ENAME:
SELECT * FROM emp e
WHERE e.empno = 7369 and e.ename = smith
Uso parcial do ndice usando somente
EMPNO e ENAME :
SELECT*FROM emp e
WHERE e.empno = 7369 and e.deptno = 20
As seguintes sentenas SQL no usam
o ndice :
SELECT * FROM emp e
WHERE e.ename = smith and e.deptno = 20
SELECT * FROM emp e WHERE e.ename = smith
SELECT * FROM emp e WHERE e.deptno = 20
11) Casos de ndice nico e no nico
na mesma sentena SQL.
O otimizador favorecer a utilizao
do ndice nico.
No seguinte caso o ndice no nico
existe em SAL e um ndice nico em
EMPNO :
SELECT e.ename FROM emp e
WHERE e.sal = 3000 and e.empno = 7902
O ndice nico ser usado para procurar a
rowid correspondente ao empno = 7902.
Nos registros recuperados sero veri-
cados o valor de sal.
12) Caso de vrios ndices na mesma
sentena SQL.
Se vrios ndices nicos esto dispon-
veis, o otimizador ir escolher o primei-
ro mencionado na sentena SQL. Por
exemplo, se ndices nicos existirem so-
bre ENAME e EMPNO, e um ndice no
nico existir sobre SAL, a seguinte sen-
tena SQL ser executada sobre o ndice
ENAME
SELECT e.deptno FROM emp e
WHERE e.sal = 3000
and e.ename = scott and e.empno = 7602
Otimizao da clusula OR (Unio de
predicados)
O caminho de acesso determinado
como se a clusula OR e suas ramica-
es estivessem ausentes. O caminho
determinado considerando cada rami-
cao da clusula OR separadamente.
Exemplo A
ndice existente sobre SAL e JOB.
SELECT e.ename FROM emp e
WHERE e.deptno = 10
AND (e.sal = 3000 or e.job = clerk)
Neste caso, o caminho de acesso iden-
ticado por 2 melhor que o identica-
do por 1, ento a clusula OR otimi-
zada para utilizao dos ndices.
Exemplo B
Somente ndice sobre SAL utilizando a
mesma sentena do exemplo
Os dois caminhos de acesso identi-
cado por 2 no so melhores que o
identicado por 1, ento os ndices no
sero utilizados e ocorrer uma pesquisa
seqencial na tabela. O otimizador na
Clusula OR exige a presena dos ndices
utilizveis dentro de cada coluna referen-
ciada dentro da clusula OR.
Verificando o Caminho de Acesso do
otimizador
Podemos vericar o caminho de aces-
so utilizado pelo SGDB para executar
uma determinada frase SQL. Chamare-
mos esse caminho de Acesso de Plano
de Execuo. No plano de execuo so
vericados todos os procedimentos fei-
tos pelo SGDB, como utilizao ou no
de ndices, clusters, rowid, alm da veri-
cao da quantidade de passos realizados
pelo banco para execuo do comando.
Este procedimento muito til, pois
pode ser utilizado como recurso para ve-
ricarmos se as alteraes efetuadas em
um comando realmente otimizam a exe-
cuo do mesmo. A vericao do plano
de execuo feita no Oracle atravs do
comando EXPLAIN PLAN. A sintaxe do
comando a seguinte:
EXPLAIN PLAN
SET STATEMENT_ID = COMAND_ID
INTO OUTPUT
FOR COMANDOSQL;
Onde:
- COMAND_ID um String identica-
1)Para DEPTNO = 10 - Pesquisa seqencial na tabela;
2) Para SAL = 3000 - ndice no nico sobre SAL;
Para JOB = clerk - ndice no nico sobre JOB;
AnIise
1)Para DEPTNO = 10 - Pesquisa seqencial na tabela;
2) Para SAL = 3000 - ndice no nico sobre SAL;
Para JOB = clerk - Pesquisa sequencial na tabela.
AnIise
dor para posterior visualizao do plano
de execuo.
- OUTPUT tabela onde o plano de
execuo gerado. O usurio que execu-
tar o EXPLAIN PLAN deve ter direitos
de INSERT sobre a mesma. O comando
para criao desta tabela mostrado da
listagem1.
O Script para criao desta tabela cha-
ma-se UTLXPLAN.SQL e instalado
juntamente com oracle e a sua localiza-
o depende da verso do banco.
- COMANDOSQL o comando a ser
analisado.
Para vericao do plano de execuo
gerado pelo EXPLAIN PLAN devemos
consultar a tabela informada no comando.
Este procedimento pode ser efetuado de
vrias maneiras, uma delas a que segue:
SELECT SUBSTR(LPAD( ,2*(LEVEL-1))||
operation,1,50) operation, options,
object_name, position
FROM OUTPUT
START WITH id = 0 AND statement_id = COMAND_ID
CONNECT BY PRIOR id = parent_id AND
statement_id = COMAND_ID;
Onde,
- COMAND_ID um String identica-
dor do plano de execuo informado no
EXPLAIN PLAN
Listagem 1.
create table NOME_DA_TABELA (
statement_id varchar2(30),
timestamp date,
remarks varchar2(80),
operation varchar2(30),
options varchar2(30),
object_node varchar2(128),
object_owner varchar2(30),
object_name varchar2(30),
object_instance numeric,
object_type varchar2(30),
optimizer varchar2(255),
search_columns number,
id numeric,
parent_id numeric,
position numeric,
cost numeric,
cardinality numeric,
bytes numeric,
other_tag varchar2(255),
partition_start varchar2(255),
partition_stop varchar2(255),
partition_id numeric,
other long,
distribution varchar2(30));
SQL
16 - Magazine
- OUTPUT tabela onde o plano de
execuo gerado.
Vamos exemplicar a execuo do
EXPLAIN PLAIN validando a seguinte
informao:
Um ndice utilizado se ele existir e se
a coluna que faz parte deste ndice estiver
contida na clausula WHERE do coman-
do SQL. Este mesmo ndice no utiliza-
do se existirem funes de converso de
dados envolvendo esta coluna.
Em outras palavras: a execuo do co-
mando SELECT * FROM EMP WHERE
EMPNO = 50 utilizar o ndice da chave
primria, que contm a coluna EMPNO, e a
execuo do comando SELECT * FROM
EMP WHERE TO_CHAR(EMPNO) =
50, no utilizar o ndice.
Utilizaremos o comando do quadro
em destaque acima para criao da tabela
que receber o plano de execuo, com
o nome de PLAN_TABLE. Em seguida
executaremos o EXPLAIN PLAN para
vericao da utilizao do ndice com o
seguinte comando:
EXPLAIN PLAN
SET STATEMENT_ID = SQLMagazine Com Indice
INTO PLAN_TABLE
FOR
SELECT * FROM EMP WHERE EMPNO = 50;
A vericao do plano de execuo
feita de seguinte forma:
SELECT SUBSTR(LPAD( ,2*(LEVEL-1)) ||
operation,1,50) operation, options,
object_name, position
FROM PLAN_TABLE
START WITH id = 0 AND statement_id =
SQLMagazine Com Indice
CONNECT BY PRIOR id = parent_id AND
statement_id = SQLMagazine Com Indice;
O resultado com o plano de execuo
mostrado na Tabela 2.
Analisando este resultado comprova-
mos que o ndice referente a chave pri-
mria foi utilizado. Vamos vericar ago-
ra o mesmo comando alterado:
EXPLAIN PLAN
SET STATEMENT_ID = SQLMagazine Sem Indice
INTO PLAN_TABLE
FOR
SELECT * FROM EMP WHERE TO_CHAR(EMPNO) = 50;
A vericao do plano de execuo
feita de seguinte forma:
SELECT SUBSTR(LPAD( ,2*(LEVEL-1)) ||
operation,1,50) operation, options,
object_name, position
FROM PLAN_TABLE
START WITH id = 0 AND statement_id =
SQLMagazine Sem Indice
CONNECT BY PRIOR id = parent_id AND
statement_id = SQLMagazine Sem Indice;
Este resultado mostra que a utilizao
do ndice foi anulada pela funo aplicada
a coluna.
Concluso
Os cuidados a serem tomados com o
acesso a dados da aplicao so parte im-
portante de um projeto. A forma como
as consultas so escritas e como o banco
de dados est projetado inuencia direta-
mente na performance do produto. Esses
fatores no devem andar separados. Na
maioria dos casos necessria a perfeita
integrao entre a consulta escrita e o
estado do banco de dados. Muitas vezes
uma simples arrumao na consulta,
trocando algumas clusulas ou mudando
um pouco a lgica das condicionais,
garante um ganho na velocidade de exe-
cuo e resposta da mesma. No esquea
nunca de analisar se o ndice a ser criado
realmente necessrio, para no adicionar
um mais um processo para o seu banco.
Boa sorte e bons projetos!
OPERATION OPTONS OBJECT_NAME
select statement
table access by index rowid emp
index unique scan pk_emp
OPERATION OPTONS OBJECT_NAME
select statement
table access full emp
ANUNCIO
Otimizao de Comandos SQL
SQL
Magazine - 17
ANUNCIO
SQL
ModeIagem de dados com
!"# CIeison Santos
oIoca-se como de fundamentaI importncia tanto a anIise
como a modeIagem de dados para o processo de desenvoIvimento
de apIicaes. Esses procedimentos garantem um maior controIe
das diversas etapas do projeto desde a de!nio das regras do
negcio at a impIementao e manuteno da apIicao como um
todo. Existem no mercado, atuaImente, diversas ferramentas para
modeIagem de dados, dentre as quais pode ser destacado o soft-
ware ErWin.
C
O ErWin pode ser usado de uma for-
ma simples e prtica possibilitando uma
melhor visualizao, controle e documen-
tao do que se tem no banco de dados.
Atravs dos diversos recursos disponveis
(Figura 1) podemos desenhar o nosso
banco de dados denindo as entidades de
que compe o modelo com seus respec-
tivos atributos e relacionamentos, denir
caractersticas dessas entidades tornando-
as reais em um modelo fsico ou em vrios
modelos fsicos se for necessrio o acesso a
SGDBs distintos. Podemos ainda criar, de
forma automtica, o modelo implemen-
tado num banco de dados ou gerar scripts
para atualizao de alteraes efetuadas no
modelo, sincronizar dois bancos de for-
ma a garantir uma estrutura idntica em
ambos, e vrios outros recursos.
Na parte superior direita, observa-se uma
barra de ferramentas com os principais ob-
jetos do ErWin, como mostrado na Figura
2, a seguir:
Alguns conceitos importantes
1) Entidades - Entidade o local onde
cam armazenadas as informaes. Por
exemplo, a Entidade CLIENTES pode
guardar informaes referentes aos clien-
tes, e assim sucessivamente.
2) Subtipos - Podem
ser denidos como
um espelho de uma
ou mais entidades. Por
exemplo, pode-se criar
um subtipo chamado
CLIENTES_RJ que
contenha somente os
clientes que moram no
Rio de Janeiro, poden-
do ter ou no todos os
Figura 1. Tela inicial do ErWin
Modelagem de Dados com ErWin
SQL
Magazine - 19
atributos da Entidade CLIENTES.
3) Atributos - Os atributos podem ser
denidos como identicadores de cada
informao contida na entidade. O Cdi-
go do Cliente, por exemplo, um atribu-
to da Entidade CLIENTES.
4) Relacionamentos - Relacionamentos
so denidos como a ligao entre duas
ou mais entidades.
5) Cardinalidade - o que caracteriza
o relacionamento.Por exemplo: um pai
pode ter mais de um lho, porm um -
lho s pode ter apenas um pai. Isso quer
dizer que a cardinalidade dene o com-
portamento do relacionamento, denin-
do-o como um para muitos, muitos para
um ou at muitos para muitos.
Os tipos de modelo
! Modelo Lgico: o modelo de abs-
trao do sistema. Neste, detalhes como
qual banco de dados ser usado, o tipo
de campo, o tipo de hardware, entre ou-
tros aspectos no so relevantes. Aqui,
somente as necessidades do processo so
denidas, dando uma viso global do
sistema. No Erwin, podemos ter uma
viso da regra de negcio, ou seja, pode-
mos planejar uma estrutura lgica para
o banco de dados, onde so denidas as
validaes, as restries da regra de neg-
cio, a anlise das entidades e dos atribu-
tos denidos para a aplicao como um
todo.
!Modelo Fsico: onde os detalhes
so denidos. Serve como um espelho
de tudo o que est no banco de dados,
permitindo controlar caractersticas de
tabelas e colunas (conhecidos no mode-
lo lgico como Entidades e Atributos) de
forma particular para o SGDB utilizado
alm de possibilitar a denio de Proce-
dures, Triggers e outros processos.
Criando o modelo lgico
O tipo de modelo que est sendo visu-
alizado encontra-se na Combo situada
logo acima da barra de ferramentas, mos-
trada na Figura 1.
O modelo utilizado inicialmente ser o
modelo lgico, pois comeando por este
ca mais fcil denir o outro. Isso por-
que, como j foi visto, no modelo lgico
tem-se um melhor controle da aplicao,
sendo possvel denir as validaes ne-
cessrias, tanto para a regra de negcio
como para a implementao de banco de
dados no modelo fsico. Posteriormente,
podem ser criados modelos fsicos para
acessar a diferentes bancos de dados a
partir do mesmo modelo lgico.
Ser criado um modelo simples, onde
deniremos algumas entidades com seus
respectivos atributos e relacionamentos
mostrando como utilizar alguns dos mui-
tos recursos disponveis no ErWin para
modelagem de dados. O modelo ser
feito com base em um sistema comercial
com as tabelas CLIENTES, VENDEDO-
RES, PRODUTOS, FORNECEDORES,
PEDIDOS E ITENS_PEDIDOS.
Criando as Entidades
Como j visto, as entidades podem
ser criadas atravs do primeiro objeto da
barra de ferramentas, clicando nesta, ar-
rastando para o modelo e trocando o seu
nome, como mostrado na Figura 3.
Criando os Atributos
Para criar os atributos, basta apenas dar
um duplo clique na entidade. possvel
criar novos atributos, renomear ou ex-
cluir um atributo j existente, como mos-
trado na gura 4. Pode-se, tambm, ao
lado direito da tela, denir vrias caracte-
rsticas do atributo como chave primria
na opo Primary Key ou Requerido na
opo Required.
Figura 2. Barra de ferramenta do ErWin
Entidades
Criar subtipos de entidades existentes
Inserir textos no modelo, como comentrio
de entidades, relacionamentos e outros
Relacionamento de cardinalidade um para muitos
Relacionamento de cardinalidade muitos para muitos
Relacionamento de cardinalidade um para um
Auxilio para mudar os atributos de posio ou de entidades
Figura 3. Criao da Entidade Clientes
Figura 4. Editor de Atributos
Figura 5. Editor de Relacionamentos entre entidades
SQL
20 - Magazine
Criando os Relacionamentos
Para denir um tipo de relacionamen-
to, basta escolher um dos trs objetos j
mostrados da barra de ferramentas, clicar
na tabela pai e depois na tabela lho. Au-
tomaticamente, o relacionamento esco-
lhido visualizado. A gura 5 mostra o
editor de Relacionamento e suas funcio-
nalidades.
Ao dar um duplo clique sobre o
relacionamento esta tela automati-
camente aberta. Nela denimos a car-
dinalidade do relacionamento, assim
como a nulidade dos campos que esto
sendo relacionados.
A gura 6 mostra o modelo total-
mente criado, com suas entidades, atri-
butos e respectivos relacionamentos.
Criando o modelo fsico
Aps criar todo o modelo lgico ne-
cessria a denio dos atributos do mo-
delo fsico.
Para alternar entre os modelo fsico e
lgico basta selecionar na Combo situada
logo acima da barra de ferramentas, mos-
trada na Figura 1.
No modelo fsico iremos denir carac-
tersticas das entidades e atributos cria-
dos no modelo lgico de acordo com o
SGDB utilizado. Neste modelo temos
uma viso real das tabelas, colunas, pro-
cedures, triggers e outros objetos do nos-
so banco.
A gura 7 mostra o Editor de Coluna
do modelo fsico.
Conforme o observado no modelo f-
sico, no existem mais Entidades e Atri-
butos, e sim Tabelas e Colunas, nomes
comuns ao banco de dados. O editor de
coluna permite alterar o tipo e tamanho
de cada campo, assim como denir se ele
pode ou no receber valores nulos. Ain-
da pode-se utilizar a aba Comment para
comentar cada campo, assim como cada
tabela.
Criando o banco de dados a partir do
Modelo Fsico criado
Terminada a implementao neces-
srio criar os objetos denidos no ErWin
em um banco de dados. Para isso, preci-
so fazer o modelo apontar para o SGDB
a ser utilizado acessando-se o menu: Ser-
ver\Target Server. Alm da seleo do
SGDB e da verso do mesmo possvel
denir opes referentes ao tipo de da-
dos e a nulidade default para as colunas
denidas no modelo bem como mscara
para nomenclatura automtica de ndices
e tabelas. Vide Figura 9.
Aps as conguraes do Target Ser-
ver, basta acessar o menu Tasks\Forward
Engineer/Schema Generation para criar
o banco de dados. Vide Figura 10. Utiliza-
remos um banco criado no Oracle.
Como se pode ver a tela bem intuiti-
va. Na pasta Summary indicamos os ob-
jetos do nosso modelo ( tabelas, colunas,
ndices, triggers, etc.. ) que sero criados
no banco. Ao clicar no boto Generate,
o banco criado, automaticamente, com
todas as tabelas, campos e relacionamen-
tos demonstrados no modelo fsico.
A Figura 11 mostra os scripts com to-
dos objetos gerados no banco de dados a
partir do modelo implementado.
Criando um modelo a partir de um
banco existente
Em muitos casos, o banco de dados j
est totalmente implementado, sendo
necessria a criao do modelo a partir
deste. Este processo chama-se Enge-
nharia Reversa, e acessado pelo menu
Tasks\Reverse Engineer. A primeira tela
a ser exibida a ErWin Template Se-
lection, onde escolhe-se a opo Blank
Diagram para criar o modelo do zero.
Ao clicar em Next, depara-se com a tela
Select Taget Server, onde informado o
tipo de banco de dados a ser utilizado e
a sua verso. Clicando-se mais uma vez
no boto Next, surge a tela Set Options
onde so denidos procedimentos neces-
srios realizao da engenharia reversa.
Vide gura 12.
Figura 6. Modelo lgico com entidades, atributos e relacionamentos.
Figura 7. Editor de Coluna
Figura 8. Modelo Fsico com Tabelas, Colunas e Relacionamentos
Figura 9. Target Server Configurao do Banco de Dados Figura 10. Tela de gerao de banco de dados
Modelagem de Dados com ErWin
SQL
Magazine - 21
Deste modo, as opes da engenharia
reversa podem ser denidas como Da-
dos de Tabelas, Colunas, TableSpace,
Procedure, Triggers e outros. Na opo
Table/Views Owned By, foi seleciona-
da a opo Current User para importar
somente os objetos criados pelo usurio
conectado, poderamos importar objetos
de todos os usurios do banco ou de um
usurio diferente do atualmente conecta-
do desde que o mesmo tenha privilgios
no banco sucientes para isso. Ainda h
possibilidade de se escolher formas de in-
dexao e outras coisas mais.
Clicando-se no boto Next, visualiza-se a tela
de conexo, conforme mostrado na Figura 13.
Esta a tela que permite fazer a cone-
xo do modelo com o banco de dados
denido em Taget Server, mostrado na
Figura 9. Esta tela tambm apresentada
quando o banco criado a partir do mo-
delo. Nela so informados o Nome de
Usurio, a Senha e a Connect String que
repesenta a instncia onde ser efetuada
a conexo, neste caso, com o Oracle. Foi
criada uma Connection String, chamada
Comercio no TNSNAMES do Oracle
apontando para o banco de dados. Feito
tudo isso, s clicar no boto Connect
que o modelo criado automaticamen-
te, conforme mostrado na Figura 14.
Foi possvel, a partir de um banco exis-
tente, criar um modelo semelhante ao j
implementado, conforme j mostrado.
No processo de Engenharia Reversa no
ErWin, os modelos lgico e fsico so
criados automaticamente.
Criando vrios modelos fsicos a partir
de um nico modelo lgico
Ainda se pode, a partir de um modelo
lgico, criar modelos fsicos para acessar
bancos de dados diferentes do Oracle.
Ser criado um modelo fsico que acesse
um banco de dados Sql Server a partir
do mesmo modelo lgico criado para o
Oracle. Para isso basta acessar o Target
Server, mostrado na gura 9, mudar o
banco para o Sql Server, escolhendo a
verso, denindo os padres (como j
mostrado) e efetuar os procedimentos
mostrados nas guras 10 e 11.
A Figura 15 aponta como fica o modelo fsi-
co para acessar o banco de dados Sql Server.
Observa-se que alguns tipos de campos
mudaram, como os campos de valores
monetrios, que passaram de Number (7,2)
para Money, e os de data, que passaram de
Date para Date/Time. Com isso, conclui-
se que, a partir de um modelo lgico criado,
pode-se criar modelos fsicos para acessar
diversos bancos de dados, e este se adapta
situao de cada um automaticamente.
importante ressaltar que o modelo
lgico continua o mesmo.
Concluso
Estes so apenas alguns dos muitos
recursos que o ErWin oferece para mo-
delagem de dados. possvel criar Pro-
cedures, Triggers, Views, alterar o banco
de dados, alterar o modelo a partir de al-
guma alterao feita no banco, criar o di-
cionrio de dados, etc. A implementao
de um modelo antes do incio do desen-
volvimento de um sistema garante uma
viso ampla e unicada do mesmo, facili-
tando em muito a denio da regras de
negcio, a implementao, manuteno
e anlise dos procedimentos, garantindo
inclusive a continuidade do trabalho no
caso de alteraes na equipe de desenvol-
vimento com pouco ou nenhum retraba-
lho uma vez que o modelo disponibiliza
de forma clara e objetiva uma documen-
tao de toda infra-estrutura do sistema.
Figura 11. Script com o cdigo de criao das tabelas de-
fnidas no modelo.
Figura 12. Tela de opes da Engenharia
Figura 13. Tela de Conexo com o Oracle.
Figura 15. Modelo Fsico para acessar o Sql server.
Figura 14. Modelo criado apartir de um banco de dados existente usando a
Engenharia Reversa
SQLAutor
Cleilson Santos Analista de Sistemas, trabalha no
Projeto SEP (Sistema de Engenharia de Poo) e SIRR
(Sistema de Reserva e Reservatrio) na Petrobrs.
Pode ser contatado pelo e-mail cleilsonsantos@uol.com.br
UML
Introduo
!"# Gustavo Viegas
o !naI dos anos 80 e incio dos anos 90, tnhamos muitos con-
"itos de de!nies e nomencIaturas na rea de modeIagem. A es-
coIha para utiIizao de um determinado padro era de!nido mais
peIo "gosto pessoaI do que por fatores tcnicos oferecidos. Ento,
os trs mais respeitados nomes nesse campo, cada quaI com seu
conceito e impIementao de modeIo, Ivar Jacobson (OOSE - Object
Oriented Software Engineering), Grady Booch (The Booch Method)
and James Rumbaugh (OMT -Object ModeIing Technique) decidi-
ram por !m aos debates e trabaIhar juntos na de!nio de um mod-
eIo nico que veio a ser a UML.
N
A UML permite que voc desenhe
uma planta do seu sistema. A compara-
o ideal a de um construtor que vai rea-
lizar um projeto sem antes ter toda a planta
que dena estrutura a ser construda. A ex-
perincia do construtor garante, at certo
ponto, o sucesso do projeto. Mas, com
certeza, uma vez feito o planejamento, o
clculo estrutural, o desenho da planta, a
garantia de sucesso antes, durante e depois
da efetivao da construo incompara-
velmente maior. O mesmo acontece com
um projeto de software. A experincia
do desenvolvedor ou analista, no pode
substituir a necessidade de um projeto que
dena uma planta da soluo como um
todo. Esta planta garante, em todas as
fases do projeto, seja na denio, desen-
volvimento, homologao, distribuio,
utilizao e manuteno do mesmo, uma
maior clareza e objetividade para execu-
o de cada ao, e, com certeza, quanto
maior a soluo, maior a necessidade de
um projeto denido adequadamente. Des-
ta forma, a UML uma linguagem padro
para visualizao, especicao, constru-
o e documentao de um aplicativo ou
projeto de software, e objetiva aumentar a
produtividade, otimizar as etapas que en-
volvem o desenvolvimento de um sistema,
aumentando assim a qualidade do produto
a ser implementado. Ela independe da fer-
ramenta em que o aplicativo ser desenvol-
vido. A idia e prover uma viso lgica de
todo o processo de forma a facilitar a imple-
mentao fsica do mesmo.
A UML disponibiliza, atravs de concei-
tos, objetos, smbolos e diagramas, uma
forma simples, mas objetiva e funcional, de
documentao e entendimento de um sis-
tema. Voc pode utilizar os diagramas e ar-
quivos que compe um modelo UML para
o desenvolvimento, apresentao, treina-
mento e manuteno durante todo o ciclo
de vida da sua aplicao. Ela mais com-
pleta que outras metodologias empregadas
para a modelagem de dados pois, tem em
seu conjunto todos os recursos necessrios
para suprir as necessidade de todas as etapas
que compe um projeto, desde a denio,
implementao, criao do modelo de ban-
co de dados, distribuio, enm, proporcio-
nando sem qualquer outra ferramenta ou
metodologia adicional, um total controle
IIntroduo UML
SQL
Magazine - 23
do projeto.
A UML implementa uma modelagem
com uma viso orientada a objetos. Atra-
vs dela podemos denir as classes que
compe a nossa soluo, seu atributos,
mtodos e como elas interagem entre si.
Apesar da UML ter como base a orien-
tao a objetos, no signica que a fer-
ramenta e a linguagem utilizada para a
implementao do modelo seja tambm
orientada a objetos, embora seja reco-
mendvel. Este artigo no ir explorar os
conceitos de orientao a objetos, e sim
a implementao de um modelo UML
simples, para incio da documentao de
um sistema, utilizando dois diagramas
implementados pela UML que so o
Diagrama de Casos e Uso e o Diagra-
ma de Classes. Os diagramas tm como
objetivo representar, atravs de um con-
junto de elementos, como o sistema ir
funcionar e como cada pea do sistema
ira trabalhar e interagir com as outras.
Outra vantagem vem da facilidade de lei-
tura dos diagramas que compe a UML,
alm da facilidade de confeccion-los,
pois existem inmeras ferramentas para
modelagem de dados orientados a ob-
jetos (ferramentas Case), dentre elas o
Rational Rose, o Model Maker, e o Posei-
dom UML. Alm dos diagramas citados
a UML disponibiliza outros diagramas,
dentre os quais podemos citar o Diagra-
ma de Objetos, Diagrama de Seqncia,
Diagrama de Colaborao, Diagrama de
Estado, Diagrama de Atividade e Diagra-
ma de Componentes.
Entendendo UML a partir de um ex-
emplo prtico
Utilizaremos o Poseidon UML para im-
plementar o modelo do exemplo. O Po-
seidon UML uma ferramenta case que
suporta os principais diagramas UML e
desenvolvido em Java. Tem algumas fa-
cilidades no que se refere a interao com
o Java podendo, a partir de um modelo
gerar o cdigo Java das classes denidas
no mesmo e tambm suporta a Enge-
nharia Reversa, que gerar o modelo a
partir das classes implementadas. O Po-
seidon tem sua verso free e pode ser bai-
xado em www.gentleware.com.
O modelo aqui proposto comea a ser
implementado a partir de um problema
real que a necessidade de um cliente. O
problema proposto o seguinte:
Desenvolver um sistema para um
caixa eletrnico onde permitido a um
cliente realizar quatro tipos de opera-
es: a de consulta de saldo, solicitao
de extrato, depsito e saque. Esse mes-
mo caixa eletrnico deve ser abastecido
de dinheiro e ter os depsitos recolhidos
por um funcionrio do banco
Para denio do modelo do nosso sis-
tema, iremos implementar primeiro um
Diagrama de Casos de Uso ou Use Cases.
Os objetivos principais de um diagrama
de Casos de Uso so:
Descrever os requisitos funcionais do
sistema de maneira uniforme para usu-
rios e desenvolvedores;
Descrever de forma clara e consisten-
te as responsabilidades a serem cumpri-
das pelo sistema, formando a base para a
fase de projeto;
Oferecer as possveis situaes do mundo
real para a fase de testes do sistema.
Os elementos bsicos de um diagrama de
caso de uso so: ator, caso de uso, interao
e sistema, todos ilustrados na gura 1.
Um ator uma entidade externa ao
sistema que de alguma forma participa
de um caso de uso. Um ator pode ser
um ser humano, mquinas, dispositivos,
ou outros sistemas. Atores tpicos so
cliente, usurio, gerente, computador,
impressora, etc. Os atores representam
um papel e iniciam um caso de uso que
aps executado, retorna um valor para o
ator. Um caso de uso especica um ser-
vio que ser executado ao usurio e
composto por um ou mais cenrios. Um
cenrio uma narrativa de uma parte do
comportamento global do sistema. Para
o problema proposto, o Diagrama de Ca-
sos de Uso pode ser implementado como
mostrado na gura 2.
No Diagrama de Casos de Uso imple-
mentado o sistema o Caixa Eletrnico,
os atores representam o Cliente e o Fun-
cionrio do banco. O Cliente interage
com os Casos de Uso consulta de saldo,
solicitao de extrato, depsito e saque e
o Funcionrio interage com os Casos de
Uso Abastece de dinheiro e Recolher en-
velopes de depsitos.
Para melhor entendimento do Diagra-
ma de Casos de Uso necessria a descrio
textual do uxo do Caso de Uso (principal
e alternativo) e do Cenrio ou dos Cenrios
que compe cada Caso de Uso. Iremos
descrever o Use Case Solicitao de Extrato
bem como o Cenrio que o compe.
Aps a descrio textual de todos os
Casos de Uso e respectivos Cenrio, nos-
sa documentao envolvendo o Diagra-
ma de Casos de Uso est completa.
O segundo diagrama a ser utilizado
para soluo do problema proposto
o Diagrama de Classes. Este diagrama,
contm as classes que caracterizam os
objetos do nosso sistema. As classes so
extradas a partir da anlise do Diagrama
de Casos de Uso e representam os com-
ponentes de interao do nosso sistema e
Figura2
SQL
24 - Magazine
como eles se relacionam. Vamos implementar um Diagrama
de Classe, a partir do Diagrama de Casos e Uso implementado,
com a denio das classes Cliente, ContaBancaria e Lana-
mentos da Conta. ( Vide Figura 4 )
Uma classe representada por um retngulo slido com trs
partes: a primeira para o nome da classe; outra para os atributos
da classe ( que podem ser vistos como caractersticas da clas-
se); e a terceira para a declarao das operaes denidas para a
classe. A Figura 3 mostra a notao UML para classes.
Atravs da classe Cliente implementada no diagrama da -
gura 4, ns denimos as caractersticas do nosso cliente (neste
caso um Identicador e um Nome que representam os atribu-
tos da classe), seu relacionamento com a classe ContaBancaria
que de 1 para muitos ( isto representa a cardinalidade do re-
lacionamento ) e denimos uma operao realizada pela classe
que ObterContaBancaria(). A mesma anlise deve ser feita
para a classe ContaBancaria e LancamentoConta.
Com esse diagrama, j podemos identicar elementos que
existiro em nosso sistema, suas carctersticas e operaes. Es-
sas denies esto contidas nas classes. Essas classes tornam-se
reais em nosso sistema a quando so manipuladas por ele e, a
partir da, so conhecidas como objetos, pois suas caractersticas
passam a ter um valor e elas comeam a interagir com outros
objetos das classes relacionadas.
Concluso
A UML se mostra como parte essencial no ciclo de vida
de uma aplicao. Foi mostrado, utilizando apenas dois dia-
gramas, toda a funcionalidade operacional de um sistema bem
como a denio de elementos internos referentes ao desen-
volvimento do mesmo. Esses dois diagramas fazem parte da
documentao do sistema, e podem ser utilizados para uma
apresentao da soluo para o requisitante antes da imple-
mentao da mesma, visualizao dos processos que o sistema
ir disponibilizar, denio de elementos inerentes ao desen-
volvimento como estrutura de telas, procedimentos operacio-
nais, referncia para criao de objetos de persistncia em um
banco de dados, etc.
Existem outros elementos a explorar, outros diagramas, ou-
tros tipos de relacionamentos e documentao, mas este foi
um passo inicial para conhecer todos os recursos que a UML
disponibiliza e aumentar a qualidade do desenvolvimento de
nossas aplicaes.
Caso de Uso Solicitao de Extrato
1) Descrio textual do uxo principal do Use Case Solicita-
o de Extrato
Este Caso de Uso inicia-se quando o Cliente escolhe a opo Extrato aps passar o carto no caixa
eletrnico e ter a sua conta validada. Aps a validao da conta o sistema pede ao cliente para escolher
dentre as opes de saldo:
Extrato Rpido - O subuxo A1 (Imprimir Extrato Rpido) executado.
Extrato no Perodo - O subuxo A2 (Imprimir Extrato no Perodo) executado.
Sair - O Caso de Uso encerrado, o sistema volta a tela principal e solicita que o cliente passe o
carto.
2) Descrio textual dos Subuxos alternativos associados a
este use case
A1 - Imprimir Extrato Rpido
O sistema solicita que o cliente entre com a senha para autorizar a impresso do extrato (o sub-
uxo B1 - Solicitar e Validar de senha alfabtica - executado). Caso a senha seja validada a conta
do cliente consultada e o extrato impresso (o subuxo B2 Imprimir Extrato - executado). O
sistema volta a tela principal e solicita que o cliente passe o carto.
A2 - Imprimir Extrato no perodo
O Sistema solicita que o cliente informe a data inicial e nal pra impresso do extrato. Em seguida
O sistema solicita que o cliente entre com a senha para autorizar a impresso do extrato (o sub-
uxo B1 - Solicitar e Validar de senha alfabtica - executado). Caso a senha seja validada a conta
do cliente consultada de acordo com o perodo e o extrato impresso (o subuxo B2 Imprimir
Extrato - executado). O sistema volta a tela principal e solicita que o cliente passe o carto.
B1- Solicitar e Validar de senha alfabtica
O sistema solicita que a senha do carto seja digitada. Consulta a conta do cliente validando a
senha digitada. Caso a senha no seja vlida o sistema informa na tela e pede mais uma tentativa.
O sistema verica a quantidade de erros de validao de senha ocorridos no dia e informa que
aps 3 tentativas erradas o carto do cliente ser bloqueado e informa o nmero de tentativas
que o cliente ainda dispe. O Cliente pode sair da operao e voltar para a tela inicial, ou tentar
novamente. Caso a senha seja vlida, a operao prossegue. Caso contrrio, aps trs tentativas o
carto do cliente bloqueado.
B2- Imprimir Extrato
O sistema verica se a impressora do caixa eletrnico est ativa e se a mesma possui papel. Caso
apresente um dos problemas citados, o sistema mostra uma mensagem solicitando que o cliente
realiza a operao em outro caixa eletrnico e volta para a tela inicial e avisa do erro sempre que
uma operao que envolva impresso for solicitada. Caso contrrio, o contedo solicitado para
impresso impresso.
3) Cenrio Primrio
Jos dirige-se ao caixa eletrnico e passa o carto na mquina. O Sistema, aps validar a conta
exibe as opes disponveis. Jos seleciona a opo de Solicitao de Extrato. Em seguida
Jos seleciona a opo de Extrato no Perodo. Informa a data inicial e nal. O Sistema solicita a
senha a Jos. Aps Jos digitar a senha e conrmar a operao, o Sistema valida a senha, consulta
a conta de Jos e imprime o extrato de movimentao da conta no perodo selecionado.
4) Cenrio Secundrio
O Sistema, ao vericar os requisitos para impresso, retornou que a impressora estava sem papel.
Jos, aps ser informado do problema pelo sistema, dirigi-se a outro caixa eletrnico e inicia
novamente a operao.
Figura4
Figura3
SQLAutor
Gustavo Viegas editor da revista SQL Magazine . Pode
ser contactado pelo email: gustavo@sqlmagazine.com.br
IIntroduo UML
SQL
Magazine - 25
ANUNCIO
DeIphi, VB.Net e Java
Como conectar Front-Ends
!"# Pedro Henrique
PauIo Correia
Gustavo Viegas
tuaImente no podemos negar que deparamos diariamente
com diversas formas de armazenamento e manipuIao de dados.
Isto independe do Iugar que estamos ou do que fazemos. Se vamos
a um mercado, temos computadores que registram as vendas, m-
quinas de consuIta de preos de produtos, terminais para saques
eIetrnicos, mquinas de carto de crdito, entre outros. comum
encontrarmos em diversas reas da nossa vida a presena de m-
quinas e apIicativos que, de aIguma forma, Iidam com dados arma-
zenados, dinamizando e faciIitando seu acesso.
A
comum encontrar aplicaes que inte-
ragem com algum tipo de informao ou
conjunto de informaes. Independente
da linguagem que foram desenvolvidas,
elas visam garantir aos seus usurios segu-
rana, clareza e objetividade na recupera-
o e manuteno do seu contedo. Mas
antes de falarmos dos sistemas que fazem
o usurio interagir diretamente com os
dados, visualizando-os e manipulando-os
de forma coerente e usual, importante
termos conhecimento prvio de que as
informaes manipuladas por eles, em sua
maioria, esto armazenadas em um Siste-
ma Gerenciador de Banco de Dados, ou
simplesmente SGBD.
Este SGBD deve garantir que os dados
estejam armazenados de forma organiza-
da, permitindo atualizaes, incluses e ex-
cluses e garantindo toda segurana e con-
sistncia. Por denio temos que SGDB
um software (ou conjunto de Softwares)
responsvel pelo gerenciamento (armaze-
namento e recuperao) dos dados no ban-
co de dados.
Um SGBD pode gerenciar um ou mais
bancos de dados. Mas como denir um
banco de dados? Se ns temos um arquivo
contendo a tabela de preos dos produtos
de uma indstria, ns temos um banco de
dados? Conceitualmente, uma banco de da-
dos tem de representar uma coleo de da-
dos organizados de forma coerente e com
um signicado real. Uma tabela de preos,
por si s, no tem um signicado real sem
que existam outras tabelas que interajam
com ela. Se ns temos uma tabela de pre-
os, uma tabela de clientes, uma tabela de
pedidos e uma tabela de produtos, j po-
demos montar um quadro que traduz um
processo de atendimento a clientes, venda e
controle de estoque, ou seja, uma situao
real armazenada num banco de dados.
A forma mais comum de intera-
o entre usurio e banco de dados ocor-
re atravs de sistemas especcos, que por
sua vez acessam o volume de informaes
geralmente atravs da linguagem SQL
(Strutured Query Language), padro entre
os SGBDs. A ferramenta de desenvolvi-
Conectando Front-Ends com Delphi, VB.Net e Java
SQL
Magazine - 27
mento utilizada para a implementao
desses sistemas to importante quanto
o SGBD que gerencia as informaes a
serem acessadas por eles. Iremos analisar
trs grandes ambientes para desenvolvi-
mento: Delphi, VB .Net e Java.
Por que o Delphi?
O Borland Delphi uma grande opo
para o desenvolvimento de sistemas em
que necessrio utilizar servidores de
Banco de Dados SQL. Inicialmente, im-
portante frisar que o Delphi possui um
suporte bem amplo aos Servidores SQL
encontrados hoje no mercado, atravs
da implementao de diversos drivers e
engines. Alguns so da prpria Borland,
como o DbExpress e a obsoleta BDE.
Outros so de terceiros, como o ADO
(ActiveX Data Objects) da Microsoft. Um
driver geralmente uma dll, um conjun-
to de funes utilizadas para acesso e ma-
nipulao de dados em um banco. Um
engine um aplicativo que faz a interfa-
ce ou traduo das mensagens enviadas
NOTA
Para obter mais informaes sobre o
ADO, acesse o Microsoft Universal Data
Access no endereo: http://www.micro-
soft.com/data. L possvel baixar a ver-
so mais recente do MDAC (conjunto de
componentes que, entre outros recursos,
inclui o ADO).
pela aplicao para o driver, de forma
que seja transparente para a aplicao o
tipo de driver que est sendo utilizado
para acesso ao banco. Uma das grandes
novidades do novo Delphi o suporte
atravs da dbExpress ao servidor Micro-
soft SQL-Server 2000.
Neste artigo usaremos o DbExpress
e o ADO como engines de acesso e o
banco de dados ser o Northwind do Mi-
crosoft SQL-Server 2000. O ADO, sendo
desenvolvido pela Microsoft, se caracte-
riza como uma tima opo para cone-
xo ao MSSQL Server, alm de facilitar a
distribuio da aplicao, uma vez que
suportado nativamente por diversas ver-
ses do sistema operacional Microsoft
Windows (Win 98 SE, Win ME/2000
Professional, Win XP Home/Professio-
nal). Exemplicaremos o mesmo acesso
utilizando o DBExpress. Iremos vericar
que as diferenas de programao de um
Engine de acesso para outro no Delphi
so poucas. O que muda mais o deploy
(distribuio) e a performance.
Figura1. Uma nova aplicao no Delphi
Figura2. Componentes SQL Connectiom
Figura3. Confgurao do SQL Connection
Figura4. SQLConnection confgurado
Exemplo em Borland Delphi 7
Primeiro iremos exemplicar a cone-
xo utilizando DbExpress.
Passo 1 Iniciando uma nova aplicao.
Clique menu File / New / Application
como mostra a gura 1
Passo 2 Congurando a conexo
Adicione ao formulrio form1 o com-
ponente SQLConnection, localizado na
paleta de componentes DbExpress. Em
seguida, clique com o boto inverso do
SQL
28 - Magazine
mouse no componente e selecione Edit
Connection Properties, como mostra a
gura 2.
Ser exibida uma caixa de dilogo
para congurao das propriedades de
conexo com o banco de dados. Vamos
utilizar a conexo denominada MSSQL-
Connection (poderamos adicionar uma
nova conexo clicando no boto +,
selecionando o driver MSSQL e dando
um nome para a mesma) e congurar
em Connection Settings os demais par-
metros:
HostName Nome ou IP da mquina servidora
Database - Nome do banco de dados no SQL Server
User_Name- Nome do usurio
Password - Senha
Para testar a conexo clique no boto
Test Connection (ltimo da barra de fer-
ramentas com um cone de engrenagem).
A gura 3 mostra a janela preenchida.
A conexo aberta atravs da pro-
priedade Connected do componente
SQLConnection (as propriedades so
acessadas atravs do Object Inspector).
Podemos alterar esse valor em tempo de
design ou tempo de execuo. Altere a
propriedade LoginPrompt para false para
desabilitar a caixa de dilogo de login do
banco. Neste caso, o usurio e senha j
esto sendo passados diretamente pelo apli-
cativo. Observe as alteraes na gura 4.
Passo 3 Acessando os dados
Acessaremos a tabela Employees no
banco tomado como exemplo. Para isso,
insira um componente TSQLQuery, lo-
calizado tambm na paleta DBExpress.
Devemos conectar o SQLQuery ao
objeto SQLConnection. Selecione a pro-
priedade SQLConnection do SQLQuery
e aponte para SQLConnection1. Em
seguida denimos o cdigo da consulta
SQL atravs da propriedade XXXX. Para
executar a consulta em tempo de proje-
to basta alterar a propriedade Active do
componente para true. Vide gura 5.
Passo 4 Manipulando os dados e exe-
cutando a aplicao
Para permitir que o usurio manipule
os dados selecionados, utilizaremos um
componente DbGrid. Este componente
est localizado na paleta Data Controls.
Uma vez adicionado ao formulrio ne-
cessrio que esse componente acesse os
dados retornados pelo SQLQuery con-
gurado no passo 3. Para isso, utilizaremos
trs outros componentes: ClientDataSet,
DataSetProvider e DataSource que esto
localizados na palheta Data Access. Esses
componentes devem ser adicionados ao
formulrio e congurados da seguinte
forma:
DataSetProvider - A propriedade DataSet
aponta para o SQLQuery confgurado no passo 3.
ClientDataSet A propriedade ProviderName
aponto para o objeto DataSetProvider.
DataSource A propriedade DataSet aponta
para o ClientDataSet confgurado no passo an-
terior.
Por m, para que os dados sejam exi-
bidos no grid adicionado ao formulrio,
devemos apontar a propriedade Data-
Source do grid para o objeto DataSour-
ce1, alterarando a propriedade Active do
ClientDataSet para true. Dessa forma os
dados sero exibidos no grid, estando
prontos para serem manipulados confor-
me mostra a gura 6.
O ClientDataSet e o DataSetProvider
fazem parte de uma implementao da
Borland denominada DataSnap (antigo
MIDAS) que disponibiliza para o desen-
volvedor o que chamamos de DataSet
Desconectado. A partir de um DataSet
Figura5. Confgurando o SQLQuery
Figura6. Projeto com DBExpress fnalizado
Figura7. Componente ADOConnection
Conectando Front-Ends com Delphi, VB.Net e Java
SQL
Magazine - 29
qualquer, que no exemplo foi o SQL-
Query, o DataSetProvider monta um
conjunto de dados e envia para o Clien-
tDataSet. Feito isso, o SQLQuery, que
o DataSet de origem, no mais utiliza-
do, bem como a conexo com o banco,
e os dados podem ser manipulados sem
sobrecarga da rede e conseqente degra-
dao da performance da aplicao. Aps
o trmino da manipulao dos dados,
necessrio a execuo do mtodo Ap-
plyUpdates do ClientDataSet, para que
sejam aplicados no banco. No exemplo,
o evento OnClick do boto Aplica Al-
teraes deve ser implementado com o
seguinte cdigo:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
ClientDataSet1.ApplyUpdates(0);
end;
O parmetro do mtodo indica o n-
mero de erros que sero desconsidera-
dos antes de ser gerada uma exceo na
aplicao. Neste caso o parmetro indica
que no podem ocorrer erros no proces-
samento.
Para cancelar as alteraes efetuadas
necessrio a execuo do mtodo Cance-
lUpdates. Neste caso, o evento OnClick
do boto Cancela Alteraes deve ser
implementado com o seguinte cdigo:
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
ClientDataSet1.CancelUpdates;
end;
Outra grande vantagem do Client
DataSet e do DataSetProvider a facili-
dade que eles disponibilizam para que, se
for necessrio, seja efetuada uma troca
do engine de acesso ao banco. O mesmo
programa feito com DBExpress ser uti-
lizado para exemplicar o acesso a dados
utilizando ADO.
ACESSO AO SQL SERVER COM ADO
Passo 1 Trocando o componente de
conexo com o banco de dados.
Em primero lugar os componentes
SQLConnection e SQLQuery devem ser
Figura8. Confgurando ADOConnection
excludos do formulrio para que pos-
samos adicionar os componentes Ado-
Connection e AdoQuery localizados na
paleta ADO.
No ADO o componente responsvel
pela conexo o AdoConnection. Aps
adicion-lo no formulrio devemos con-
gur-lo atravs do acesso ao menu Edit
ConnectionString, conforme mostra a
gura 7.
A tela exibida por esta opo permite
que utilizemos um Data Link File ou
uma Connection String (gura 8). Utili-
zaremos esta ltima de forma a mostrar
todo o processo de congurao da cone-
xo. A vantagem de usar Data Link File
que os parmetros cam armazenados
em um arquivo externo, possibilitando
alteraes sem a necessidade de recom-
pilao do aplicativo.
Para montar a Connection String acessa-
remos o assistente atravs do boto build
da caixa de dilogo exibida (gura 8).
Em primeiro lugar devemos con-
gurar o Provider que ir gerenciar a
conexo com o banco de dados. Esco-
lheremos o Microsoft OLE DB Pro-
vider for SQL Server (gura 9). Aps
esta seleo devemos informar na pasta
Connection os parmetros para que a
conexo seja efetuada. Indique o nome
do servidor de banco de dados em
1. Select or enter a server name, os
dados para login em 2. Enter the infor-
matino to log on to the server e o banco
de dados a ser acessado em 3. Select the
database on the serever. importante
que a opo Allow saving password
esteja marcada para evitar erros na cone-
xo uma vez que os parmetros de login
(usurio e senha) j esto denidos. En-
cerradas as conguraes podemos testar
a conexo atravs do boto Test Connec-
tion e em seguida encerrar o assistente
atravs do boto ok (vide gura 10).
Passo 2 Adicionando o componente
para acesso aos dados
No ADO o componente a ser utilizado
para substituir o SQLQuery o ADO-
Query que est na paleta ADO. Uma vez
adicionado ao formulrio, altere a pro-
priedade Connection apotando-a para
o objeto AdoConnection1. Altere a pro-
priedade SQL de forma anloga ao passo
3 do exemplo com DbExpress.
Feito isso, basta alterar a propriedade
DataSet do DataSetProvider apontando
para o ADOQuery congurado anterior-
mente. Altere a propriedade Active do
Figura9. Escolhendo o Provider Figura10. Montando o ConnectionString
SQL
30 - Magazine
ClientDataSet para true e pronto! (Vide
gura 11).
Por que o VisualBasic.Net?
O Visual Basic agora faz parte de um
novo conjunto de ferramentas para de-
senvolvimento de aplicaes: a estratgia
.Net. O .Net uma nova plataforma da
Microsoft, multi-linguagem, totalmente
formulada para lidar com XML e Web
Services e voltada para aplicaes multi-
dispositivos. Nesta plataforma, o ADO
tambm ganhou uma nova implemen-
tao chamada ADO.Net e este engine
que iremos focalizar.
O novo ADO.Net foi desenvolvido
para ser uma verso bem diferente das
anteriores, focando a completa compre-
enso do XML, o uso de DataSets des-
conectados e uma implementao mais
leve para a Web.
Exemplo em Microsoft VisualStudio.
Net (utilizando VB.Net)
Inicie o VisualStudio.Net e clique no
menu File|New|Project. Na caixa de
dilogo, clique em Visual Basic Projects
e escolha Windows Applications na caixa
Templates. Digite o nome do projeto e
clique em OK.
Aps estes passos o VisualStudio.Net
ir preparar o ambiente para o desenvol-
vimento de um projeto Visual Basic.
No ADO.Net, assim como nas verses
anteriores do ADO, existe o objeto Con-
nection que permite a conexo com o
Banco de Dados. Esse objeto, atualmen-
te, no um objeto nico para qualquer
tipo de conexo como antes. Agora ele
implementado em diversas classes que
utilizam a interface IdbConnection em
comum. Usaremos o SQLConnection,
um componente Connection implemen-
tado para se conectar ao MSSQL-Server
verso 7x e superiores, para acessar o
banco Northwind que acompanha o
MSSQL-Server 2000.
Na ToolBox no lado esquerdo da apli-
cao clique na guia Data e insira no
formulrio um componente SQLCon-
nection. Na caixa Properties clique na
propriedade ConnectionString e selecio-
ne New Connection... (Figura4). Ser
exibida a janela padro de congurao
de ConnectionString do ADO. O exem-
plo no Delphi 7 utiliza a mesma janela e
explica como congurar a ConnectionS-
tring para acessar o banco Northwind
em detalhes.
Congurado o componente de cone-
xo necessrio informar de onde sero
requisitados os dados. Esta requisio
feita por um objeto Command. Porm,
assim como o objeto Connection, o
Command possui diversas verses que
variam de Provider para Provider. Por
exemplo, para acessar o SQL-Server, o
ADO.Net possui um Provider espec-
co que, para ser utilizado, precisa de um
SQLConnection pertencente ao names-
pace System.Data.SqlClient (implemen-
tao que aproveita recursos especcos
do MS-SQL) e para se executar uma
consulta no Banco deve-se utilizar um
objeto SQLCommand, ou mesmo um
SQLDataAdapter, tambm do mesmo
namespace (ou seja, tambm especico
para o MS-SQL). O que implica que ne-
cessrio importar este namespace com o
comando Imports.
Na guia Data da ToolBox clique no
componente SQLDataAdapter e insira-o
no formulrio. Automaticamente o Visual
Studio ir apresentar o Data Adapter Con-
guration Wizard, que permite congu- Figura11. Projeto com ADO fnalizado
Figura12. Caixa de Dilogo de escolha do projeto no VisualStudio.NET
Figura13. SQLConnection Wizard
Conectando Front-Ends com Delphi, VB.Net e Java
SQL
Magazine - 31
rar de forma simples o SQLDataAdapter.
Este componente tem como funo facili-
tar o gerenciamento das requisies com o
Servidor em relao ao DataSet (conjunto
de registros), armazenando consultas SQL
atravs das propriedades: DeleteCom-
mand, InsertCommand, SelectCommand
e UpdateCommand que permitem ao
desenvolvedor especicar comandos SQL
para controlar de forma otimizada e pa-
dronizada pelo ADO.Net os conjuntos de
registros armazenados no Servidor.
Utilizando o Wizard possvel con-
gurar uma consulta simples e entender
como se utiliza o SQLDataAdapter no
VisualStudio.Net. Na primeira tela clique
no boto Next, onde ser exibido o
passo: Choose Your Data Connection.
Esta tela permite congurar que conexo
ir requisitar os dados. Na caixa Combo
pode-se especicar a conexo que j foi
criada pelo componente SQLConnec-
tion inserido anteriormente. Aps clique
no boto Next. Em Choose a Query
Type especicamos como os dados se-
ro requisitados. Abaixo, segue uma pe-
quena descrio de cada opo:
- Use SQL statements: Permite especi-
car uma Query SQL que faa o retorno
dos dados. O prprio Wizard ir gerar os
comandos Delete, Update e Insert basea-
dos nesta Query.
- Create New Stored Procedures: Per-
mite criar novos procedimentos armaze-
nados a partir de uma Query SQL para os
comandos Insert, Update e Delete.
- Use Existing Stored Procedures: Per-
mite especicar quais sero os procedi-
mentos armazenados que faro os co-
mandos: Select, Insert, Update e Delete
do conjunto de registros especcos para
cada situao.
Ser utilizada a opo Use SQL state-
ments e a congurao da Query com o
comando SQL abaixo:
SELECT orderid, customerid, orderdate,
shippeddate, shipname, shipregion, shipcountry
FROM Orders
Conforme visto no exemplo acima,
ser requisitado ao banco de dados ape-
nas alguns campos da tabela de pedidos.
Este comando SELECT ser inserido na
propriedade SelectCommand do SQL-
DataAdapter.
Clique em Next. Sero gerados no
Wizard os comandos SQL de acordo
com o SELECT para congurar o com-
ponente automaticamente. Para nali-
zar, clique no boto Finish.
Pronto! Foi criado um componente
SQLDataAdapter que permite fazer con-
sultas e, ainda dentro do padro ADO.
Net, modicar os dados selecionado,
atravs da SQL gerada pelo Wizard.
Os controles Data-Aware do .Net para
exibir dados necessitam que estes sejam
recebidos de um DataSet. Para gerar um
DataSet, clique com o boto direito na
gura do SQLDataAdapter no Form De-
signer e selecione Generate DataSet.
Ser visualizada uma caixa de dilogo
onde, pressionando-se o boto OK, ir
aparecer o componente DataSet.
Em seguida insira um controle Data-
Grid. Linke a propriedade DataSource ao
DataSet recm-gerado e DataMember a
tabela Orders, visualizando os dados no
grid da mesma forma que no Delphi.
Por que o Java?
O Java tem demonstrado seu poder
com relao ao mundo multi-platafor-
ma. Cada vez mais conhecido no Brasil,
muito se tem produzido com Java. Um
ponto forte do Java o fato de grandes
empresas estarem investindo nele, como
as gigantes Oracle e IBM. Uma das formas
de conexo de uma aplicao Java com um
banco de dados atravs da API JDBC.
O JDBC, Java Database Connectivi-
ty, uma API Java para conexo com
SGDBs diversos e execuo de expres-
ses SQL. Sendo mais especco, JDBC
um conjunto de classes e interfaces que
permitem acesso a bases de dados rela-
cionais de maneira uniforme, numa solu-
o similar ao ODBC. Existem inmeras
implementaes de drivers de bancos de
dados compatveis com JDBC que se en-
quadram em quatro categorias de solu-
es, denidas pela JavaSoft:
Tipo 1 - Ponte JDBC / ODBC
A ponte JDBC / ODBC foi desenvol-
vida em conjunto pela JavaSoft e a In-
tersolv, de modo a aproveitar a grande
quantidade de drivers ODBC que j exis-
tem instalados nas mquinas. Aplicao
Java faz uma chamada ao JDBC que por
sua vez faz essa chamada ao ODBC e
este API de acesso nativa do banco.
Tipo 2 - Driver Java Parcial
+ API Nativa
Nesta soluo o driver ODBC
eliminado e o driver JDBC conver-
te as chamadas JDBC em chama-
das diretas API nativa do banco.
Assim como os drivers do Tipo 1
necessria a instalao de apli-
caes cliente do banco de dados
na mquina onde est sendo exe-
cutado o aplicativo.
Tipo 3 - Driver 100% Java +
Protocolo de Rede (arquitetu-
ra em 3 camadas)
Nesta congurao o driver JDBC con-
verte as chamadas JDBC em um protoco-
lo de rede independente (independente
do banco de dados). Estas chamadas so
convertidas, ento, em chamadas API
nativa do banco por um servidor inter-
medirio (middleware). Essa arquitetura
na verdade consiste de trs camadas.
Tipo 4 - Driver 100% Java:
Nesta soluo o driver converte as cha-
madas JDBC diretamente para o protoco-
lo de rede utilizado pelo banco de dados.
Escritos somente em Java, estes drivers
no necessitam de ODBC nem de API
nativa, gerando um enorme ganho de
desempenho e permitindo o desenvolvi-
mento de aplicaes 100% Java.
Exemplo em Java
Utilizaremos para acessar o mesmo
banco de dados dos exemplos em Delphi
e VB .Net (NorthWind do SQL Server)
um Driver JDBC do tipo 4 denominado
Microsoft SQL Server 2000 JDBC Dri-
ver, que pode ser baixado no em http://
msdn.microsoft.com/downloads/de-
fault.asp?URL=/downloads/sample.
asp?url=/MSDN-FILES/027/001/779/
msdncompositedoc.xml.
Para exemplicar a conexo em Java,
utilizaremos um console application
onde ser mostrado alm da conexo a
execuo de um comando SELECT e o
display dos dados retornados na tela. As
classes utilizadas e os procedimentos se-
ro explicados em seguida. Vale a pena
ressaltar que este exemplo mostra uma
das formas de acesso e manipulao de
dados em Java (listagem1.).
NOTA
Nesta parte do Wizard pode-se utilizar
o Query Builder do VisualStudio.Net,
uma ferramenta muito interessante
para desenvolver consultas SQL.
SQL
32 - Magazine
Inicialmente declarado um objeto
que ir representar a conexo com o ban-
co de dados, neste exemplo chamado de
conn, do tipo Connection. Voltaremos a
falar nele adiante. Em seguida executa-
da a seguinte chamada:
DriverManager.registerDriver(
new com.microsoft.jdbc.sqlserver.
SQLServerDriver());

O DriverManager uma classe que
gerencia os drivers registrados no JDBC.
Este registro feito atravs da chamada
ao mtodo esttico registerDriver. A
partir desse momento, a instncia do dri-
ver passado como parmetro passa a ser
mantida pelo DriverManager e o driver
ca disponvel para utilizao pela aplica-
o Java.
A prxima linha abre uma co-
nexo com o banco de dados, que atri-
buda para o objeto conn para ser mani-
pulada pela aplicao.
conn = DriverManager.getConnection
(jdbc:microsoft:sqlserver:+
//servidor:1433;DatabaseName=NorthWind;
Selectmethod=cursor, usuario, senha);

O mtodo esttico getConnection tem
como parmetro um String de Conexo,
um String que representa o nome do
usurio e um ltimo que representa a se-
nha do mesmo. O DriverManager veri-
ca se o driver passado na primeira parte
de String de Conexo est registrado no
JDBC (como descrito anteriormente).
Caso o driver esteja registrado solicita-
da a conexo de acordo com os parme-
tros passados na segunda parte do String
de Conexo (onde temos o nome do
servidor, a porta do listner, o nome do
banco a ser acessado e o tipo de seleo)
alm do usurio e senha. Caso a conexo
seja efetuada com sucesso, o objeto conn
passa a apontar para a mesma.
As linhas que seguem enviam o co-
mando SQL para o Servidor de Banco de
dados para que o mesmo seja compilado
no servidor e que pronto para execuo.
Este procedimento executado atravs
do mtodo prepareStatement do objeto
conn (instanciado pelo mtodo getCon-
nection visto anteriormente). Este m-
todo, se executado com sucesso, retorna
um PreparedStatement que a instncia
do comando preparado no Servidor e,
no nosso exemplo, manipulado pelo
objeto pstmt.
PreparedStatement pstmt = conn.
prepareStatement(SELECT * FROM EMPLOYESS);
Para acessarmos os dados do comando
SQL preparado anteriormente preciso
que tenhamos um objeto do tipo Result-
Set que instnciado a partir do mtodo
ExecuteQuery() do PreparedStatement,
como mostrado a seguir.
ResultSet rs = pstmt.executeQuery();
Os procedimentos seguintes executam
um loop nos dados resultantes do co-
mando SQL contidos no ResultSet rs lis-
tando na tela os valores das colunas Em-
ployeeID, LastName e FirstName.
while ( rs.next() ) {
System.out.println(rs.getInt(EmployeeID) + - +
rs.getString(LastName) + ,+
rs.getString(FirstName) );
}
Por m, fechamos o PreparedState-
ment pstmt e o Connection Conn libe-
rando com isso recursos do banco de
dados e nalizando a aplicao se forma
adequada.
interessante notar que todos os pro-
cedimentos referentes a conexo, a exe-
cuo de comandos e manipulao de
dados esto contidas num bloco protegi-
do (try...catch) pois todos os mtodos uti-
lizados propagam SQLException, que re-
presenta uma exceo referente ao acesso
ou manipulao de um banco de dados,
Listagem1
import java.sql.*;

public class Principal {
public static void main (String[] args) {
Connection conn = null;
try {
DriverManager.registerDriver (
new com.microsoft.jdbc.sqlserver.SQLServerDriver());
conn = DriverManager.getConnection
(jdbc:microsoft:sqlserver:+
//servidor:1433;DatabaseName=NorthWind;Selectmethod=cursor,
usuario,
senha);
}
catch (SQLException e) {
System.out.println (\n + Erro na conexo com o banco.);
e.printStackTrace();
System.exit(1);
}

try {
PreparedStatement pstmt =
conn.prepareStatement(SELECT * FROM EMPLOYESS);

ResultSet rs = pstmt.executeQuery();
while ( rs.next() ) {
System.out.println(rs.getInt(EmployeeID) + - +
rs.getString(LastName) + ,+
rs.getString(FirstName) );
}

pstmt.close();
conn.close();
}
catch (SQLException e) {
System.out.println (\n + Erro ao recuperar dados no banco.);
e.printStackTrace();
System.exit(1);
}
}
}
Conectando Front-Ends com Delphi, VB.Net e Java
SQL
Magazine - 33
devendo ser tratada pela aplicao.
Concluso
Nosso objetivo foi mostrar os procedi-
mentos a serem efetuados em cada uma
das ferramentas analisadas para conexo
e manipulao de dados de um banco no
SQL Server, deixando alguns conceitos
de forma a facilitar ao analista a denio
sobre qual ferramenta usar para cada so-
luo a ser implementada.
De fato, no ser somente a escolha da
ferramenta de desenvolvimento que ir
denir a melhor forma de implementar
um projeto com sucesso. O analista que
tiver um domnio completo do problema
proposto pelo cliente (alm de conheci-
mento e experincia em cada ferramen-
ta) ter mais facilidade de escolher qual
tecnologia se tornar mais eciente para
resolver o problema em questo.
ANUNCIO
Emacs
Acesso e manuteno de bancos com
!"# Fabio FaIdini
emacs o editor de texto o!ciaI do projeto GNU, integrando-
se, portanto, com todas as suas ferramentas. Pode ser usado como
uma IDE, onde possveI editar, compiIar, depurar e rodar apIicati-
vos sem nunca precisar sair deIe . Oferece recursos de edio de
texto avanados como identao automtica, highIight, auto-com-
pIetar, puIar para Iinha de erro automaticamente, aIm de estar inte-
grado com emaiI, news, web, gerenciadores de banco de dados, ftp,
teInet e muito mais.
O
Perdi tudo - grita furioso o usurio ao
ver aquela mensagem de erro no console
do SQLplus, depois de queimar horas es-
crevendo aquele comando SQL. Porque
no usei um editor de textos antes !?
Marca o texto com o mouse, Ctrl c... Ctrl
v... e nada ! Tenta uma, duas, trs vezes e
nada... O que est acontecendo?
Ctrl F9... mais uma vez, Ctrl F9 ... no
vai ... no compila ... O que houve?
Tenta selecionar o texto e no vai. Clica
o boto esquerdo do mouse sobre aquelas
linhas e nada!
Essa a reao de um analista MS-Visual
Studio/Windows que comea trabalhar
em ambientes heterogneos, na frente
Windows, atrs Unix, nos lados Mac, Visu-
al Age daqui, Borland dali, Oracle, DB2, en-
m... As mos j esto acostumadas com o
Visual Studio. S de pensar em compilar, o
fura-bolo esquerdo vai em direo do Ctrl
e o direito em direo do F9. assim mes-
mo, aps anos usando os mesmos atalhos,
acaba virando reexo.
O emacs veio resolver esses problemas
e muito mais. Desenvolvido por Richard
Stallman, o fundador do projeto GNU, foi
originalmente escrito em Teco (uma lin-
guagem de macros). Hoje em dia o emacs
est na verso 21.2, podendo ser baixado no
site www.emacs.org e compilado na maio-
ria dos sistemas operacionais do mercado.
O emacs um ambiente de trabalho to-
talmente customizvel e escalvel. O usu-
rio pode excluir, modicar e acrescentar
funcionalidades e teclas de atalho tranqi-
lamente alm da facilidade da Internet ofe-
recer uma innidade de componentes para
serem instalados na IDE do emacs.
Cada linguagem tem suas peculiaridades:
highlight, compilador, interpretador, depu-
rador... enm, o tratamento de um fonte
em C no o mesmo tratamento dado
um fonte em Java, e menos ainda um fon-
te em Lisp ou em Prolog. Como o emacs
suporta tantas linguagens separadamente?
Major-mode
O emacs como um esqueleto composto
por vrios componentes, entre eles compo-
nentes especializados para as linguagens de
programao. Um conjunto de componen-
tes especializados constitui um major-mode
Acesso e manuteno de bando de dados com Emacs
SQL
Magazine - 35
(modo de edio de texto). Quando um
buffer (contedo de uma janela) aberto,
o emacs associa automaticamente a ele
um major-mode para trat-lo e controlar
todos os sinais passados para o determi-
nado buffer.
O nome do major-mode usado aparece
na mode-line (linha em cor inversa, situa-
da na parte inferior da tela). Alem disso, a
mode-line apresenta outras informaes
teis como o tipo de texto e se o mesmo
foi alterado. Vide Figura 1.
Nas primeira verso do Emacs, j era
notvel a presena e a seleo automti-
ca dos major-modes. Quando aberto um
fonte em ada (.a), logo entrava no ada-
mode. Para um fonte em lisp (.l), entrava
no lisp-mode, um fonte em prolog (.pl),
entrava no prolog-mode. Para rodar os
fontes em lisp no lisp-mode basta teclar o
enter do keypad e logo aparecia o resulta-
do na echo area, a linha que se encontra
abaixo da mode-line.
Para tratamento de cdigo SQL, o
emacs-21.2 oferece dois major-modes: o
SQL-mode e o SQLi mode (modo SQL
interativo). O SQL-mode controla a edi-
o de cdigo em SQL e o SQLi-mode
interage diretamente com o gerenciador
de banco de dados - mysql, oracle, pos-
tgres, informix, sybase, db2, interbase e
SQLserver.
SQL-Mode
A forma mais simples de entrar direta-
mente no SQL-mode abrir um arquivo
com extenso .sql. O atalho para a aber-
tura de um arquivo :
C-x f ( M-x nd-le ) *NomeDoArquivo* RET.
Se o arquivo no existir, ser criado um
novo arquivo vazio.
Caso o arquivo no tenha extenso
.sql, ou o sql-mode no for carregado,
podemos carreg-lo manualmente:
M-x sql-mode RET
Para carregar automaticamente o SQL-
mode, ao abrir um arquivo com extenso
.sql, basta acrescentar a linha seguinte no
arquivo de congurao .emacs que ca no
diretrio do usurio ( ~user/.emacs ):
(add-to-list auto-mode-alist (\\.sql\\ . sql-
mode))
Agora a Query pode ser escrita no sql-
Figura1.
mode. interessante a vericao do hi-
ghlight no cdigo escrito. Provavelmen-
te, o cdigo no aparecer em highlight,
j que por default, o highlight no est
habilitado. Para habilitar o highlight no
buffer corrente, basta digitar:
M-x font-lock-mode RET
Para habilitar o font-lock-mode em
todos os buffers basta digitar:
M-x global-font-lock-mode RET
Para habilitar o font-lock-mode ao
abrir qualquer arquivo, basta acrescentar
as linhas abaixo no arquivo .emacs
(custom-set-variables
(global-font-lock-mode t nil (font-lock)))
SQLi-mode
Aps as conguraes iniciais, para
executarmos a Query digitada, preciso
entrar no SQLi-mode escolhendo uma
das opes abaixo:
M-x sql-mysql ( para usar com o MySQL )
M-x sql-informix ( para usar com o informix )
M-x sql-ingres ( para usar com o ingres )
M-x sql-postgres ( para usar com o postgres )
M-x sql-oracle ( para usar com o oracle )
M-x sql-sybase ( para usar com o sybase )
M-x sql-db2 ( para usar com o db2 )
M-x sql-interbase ( para usar com o interbase)
M-x sql-ms ( para usar com SQLserver )
Por exemplo, para entrar no MySQL
monitor e acessar uma base de dados, o
minibuffer (localizado embaixo da mode-
line) vai esperar que o usurio entre com
o nome do usurio, a senha, o host e o
nome da base de dados.
Se a opo do gerenciador de banco de
dados escolhida no for reconhecida, pri-
meiro deve-se carregar o SQL-mode e de-
pois procurar chamar o modo desejado.
Continuando com o exemplo do MyS-
SQL
O SQL-mode e o SQLi-mode
oferecem recursos de highlight
e de auto-completar. O high-
light, alm de colorir o cdigo
fonte tambm colore as men-
sagens exibidas no console.
Para facilitar a digitao de
certos comandos, o SQL-mode
disponibiliza abreviaes que
podem ser auto-completadas
com um clicar na barra de es-
pao. Por exemplo: sel para se-
lect , upd para update, ins para
insert, del para delete, entre
outros.
QL seguem os procedimentos detalha-
dos para acesso e interao com este ban-
co de dados:
A) Preparando o ambiente (este pro-
cedimento pode ser pr-congurado no
arquivo .emacs):
1) Entrar no emacs
2) Abrir um arquivo em um buffer: C-x
C-f *nomearq* RET
3) Habilitar o modo sql no buffer atual:
M-x sql-mode RET
4) Habilitar o highlight no buffer atual:
M-x font-lock-mode RET
5) Habilitar abreviaes no buffer atu-
al: M-x Abbrev-mode RET
B) Acessando o banco de dados
6) Abrir o monitor do mysql: M-x sql-
mysql RET
7) Entrar com o nome de um usurio
do banco no minibuffer e RET
8) Entrar com a senha deste usurio
no minibuffer e RET
SQL
36 - Magazine
9) Entrar com o nome do servidor
onde est localizado o mysql no minibu-
ffer e RET
10) Entrar com o nome da base de da-
dos a ser acessada no minibuffer e RET
11) Avisar ao emacs qual o buffer que
contem o mysql monitor: M-x sql-set-
sqli-buffer RET *SQL* RET
12) Passar o foco para a janela com o
buffer em sql-mode: C-x o ou com o cli-
que do boto esquerdo do mouse sobre
o buffer
13) Enviar o buffer em sql-mode para o
buffer do monitor mysql: M-x M-b
Pronto ! Estamos dentro do MySQL
monitor! ( Figura 2 )
C) Organizando a tela
14) para quebrar a tela verticalmente:
M-x 3
15) para ativar o follow-mode:
M-x follow-mode RET
Quem diria, o MySQL monitor a co-
res! Se voc no estiver vendo as cores,
habilite o font-lock-mode, como foi expli-
cado anteriormente. Voc ter o prazer
de ter highlight na linha de comando,
no formidvel?
Agora voc no tem mais riscos de per-
der tudo pela ausncia do scroll na linha
de comando e se quiser pode at gravar
o buffer:
C-x C-s ( M-x save-buffer ) *NomeDoArquivo* RET
Para habilitar o modo de auto-comple-
tar, basta digitar:
M-x abbrev-mode RET
Como passar a Query de um buffer no
SQL-mode para o MySQL monitor ?
Temos vrias possibilidades e a mais
fcil, por enquanto, enviar o buffer in-
teiro de uma s vez, assim:
C-c C-b ( M-x sql-send-buffer )
*NomeDoBuffer* RET
Caso aparea no echo-area, no SQL
process started, porque o buffer em
SQL-mode no sabe qual o nome do
buffer que est em SQLi-mode. O nome
do buffer aparece na mode-line esquer-
da. Para passar o nome do buffer em
SQLi-mode para o buffer em SQL-mode,
basta entrar com o nome do buffer em
SQLi-mode, assim:
M-x sql-set-sqli-buffer RET *NomeDoBuffer* RET
Janelas contnuas ( Follow mode )
Como sempre o resultado da Query
pode ter muitas linhas, no cabendo na
rea visvel da janela. Pois bem, o emacs
oferece a possibilidade de dividir vertical-
mente cada janela em duas outras janelas
(Figura 3), digitando:
C-x 3 ( M-x split-window-vertically )
As duas janelas que aparecem apre-
sentam o mesmo contedo! Para que
uma janela seja a continuao da ante-
rior, deve-se digitar:
M-x follow-mode RET
Para dividir uma janela na horizon-
tal, basta digitar:
C-x 2 ( M-x split-window-horizontally )
Para fechar uma nica janela, basta colo-
car o foco do mouse sobre ela e digitar:
Figura2.
C-x 0 (M-x delete-window)
Para expandir uma janela em todo o
frame:
C-x 1 (M-x delete-other-windows)
Modo texto
O emacs no depende de ambientes
grcos multi-janelas como o MS-Win-
dows ou Xwindow para rodar. O emacs
funciona perfeitamente em modo texto
podendo ser executado em modo DOS e
at mesmo em uma estao de trabalho
como um terminal burro.
Antes mesmo que os ambientes gr-
cos multi-janelas se difundissem, o emacs
oferecia um ambiente multi-janelas. Sem
o emacs no podamos editar, compilar
e executar um programa sem precisar
fechar o editor de textos para compilar e
executar na linha de comando.
FRAME, WINDOW E BUFFER
Uma janela do emacs exibe o con-
tedo de um nico buffer. O buffer
um objeto que contm o texto editado
em uma janela do emacs. O frame do
emacs uma janela do MS-windows ou
do Xwindow.
Acesso e manuteno de bando de dados com Emacs
SQL
Magazine - 37
Para evitar confuso, vamos reservar a
palavra janela para as subdivises de um
frame do emacs e a palavra frame para as
janelas do MS-windows ou Xwindow.
Um frame do emacs pode ser subdivi-
dido em duas ou mais janelas. Quando
executamos o emacs, por default, o fra-
me aparece com uma nica janela aber-
ta. Este frame pode ser subdividido em
duas ou mais janelas, verticalmente ou
horizontalmente. Cada janela aberta tem
a sua mode-line particular, porm todas
as janelas de um frame compartilham a
mesma barra de ttulos e a mesma echo-
area do frame.
Um buffer inteiro, ou uma parte de um
buffer, pode ser editado em uma ou mais
janelas. Cada arquivo aberto carregado
em um buffer diferente. Podemos car-
regar inmeros arquivos enquanto hou-
ver memria suciente no computador.
Para carregar um arquivo em um buffer,
basta fazer:
C-x C-f ( M-x nd-le ) *nomearq* RET
Todas as modicaes feitas em uma
janela sero reetidas em todas as janelas
que estiverem editando o mesmo buffer.
Quando fechamos uma janela, o espao
fsico da janela liberado para que outra
janela se expanda nele, porm o buffer
continua aberto. Para salvar o contedo
do buffer, basta fazer:
C-x C-s ( M-x save-buffer )
Buffer list
O emacs armazena os buffers abertos
na buffer-list, que uma lista de buffers.
Para saber quais buffers esto abertos,
deve-se consultar a buffer-list digitando o
comando abaixo (A lista de buffers aber-
tos vai aparecer na janela adjacente):
Figura3.
C-x C-b ( M-x list-buffers )
Vamos analisar o resultado: Estamos
com 2 buffers abertos em 2 janelas. Uma
janela apresenta o arquivo editado, no
caso, o /tmp/teste.sql e a segunda jane-
la apresenta o buffer que contm a pr-
pria lista de buffers. O buffer *scratch*
aberto por default depois da tela de apre-
sentao do emacs. O buffer *messages*
mantm um log das mensagens que apa-
recem na echo area. Podemos ver que,
com exceo do buffer teste.sql, todos os
outros esto entre asteriscos. O asteriscos
indicam que se trata de um buffer que in-
terage com o sistema.
A buffer-list tambm trs outras infor-
maes interessantes. Se o arquivo foi
modicado, vai aparecer um * na primei-
ra coluna e se o arquivo for read-only,
vai aparecer um % na segunda coluna. A
coluna size exibe o tamanho do arquivo
em bytes. A coluna mode exibe o major-
mode do buffer. E a coluna le exibe o
caminho do arquivo.
Buffer Menu mode
O buffer que contm a buffer-list no
um simples buffer de dados estticos.
A buffer-list est sendo editada no ma-
jor-mode BUFFER MENU, que permite
ao usurio manipular os buffers listados.
Caso tenhamos aberto inmeros buffers
e queiramos fechar parte deles basta na-
vegar na buffer list e marcar os buffers
para serem fechados com um d (de de-
lete), e logo aparecer um D no lugar
da primeira coluna da linha selecionada.
Selecionamos todos aqueles que que-
remos fechar e pressionamos a letra x
para fechar os buffers selecionados. Para
salvar arquivos, basta selecionar com a
ANUNCIO
SQL
38 - Magazine
letra s as linhas desejadas e executar com
x. Podemos tambm combinar o S e o D
na mesma linha. Para desmarcar, basta
pressionar a letra u (de unmark) sobre a
linha desejada.
Para ver o contedo do buffer na janela
adjacente, basta clicar em C-o quando o
cursor estiver na linha do buffer deseja-
do. O foco mantido na buffer list. Para
passar o foco do cursor para o buffer se-
lecionado, em vez de pressionar o C-o,
pressiona-se somente a letra o. Para abrir
o buffer em uma janela que ocupe o fra-
me inteiro basta pressionar no numero 1
na linha desejada.
Em vez de entrar na buffer-list para
exibir outro buffer na janela, pode-se di-
gitar:
C-x b ( M-x switch-to-buffer ) :
( default: *sql* ) RET
O nome do buffer selecionado por de-
fault aparece entre parntesis e o usurio
poder introduzir o nome do buffer dese-
jado. Caso ele no se lembre, basta pres-
sionar o TAB e a lista de buffer aparecer
na janela adjacente.
RM Buffer Size Mode File
*% *Buffer list* 90 Buffer Menu
teste.sql 0 SQL /tmp/teste.sql
* *scratch* 182 Lisp Interaction
* *Messages* 1501 Fundamental
O emacs funcionava em terminais
burros com teclado e monitor de fsforo
verde, desprovidos de mouse. para mu-
dar o foco de uma janela para outra jane-
la do mesmo frame sem o mouse basta
digitar:
C-x o (M-x other-window)
Boa parte dessas operaes podem ser
executadas via menu. Em ambiente gr-
co s clicar com o mouse no item de
menu e ser exibido um item pop-up.
Mas em ambiente texto pressiona-se o
F10 e os itens de menu aparecero na ja-
nela adjacente. Se pressionssemos o F10
com o foco do cursor no buffer *scratch*,
apareceria na janela adjacente os itens
exibidos na barra de menus:
Possible completions are:
b==>Buffers
f==>Files
t==>Tools
e==>Edit
s==>Search
m==>Mule
h==>Help
b==>buffers
Para selecionar, um deles basta clicar
na letra que antecede o item de menu,
como b para buffer e t para tools, assim
por diante. Se pressionssemos a letra b
apareceria:
Possible completions are:
s==> *scratch* *
b==>*Buffer List* *%
m==> *Messages* *
c==>*Completions* *
l==> List All Buffers (C-x C-b)
Se o teclado no pussuir o F10, no
tem problema, possvel substitu-lo
com M-`.
Para sair dos menus, basta clicar C-g ou
trs vezes escape: ESC ESC ESC.
Concluso:
O emacs um ambiente de desenvolvi-
mento integrado padronizado que pode
ser compilado e executado em qualquer
plataforma. Multi-janelas, multi-tarefas
e multi-funcional. No depende de am-
bientes grcos, monitores coloridos,
mouses e teclas especiais. Customizvel,
o usurio pode editar e gravar suas con-
guraes particulares no arquivo ~usua-
rio/.emacs para torn-las permanentes.
O emacs traz consigo inmeros com-
ponentes, entre eles o SQL-mode e o
SQLi- mode. O SQL-mode facilita a edi-
o de cdigo SQL. O SQLi-mode incre-
menta a linha de comando que acompa-
nha os gerenciadores de banco de dados.
ANUNCIO
MySQL
SBGD no Linux:
!"# CIementino LeaI
m se tratando de soIues em banco de dados para o Iinux,
um dos pr-requisitos a "exibiIidade na aquisio da Iicena do
produto. Este fator tambm verdade para a maioria dos softwares
para este sistema operacionaI. o MySQL traz, aIm de uma poItica
de Iicenciamento bastante "exveI, saIvo aIgumas excees, recur-
sos que fazem so produto uma soIuo ideaI para ser utiIizado em
ambiente Linux.
E
O MySQL conhecido por ser um
servidor de banco de dados extremamente
rpido e robusto, congurando-se numa
das solues de menor custo para redes
mistas onde, por exemplo, temos estaes
clientes com Windows e servidores com
Linux. um Banco de dados utilizado
principalmente em servidores web
para persistncia de dados em sites, foi
desenvolvido pela T.c.X. DataKonsultAB
(http://www.tcx.se) e est disponvel para
download em http://www.mysql.com.
Ao contrrio do que se pensa, O MySQL
no totalmente free. Com relao a
sua poltica de licenciamento podemos
destacar que ele grtis para ser utilizado
tanto em uso privado como comercial,
existindo algumas restries para aplicaes
a serem utilizadas em ambiente Windows
ou quando for distribudo como parte
integrante de uma soluo.
A verso utilizada aqui do MySQL a
3.23. O MySQL tambm est disponvel
na verso MySQL/Max, que disponibiliza
atravs de conguraes adicionais o
suporte a transaes e foreign keys para
determinados tipos de tabelas. A verso
4.0, em desenvolvimento, inclui o suporte
completo a transaes, alm de suportar
locks de linhas. Para verses futuras esto
previstas as implementaes de backup on-
line e recursos de recuperao segura contra
falhas no desligamento. Mais informaes
esto disponveis em http://www.mysql.
com/products/mysql-4.0/index.html;
Instalao No Linux
Os arquivos de instalao do MySql
Servidor e Cliente esto disponveis para
download em http://www.mysql.com.
Possui verses disponveis para vrios sistemas
operacionais, entre eles FreeBSD, Unix, Mac OS X, OS/2
Warp 3 e 4, Solaris, SunOS, Windows 9x, Me, NT, 2000 e
XP.
Facilidade de instalao e administrao do Banco de
Dados.
Capacidade de gerenciamento de um nmero ilimitado
de usurios simultneos.
Alta capacidade de manipulao de registros (mais de
50.000.000 de registros por tabela).
Execuo de comandos super otimizada;
Simples e efciente sistema de privilgio de usurios.
No suporta transaes (Commit, rollback, nveis de
isolamento )
No faz lock de linhas na atualizao
No suporta constraints (Chave primria e chave
estrangeira, com capacidade de habilitar/desabilitar ou
dropar/adicionar. )
No tem recursos contra falhas no desligamento do
banco durante atualizaes de dados.
No executa backup consistente com a base de dados no
ar e se atualizaes estiverem sendo efetuadas.
VANTAGENS DESVANTAGENS
SQL
40 - Magazine
1) Instale o servidor com o comando:
Shell do Linux>
rpm ivh MySQL-3.23.53a-1.i386.rpm
2) Instale o cliente com o comando:
Shell do Linux>
rpm ivh MySQL-client-3.23.53a-1.i386.rpm
3) Depois da instalao teremos que
denir uma senha para o usurio root
com o comando:
Shell do Linux>
mysqladmin u root p password senha

Ele pedir para conrmar a senha, pois
no primeiro acesso aps a instalao a
mesma no estar ainda denida.
O tempo total de instalao foi de
aproximadamente 2 minutos sem a
necessidade de conguraes adicionais,
disponibilizando de imediato o banco
para uso.
Durante a instalao do MySQL
criado um banco de dados, chamado
mysql, contendo cinco tabelas: db, host,
user, tables_priv e columns_priv, que
implementam o controle de acesso aos
dados no MySQL.
Conectando ao Banco
Para entrar no banco digite:
Shell do Linux> mysql u root p
-p Pedir a senha do usurio.
Welcome to the MySQL monitor. Commands end with ; or \g.
Type help for help.
mysql>
A partir da entrada no MySQL
Monitor, possvel criar uma base, usar
uma j existente, consultar informaes
etc. Alguns comandos administrativos
podem ser visualizados digitando help, \h
ou ? na linha de comando. Para consultar
as bases existentes digite:
mysql> show databases;
Nota-se que o comando foi seguido
por um ponto-e-vrgula (;). Quase todos
os comandos no MySQL so seguidos
por um ponto-e-vrgula. Caso este no
seja digitado, o cursor passar para a
prxima linha do prompt aguardando o
complemento do comando.
Criando um Banco de dados
No MySQL os bancos de dados
so implementados como diretrios
contendo arquivos que correspondem a
tabelas do mesmo.
Para criar uma base digite:
mysql> create database sqlmagazine;
Aps a execuo deste comando, ser
criado no diretrio de dados do MySQL
um subdiretrio vazio com o nome
sqlmagazine. Ocorrer um erro se o
banco de dados sqlmagazine j existir
ou se o usurio logado no possuir o
privilgio apropriado para criao de
uma base de dados.
Uma vez criada a base de dados deve-se
us-la, ou seja, torn-la ativa para que
sejam manipulados os objetos e dados
contidos nesta base. Digite:
mysql> use sqlmagazine;
Criando Tabelas
Uma vez conhecidos os tipos de dados
mais utilizados, possvel criar as tabelas
do banco de dados. Para tal digite:
mysql> create table cliente (
> codigocliente INT NOT NULL,
> nome VARCHAR(30),
> endereco VARCHAR (30),
> cidade VARCHAR (30),
> uf CHAR (2),
> PRIMARY KEY(codigocliente));
Para consultar as tabelas existentes,
digite na base em uso:
mysql> show tables;
Para consultar as colunas da tabela
cliente criada anteriormente, digite:
mysql> show columns from cliente;
Atribuindo Privilgios
Como citado anteriormente, o MySQL
possui um sistema simples e eciente
para atribuio de privilgios de acesso
a usurios. No nosso exemplo, estamos
conectados com o usurio local root
e com o banco sqlmagazine em uso.
Poderamos atribuir direitos de acesso a
tabela cliente criada em nosso exemplo a
outro usurio atravs do comando
mysql> grant select on cliente to nomedousuario;
A opo de grant bem mais
abrangente que o simples acesso a uma
tabela por determidado usurio. Vejamos
a sintaxe geral do comando:
grant privilgio [ (colunas) ] [, privilgio [ (colunas)... ]
on {*.* | * | bd.* | bd.tabela | tabela }
to usurio@host [ identifed by senha]
[, ...] [ with grant option ]
Onde os termos entre colchetes so
opcionais, os termos entre parnteses
representam um ou mais elementos e
os termos entre chaves so obrigatrios
com os possveis valores indicados. Para
os termos em destaque temos:
!"#$#%&'#(: Se refere ao privilgio
a ser atribudo. Podemos destacar os
seguintes:
all [ privileges ] - Todos os Privilgios.
alter -Alterar tabelas e ndices.
create - Criar bancos de dados e tabelas.
delete - Eliminar linhas de tabelas.
drop - Eliminar bancos de dados e tabelas.
index - Criar e eliminar ndices.
insert - Inserir linhas em tabelas.
select - ler dados de tabelas.
update - alterar linhas em tabelas.
usage - sem privilgios.
)(%*+,-. Nomes das colunas s quais
os privilgios devem ser aplicados
(+.Especica o nvel do privilgio
*.* - Atribui os privilgios a todas as tabelas em todos
os bancos de dados do servidor.
* - Atribui os privilgios a todas as tabelas do banco de
Tipos de Dados mais utilizados no MSQL
CHAR(M) usado para representar strings de tamanho fxo, onde M pode ter de 1 255 caracteres.
VARCHAR(M) Tambm usada para representar strings, sendo mais fexvel do que o tipo CHAR, por armazenar o
dado de forma varivel, onde M pode ter de 0 255 caracteres. aconselhvel usar este tipo de dados no lugar do CHAR,
uma vez que s armazenado a quantidade de caracteres que o dado contm. Para o tipo CHAR, todo o tamanho
referente ao campo alocado, mesmo que ele no preencha todos os caracteres.
INT [(M)] [Unsigned] Este tipo armazena inteiros que variam de -2147483648 a 2147483647 com sinal. Se for usado
Unsigned, o intervalo ser 0 a 4294967295.
FLOAT [(M,D)] Representa nmeros decimais de preciso simples.
DOUBLE [(M,D)] Representa nmeros decimais de preciso dupla.
DATE Armazena datas. O formato default AAAA-MM-DD Intervalo de 1000-01-01 a 9999-12-31.
DATETIME Armazena data e hora no formato AAAA-MM-DD HH:MM:SS. Intervalo de 1000-01-01 00:00:00 a 9999-
12-31 23:59:59.
TEXT / BLOB Este tipo de dado utilizado para strings de 0 ate 65535 caracteres de armazenamento.
SET (valor1,valor2,...) [NOT NULL] Permite especifcar uma lista com at 64 valores dos quais um ou mais podem
ser atribudos a coluna.
Exemplo: sexo SET(M,F) NOT NULL;
transporte set (caminhao,furgao);
SGBD no Linux: MySQL
SQL
Magazine - 41
dados corrente.
bd.* - Atribui os privilgios a todas as tabelas do
banco de dados especifcado.
bd.tabela - Atribui os privilgios a todas colunas da
tabelas especifcada.
tabela - Atribui os privilgios a todas colunas da
tabelas especifcada no banco de dados default.
0(. Especica o(s) nome(s) do(s)
usurio(s) a ter(em) privilgios atribudos.
Formato usurio@host.
usurio - Nome do usurio ou string vazio para
especifcar um usurio annimo.
host - Nome do host, ou endereo IP.
Identifed By - Atribui uma senha ao usurio, ou
altera a senha de um usurio existente.
1#02 3",+0 (!0#(+. Permite ao
usurio atribuir a outros usurios
qualquer um dos seus privilgios no nvel
de privilgio especicado.
Manipulando o Banco de dados
A manipulao dos dados armazenados
num banco se d de quatro formas:
insero, alterao, deleo e seleo
de um ou mais registros. Com base na
tabela de cliente criada anteriormente
seguem alguns exemplos:
Para inserir um registro numa tabela j
existente digite:
mysql> INSERT INTO cliente (codigocliente, nome,
endereo, cidade, uf )
VALUES (1,JOSE DA SILVA,RUA ALTA,30,
RIO DE JANEIRO,RJ);
mysql> INSERT INTO cliente (codigocliente, nome,
endereo, cidade, uf )
VALUES (2,MARIA DA SILVA,RUA BAIXA, 25,
NITEROI,RJ);
mysql> INSERT INTO cliente (codigocliente, nome,
endereo, cidade, uf )
VALUES (3,JOAO SOUZA,RUA ESTREITA, 50,
SAO PAULO,SP);
Para selecionar registro(s) de uma
tabela j existente, digite:
mysql> SELECT * FROM cliente;
Mostrar todos os registros da tabela.
mysql> SELECT * FROM cliente WHERE uf = SP;
Mostrar todos os registros com a uf=SP.
mysql> SELECT * FROM cliente WHERE uf = RJ
ORDER BY nome;
O Order By trar os registros
ordenados por nome.
mysql> SELECT * FROM cliente WHERE nome LIKE J%;
O LIKE substitui o = para fazer
uma procura estimada e no exata. O
% funciona como um coringa que
substitui qualquer caractere.
Para alterar registro(s) numa tabela j
existente, digite:
mysql> UPDATE cliente
SET endereco = RUA ESTRELA, 65
WHERE codigocliente = 3;
Para apagar registro(s) numa tabela j
existente, digite:
mysql> DELETE FROM cliente
WHERE codigocliente = 3;
Operadores Lgicos
AND (&&)
mysql> SELECT * FROM cliente WHERE uf = RJAND
cidade = NITEROI;
mysql> SELECT * FROM cliente WHERE uf = RJ&&
cidade = NITEROI;
Mostrar os registros que tenha uf=RJ
e ao mesmo tempo a cidade= NITEROI
OR ( || )
mysql> SELECT * FROM cliente WHERE uf = RJOR
cidade = SAO PAULO;
mysql> SELECT * FROM cliente WHERE uf = RJ||
cidade = SAO PAULO;
Mostrar os registros que tenha uf =
RJ ou cidade = SAO PAULO
NOT (!)
mysql> SELECT * FROM cliente WHERE uf != RJ;
Mostrar os registros que tenha uf
diferente RJ.
Modificando uma Tabela
Para Renomear uma tabela j existente,
digite:
mysql> ALTER TABLE cliente
RENAME c-lientenovo;
Para adicionar uma coluna a uma
tabela j existente, digite:
mysql> ALTER TABLE clientenovo
ADD datanasc DATE;
Para alterar uma coluna de uma tabela
j existente digite:
mysql> ALTER TABLE clientenovo CHANGE nome
nomecliente VARCHAR(30);
Para remover uma coluna de uma
tabela j existente, digite:
mysql> ALTER TABLE clientenovo DROP complemento;
Concluso
At ento a ausncia de transaes
vinha se mostrado um ponto negativo
para a utilizao do Mysql de forma
mais abrangente, embora existam
muitas aplicaes, como por exemplo
as de armazenamento de contedo
dinmico para websites, que no exijam
transaes e se beneciem sobremaneira
do ganho de performance obtido com
a sua ausncia, uma vez que desfazer
programaticamente uma operao com
mltiplas tabelas trabalhoso e no
muito utilizado.
Hoje, esta questo j no pesa tanto
para utilizao do MySQL devido ao
suporte parcial a transaes, constraints
e foreign keys. No futuro o prximo o
Um pequeno exemplo
Segue um pequeno exemplo escrito em Java mostrando
o acesso ao banco e as tabelas criadas neste artigo. A
aplicao no disponibiliza uma interface grfca, ela
simplesmente efetua a conexo com o banco e lista
num console os dados da tabela CLIENTENOVO criada
anteriormente.
O Driver JDBC MySQL utilizado para o exemplo pode
ser baixado no endereo http://www.mysql.com/
downloads/api-jdbc-stable.html.
import java.sql.*;
public class Principal
{ public static void main (String[] args)
{ Connection conn = null;
try
{
//registra o driver do mysq no jdbc
DriverManager.registerDriver
( new com.mysql.jdbc.Driver() );
//verifca se o driver est registrado e abre uma
conexo com o banco de acordo
//com os parmetros do mtodo getConnection
conn =DriverManager.getConnection
(jdbc:mysql://localhost/sqlmagazine?user=root);
}
catch (SQLException e)
{ System.out.println (\n+ Erro na conexo com o banco.);
e.printStackTrace();
System.exit(1);
}
try
{
//envia o comando para o banco de dados para que /
//ele seja compiladopelo banco
//otimizando dessa forma a resposta do banco
//quando o mesmo for executado
PreparedStatement pstmt = conn.
prepareStatement(SELECT * FROM CLIENTENOVO);
//executa o comando preparado e retorna um
//ResultSet para ser manipulado pela aplicao
ResultSet rs = pstmt.executeQuery();
while ( rs.next() )
{ System.out.println(rs.getInt(CODCLIENTE) + - +
rs.getString(NOMECLIENTE));
}
pstmt.close();
conn.close();
}
catch (SQLException e)
{ System.out.println (\n +
Erro ao recuperar dados no banco.);
e.printStackTrace();
System.exit(1);
}
}
}
suporte completo a transaes, locks
de linhas durante a atualizao, backup
on-line e recuperao segura agregaro
valores a benefcios j existentes como alta
performance, simplicidade de instalao,
manuteno reduzida e verses para
vrios sistemas operacionais, fazendo
com que o MySQL seja utilizado de
forma mais abrangente.
PostgreSQL
Conquistando novas fronteiras
!"# GiseIIi NichoIs
pesar dos sistemas de cdigo aberto se mostrarem desa!a-
dores para muitos desenvoIvedores, uma parceIa considerveI de
usurios ainda resiste em adotar um software que no pertence a
ningum. Preocupada com a questo da credibiIidade e continui-
dade de desenvoIvimento do PostgreSQL, um banco de dados reI-
acionaI que permite ao desenvoIvedor a criao de operaes to-
taImente personaIizadas, a dbExperts resoIveu fazer a Iigao do
mundo virtuaI com o reaI.
A
De acordo com Roberto Stern, diretor
da softhouse brasileira, a necessidade de
um contato fsico com o produto ainda faz
parte do processo de delizao do clien-
te. O consumidor quer tocar o produto
e ter a certeza de que no dia seguinte no
vai sumir da internet. Apesar de trabalhar-
mos com o mundo virtual, vivemos no
mundo real e ele que fala mais alto., es-
clarece. Segundo o executivo, a estratgia
da empresa est apresentando resultados.
Desde seu lanamento em maro do ano
passado, foram vendidas 1.350 cpias do
PostgreSQL. S este ano, 900 cpias foram
comercializadas e a expectativa para 2003
de que 1.500 licenas sejam contratadas.
Para justicar o preo de R$ 485 prati-
cado para um sistema originalmente open
source, a dbExperts fez algumas alteraes
no PostgreSQL agregando valor ao banco
de dados. Introduziu um instalador para
Linux e uma verso nica para Windows
e Mac OS X. O pacote de distribuio da
verso dbExperts PostgreSQL Professional
inclui ainda toda documentao em portu-
gus, 30 dias de acesso a suporte local e um
carto-resposta que d direito a um inci-
dente de suporte de desenvolvimento. Ti-
vemos cuidado com o usurio. Criamos
um canal de distribuio e desenvolvemos
o design da embalagem, acrescenta Stern.
A escolha do PostgreSQL pela dbExperts
foi criteriosa. A empresa brasileira, h mais
de 12 anos no mercado de desenvolvimen-
to de banco de dados, viu no aplicativo um
meio seguro de conquistar mercado. O
banco robusto, rpido e era pouco co-
nhecido at iniciarmos nossa distribuio, o
que nos garantia uma boa margem comer-
cial. A empresa est preparando uma nova
verso, com lanamento previsto para ja-
neiro do prximo ano e promete muitas
novidades. Entre as implementaes est
a replicao das instalaes centralizadas,
agenda, ferramentas de CRM e gerenciador
de projetos.
A estratgia original da dbExperts em
alcanar pequenas e mdias empresas est
mudando um pouco de foco. Hoje, o mer-
cado corporativo um dos alvos de venda.
A mais recente aquisio do pacote foi feita
pela Vsper. A empresa de telefonia xa,
com presena em 80 municpios brasilei-
ros, adotou o PostgreSQL para algumas
aplicaes. Para Jos Luis Dadario, Dire-
tor de Projetos Especiais de TI, o PostGre
substitui com vantagens outros bancos de
dados similares. Resolvemos adotar o Pos-
Conquistando novas fronteiras PostgreSQL
SQL
Magazine - 43
tgreSQL pela reduo de custo, pois vi-
mos que em algumas aplicaes no ha-
veria necessidade de continuarmos com
bancos shareware. A empresa iniciou a
migrao dos dados em abril e pretende
concluir o processo at o nal do ano.
A verso brasileira do PostgreSQL ope-
ra em mltiplas plataformas, incluindo
Windows 95/98/ME/NT e 2000, Linux
e FreeBSD. Com caractersticas adequa-
das ao padro ACID (Atomicidade, Con-
sistncia, Isolamento e Durabilidade) de
bancos de dados, pode ser utilizado tanto
em redes ponto-a-ponto, cliente/servi-
dor ou em ambientes mono-usurios. O
licenciamento por servidor, suportando
inmeros usurios simultneos sem cus-
to adicional. Para os ambientes Linux e
FreeBSD, a licena da dbExperts permite
que o software seja livremente utilizado e
distribudo. O mesmo CD pode ser reins-
talado um nmero ilimitado de vezes em
qualquer servidor. J a licena para os sis-
temas operacionais Windows e Mac OS
X limitada por servidor, de acordo com
a quantidade de licenas adquiridas. Se
o cliente possuir dois servidores vai pre-
cisar de duas licenas separadas. No h
limite para o nmero de estaes de tra-
balho locais ou usurios de Internet que
acessem o servidor simultaneamente.
O dbExperts PostgreSQL Professio-
nal 7.2 um sistema de gerenciamento
de banco de dados relacional (SGBDR)
avanado que possui extenses obje-
to-relacionais e caractersticas de banco
de dados orientado a objetos (OODB).
Fornecido com o cdigo fonte para as
verses Linux e FreeBSD, permite ao de-
senvolvedor criar e adicionar novas fun-
es, adequando totalmente a operao
do banco de dados s suas necessidades
especcas.
O PostGreSQL um banco de dados
com uma gama considervel de recursos,
incluindo o suporte a transaes, stored
procedures e triggers, internacionaliza-
o e diversos recursos de segurana.
Overview
O PostgreSQL surgiu em 1977, na Ca-
lifrnia, EUA, como um projeto acad-
mico para a criao de um sistema 100%
Unix. Batizado inicialmente como In-
gres, o SGBDR deu origem Relational
Technologies, empresa que melhorou
o cdigo original, sendo posteriormente
adquirida pela Computer Associates.
Enquanto isso, na Universidade de
Berkley, uma equipe de universitrios
passou a desenvolver um servidor de
banco de dados objeto-relacional que
foi nomeado de Posgres (ps Ingres).
Em 1986, a empresa Illustra Corporation
lanou a verso comercial do produto.
Comprado pela Informix, o banco foi in-
tegrado ao Informix Universal Server.
Em 1995, dois estudantes de gra-
duao de Berkeley incrementaram
o projeto, adicionando a linguagem
SQL, resultando no Postgres95. A
partir de 1996, o banco ganhou o
nome de!nitivo de PostgreSQL.
Principais Caractersticas
Transaes Suporte a mltiplas tran-
saes online concorrentes entre usu-
rios. Comandos
COMMIT e ROLLBACK totalmente
suportados.
Backup Online Realiza cpia de segu-
rana de um ou todos os bancos de dados
sem a necessidade de desconectar os usu-
rios, mesmo com transaes simultne-
as ativas.
Triggers Perfeitamente suportados.
Segurana de acesso Respeita deni-
o de grupos e pers e ainda oferece a
opo de limitao por HOST que pode-
r acessar o banco.
Stored Procedures So perfeitamente
aceitos.
Caractersticas MySQL PostgreSQL Interbase Adabas
Freeware X X X X verso D personal
Open Source X X menos para NT X -
Portabilidade
Linux, NT,
FSDB
Linux, NT, FSDB, Sun SI,
Windows 95, 98, ME, NT,
2000, XP e Mac OS X
Linux, NT
- Windows NT,
95 e 98
UNIX- IBM AIX - SNI
Sinix - SUN Solaris- Linux
- Windows NT, 95 e 98 Referencial
Stored Procedures/Triggers - X X X
Transaes concorrentes - X - X
Sem limite de usurios X X X 3 sesses concorrentes
Integridade referencial - X X X
Transaes - X X -
ODBC Free X X X -
Estabilidade X X X X
Disponibilidade (backup HOT) - X X X
Amigabilidade/Interface * *** *** *
Suite de apoio ao desenvolvimento Exige ferramentas adicionais
Extrator de relatrios Exige ferramentas adicionais
Objeto-relacional Permite ao Post-
greSQL herdar tipos de dados, tabelas e
bancos de dados inteiros.
Tipos de dados denidos pelo usurio
Alm dos tipos de dados convencionais,
o usurio pode criar um tipo de dados
customizado que atenda s suas necessi-
dades.
Funes denidas pelo usurio Alm
das funes j disponveis no PostgreS-
QL, o usurio pode criar funes nas
linguagens internas (PL/pgSQL, PL/Tcl
e PL/Perl) ou em C atravs de mdulos
carregveis .so e .dll.
Integridade de dados As transaes
so escritas em um log alm de serem
registradas nos arquivos de dados, permi-
tindo que o sistema aplique um rollback/
rollforward no caso de um encerramento
anormal do servidor.
webSITES
www.postgresql.org
www.dbexperts.com.br
developer.postgresql.org
SQLAutor
Giselli Nichols (gnichols@sqlmagazine) jor-
nalista, com ps-graduao em Assessoria de
Imprensa, webwriter e webdesigner.
RepIicao
Os meIhores recursos para
!"# PauIo Ribeiro
epIicao uma feature importantssima nos SGBD's atuais
- consiste em copiar, distribuir e manter a sincronia entre dados,
estes normaImente situados em servidores distintos. O modeIo
desenvoIvido peIa Microsoft para o SQL Server, que desde a verso
6.0 agregou repIicao de dados em seu engine, ser o enfoque nes-
ta edio.
R
No mundo corporativo, a replicao de
dados est nitidamente ligada a ambientes
distribudos, onde o acesso a dados bsi-
cos (descrio de um produto numa loja,
por exemplo) feito no prprio local da
consulta. Acessando dados localmente,
reduzimos a possibilidade de conitos e
otimizamos trfego de dados nos links de
comunicao entre as instalaes distribu-
das, que muitas vezes constituem gargalos
nos sistemas.
A escolha do modelo de replicao
adequado depende das caractersticas do
negcio. Considere-se uma empresa com
gesto de preos centralizada chamada
Corp, com matriz de mesmo nome em
So Paulo-SP e liais no Paran-PR, Rio de
Janeiro-RJ e Rio Grande do Sul-RS. Abai-
xo, seguem algumas perguntas que dire-
cionam na escolha do modelo apropriado:
a) A distribuio de dados deve ser efetu-
ada de maneira unilateral (da base central
para as liais) ou a prpria loja poder alte-
rar o preo dos produtos? Se a prpria loja
alterar o preo de um produto, ser preciso
distribu-lo para as demais?
b)Qual a latncia desejvel para sincro-
nia dos dados?
c) As liais devem receber somente os
preos praticados naquele local ou uma loja
deve possuir acesso aos preos praticados
em toda a rede?
d) A sincronizao deve ser feita sempre
para toda a lista de produtos ou somente
para os produtos cujo preo foi alterado?
A Microsoft, em face desses questiona-
mentos, sugere trs modelos para rplica de
dados - Transacional, Merge e Snapshot - que
sero analisados tomando por base a empresa
ctcia Corp, onde toda a rede pratica a mes-
ma poltica de preos, ditada pela matriz em
atualizaes semanais de listas.
O Modelo Transacional
Como o prprio nome sugere, esse mo-
delo baseia-se na atualizao das liais a par-
tir do log de transaes copiado do servidor
principal. Ao atualizar o preo de um pro-
duto em Corp (gura-1), o log do coman-
do que gerou essa alterao ser copiado
para uma base especca (Distrib), para
posterior distribuio nas liais de RJ, PR
e RS. Resumidamente, a replicao transa-
cional armazena e distribui comandos de
manipulao de dados (Insert/Update/De-
lete) nas tabelas assinaladas para rplica de
dados. Note que a atualizao unidirecio-
nal (Central => Filiais).
Os Melhores recursos para replicao de dados
SQL
Magazine - 45
O Modelo Snapshot
Na replicao Snapshot, os objetos so
exportados integralmente a cada execu-
o de um job especco no distribuidor,
tambm conhecido como agente de sin-
cronizao. Isto signica que as listas de
preos nas liais seriam substitudas se-
manalmente por cpias atualizadas, inde-
pendentemente de alterao de preos.
Essa modalidade de replicao no
controla atualizaes, inseres e/ou
delees; simplesmente substitui uma
cpia por outra.
O Modelo Merge
Baseia-se em triggers criadas nas ta-
belas replicadas. Essas triggers fazem a
movimentao de dados para tabelas
de sistema responsveis pela sincroniza-
o entre as bases replicadas. Os Jobs ou
Agentes de Sincronizao que, no mo-
delo snapshot eram especcos do distri-
buidor, agora funcionam em todas as ins-
talaes distribudas. Eles identicam as
alteraes e desencadeiam o processo de
atualizao nas bases replicadas. Obser-
ve-se que, na gura-3, o preo Y, alterado
diretamente no ponto de venda PR, deve
ser atualizado primeiramente em Corp
para que depois seja sincronizado com os
outros pontos.
Um fato interessante diz respeito ao que
aconteceria se, na empresa Corp, aps
uma reestruturao, fosse permitido que
as liais tivessem autonomia para alterar
e divulgar preos para as outras liais e,
conseqentemente, em duas liais, o pre-
o de um mesmo produto fosse alterado
para valores diferentes. Na sincronizao
semanal, surgiria um impasse: que preo
aplicar para a rede? O mais baixo? Aque-
le que foi primeiramente registrado? A
replicao merge possui um tratamento
especial para conitos, que permite ras-
trear e resolver esse tipo de problema. O
algortmo bastante simples: na criao
do modelo, so denidas prioridades
para cada participante, vencendo quem
possuir a maior. Se o preo do produto
X for alterado na lial RJ (prioridade 0.3)
para R$ 4,00, e na lial RS (prioridade
0.8) para R$5,00, na ocasio do conito
o preo da lial RS seria vencedor, sendo
ento repassado para a rede.
Segue agora um exemplo prtico para
criao do processo de replicao. Sero
denidas, passo a passo, as etapas existen-
tes na criao de um modelo que atenda
a empresa Corp na distribuio de lis-
tas de preos para suas liais.
O primeiro passo registrar no Enter-
prise Manager todos os servidores envol-
vidos (\\Corp, \\Distrib, \\PR, \\RJ e
\\RS ) com uma conta que possua pri-
vilgios de system administrator, aqui
chamada de replicador, especialmente
criada para esse m.
Definio do distribuidor
A replicao um processo complexo
que envolve agentes especcos para o
controle das diversas operaes. O passo
inicial , portanto, denir um servidor,
aqui chamado de Distribuidor, para ge-
renciar esses agentes. As atribuies de
um distribuidor envolvem armazena-
mento, distribuio e controle das cpias
de dados. aconselhvel que o Distri-
buidor esteja num servidor separado do
banco de dados por questes de seguran-
a (uma vez que ele precisa ter acesso as
instalaes distribudas e, se o banco de
dados estivesse sicamente na mesma
mquina, teramos o risco do acesso in-
devido a dados da base corporativa) e
tambm da otimizao do processamen-
to tanto do distribuidor, que executa os
jobs referentes a replicao, quanto do
banco de dados que, se acessado por ou-
tros clientes, no teria sua performance
prejudicada. No servidor \\Distrib, sele-
cione Replication\ CongurePublishing
. Na prxima tela conrme Make Dis-
trib its own Distributor e prossiga (Vide
Figura 4).
Snapshot Folder uma pasta que
deve ser criada no distribuidor para ar-
mazenamento temporrio do schema e
dados para inicializao das subscries
(como podemos chamar as liais recep-
toras das atualizaes). Deve ser uma
pasta pblica e visvel pelas subscries.
(Vide Figura 5)
Pra prosseguir selecione No, user the
following default settings em Customize
Conguration.
Definio do publicador, publicao e
modelo de rplica
necessrio denir que o servidor \\
Corp (onde efetuado o cadastro e alte-
rao das listas de preos), utilizar os ser-
vios de \\Distrib para divulgao das
listas nas liais. Nesse contexto, \\Corp
passa a ser chamado de Publicador, por
ser responsvel pela publicao da lista
de preos.
Inicialmente, preciso liberar o acesso
de \\Corp aos servios do distribuidor.
Figura1.
Figura2.
Figura3.
Figura4.
SQL
46 - Magazine
Para isso, na mquina \\Distrib, entre no
Enterprise Manager e clique com o bo-
to direito do mouse em Replication. No
menu, selecione Congure Publishing,
Subscribers and Distributor e escolha a
guia Publishers conforme a gura 6.
Na guia Publishers, deve-se liberar o
acesso de \\Corp para utilizao dos ser-
vios de \\Distrib (preste ateno pois
esse procedimento executado no distri-
buidor \\Distrib) identicando o servi-
dor Corp como Publisher. Para isso, mar-
que a Check Box e clique nas reticncias
ao lado de ...distribution.... Informe a
conta e senha que devem ser utilizadas
quando o agente de leitura tambm co-
nhecido como Log Reader- se conectar
no publicador para leitura do log de tran-
saes a m de efetuar a replicao. Essa
conta, como informado no incio, conta
denida no servidor de domnio da rede
e deve possuir privilgios de system ad-
ministrator em todos os servidores en-
volvidos na replicao (\\Corp, \\Dis-
trib, \\RJ, \\PR, \\RS).
Uma vez denido que \\Corp pode-
r efetuar publicaes controladas por
\\Distrib o prximo passo ser a cria-
o da publicao. Para isso, no servidor
\\Corp, clique com o boto direito do
mouse em Publication e selecione New
Publication (gura 7).
O modelo selecionado para a repli-
cao ser o modelo transacional, pois,
de acordo com as regras de negcio do
exemplo que envolve a replicao de
uma tabela de preos, a entrada de dados
ocorre num nico ponto, com distribui-
o centralizada, as bases replicadas no
inserem ou alteram dados e, neste caso,
exigido uma alta delidade da rplica
com as bases publicadas.
Dando continuidade, na tela Select
a Distributor ..., indicado o servidor
\\Distrib, na opo ...Use the following
server (the selected server must already
be congured as distributor) . Em se-
guida seleciona-se o database db_Corp
como publicador e posteriormente o
modelo de replicao.
Note que as listas so atualizadas so-
mente no Publicador (\\Corp); as alte-
raes de preos devem ser enviadas de
maneira incremental para as liais, o que
justica a escolha do tipo Transacional.
Clique em next para a denio dos tipos
de subscries.
Definio dos tipos de subscries
As liais receptoras das alteraes de
preos passam a ser conhecidas por Subs-
cries. Sero criadas, portanto, trs subs-
cries, uma para cada lial (RJ, PR e RS).
Nesse momento, ser denido tambm
que cada lial dever receber uma carga
inicial, que inclui criao do schema da
tabela Preco_Item e respectiva carga
de dados.
Como nosso ambiente baseado na
plataforma SQL Server 7.0 & 2000
aconselhvel a seleo das duas opes
marcadas na gura 9.
No prximo passo especicaremos os
Artigos.
Artigo a unidade bsica de replicao.
Um artigo pode representar uma tabela
ou uma stored procedure. Considerare-
mos o artigo Preco_Item, envolvendo,
a tabela de mesmo nome, localizada no
database db_Corp no servidor \\Corp.
(Vide Figura 10)
Nas reticncias (...) ao lado da tabela
Preo_Item, so conrmadas as op-
es em evidncia na guia Snapshot ,
conforme mostrado na gura-11.
O snapshot (carga inicial da tabela Pre-
o_Item nas subscries) dever criar a
estrutura da tabela, carregando tambm
ndices e foreign keys. Se por algum mo-
tivo a tabela j existir no destino, sua es-
Figura5.
Figura6.
Figura7.
Figura8.
Figura9.
Figura10. Figura11. Figura12.
Os Melhores recursos para replicao de dados
SQL
Magazine - 47
trutura dever ser atualizada.
Aps a indicao do nome da publica-
o como Lista_Preos a etapa con-
rmada e no aconselhvel mais ne-
nhuma customizao, pois todas as liais
recebem o preo de todos os produtos,
bastando apenas a nalizao da criao
da publicao.
Criao e inicializao das subscries
Ao trmino da criao da publicao
deniremos as subscries em \\PR, \\
RJ e \\RS.
Antes, porm, necessrio conceder
permisso a essas subscries para que
assinem a publicao Lista_Preos
denida no servidor \\Corp. Para isso,
deve-se expandir o servidor \\Corp, o
database db_Corp e clicar com o boto
direto do mouse em Publication aces-
sando o menu Congure Publishing,
Subscribers and Distribution ... confor-
me demonstrado na gura-12.
Na guia Subscribers as subscries \\
PR, \\RJ e \\RS devem estar habilitadas
para que possam assinar a publicao a
ser denida em \\Corp . Clicando nas
reticncias, obrigatrio que o usurio
replicador - utilizado pelos jobs de sin-
cronizao esteja assinalado em Use
SQL Server.
Basicamente, a replicao Transacio-
nal fornece dois tipos de subscrio: Push
e Pull.
Na modalidade Push, o distribuidor
empurra as alteraes para as subscri-
es; todo o processo de distribuio
controlado por jobs localizados no Dis-
tribuidor.
No modo Pull, as liais puxam as
alteraes do distribuidor; o job que con-
trola esse processo est localizado na pr-
pria subscrio.
Por facilidade de administrao (todas
as liais podem ser controladas de um
ponto nico no distribuidor) escolhere-
mos o modelo Push. Para isso selecio-
ne a publicao Lista_Preos no database
db_Corp em \\Corp e, com o boto di-
reito do mouse, selecione o menu Push
New Subscription. Vide gura 14.
Prossiga selecionando as subscries
(gura-15) e o nome dos databases nas
mesma (gura-16).
Os nomes dos databases nas subscri-
es \\PR, \\RJ e \\RS so, respectiva-
mente, db_PR, db_RJ e db_RS. O
Prximo passo denir a periodicidade
de sincronizao. Neste exemplo utiliza-
remos um schedule para sincronizar as
liais aos domingos, s 07:00hs da ma-
nh. Vide gura 17.
Conrme a inicializao da subscrio
em Yes, inicialize the schema and data
(gura 18) e prossiga nalizando o pro-
cesso. Conrme no Enterprise Manager
em \\Distrib a criao da subscrio.
Vide gura 19.
O ltimo passo a execuo do snap-
shot, que ir inicializar a rplica na loja.
Selecione em Distrib Lista_Precos e
no painel da direita clique com o boto
direito do mouse em Snapshot. sele-
cione Start. Ser ento efetuada a cpia
do schema da tabela Lista_Item segui-
da da carga inicial dos dados. partir da
um job schedulado no servidor \\Distrib
se encarregar da atualizao semanal.
Para criao das outras subscries, basta
repetir os processos a partir do passo 4.
Escolha Replicao Transacional quando:
- A entrada de dados ocorre num nico
ponto, com distribuio centralizada;
- As subscries no inputam dados;
- As caractersticas do negcio exigem
alta delidade da rplica com as bases pu-
blicadas (=latncia baixa).
Escolha Replicao Snapshot quando:
- O volume de alteraes de dados for
signicativamente alto e justique a subs-
tituio por completo das rplicas;
- A atualizao das bases replicadas
ocorrer com menor frequncia (=latn-
cia alta);
- As subscries utilizarem as bases re-
plicadas somente para leitura.
Escolha Replicao Merge quando:
- Todos os participantes so respons-
veis por alteraes, incluses e delees
nas estruturas replicadas. Seu objetivo
tornar o ambiente homogneo, mesclan-
do dados oriundos de vrios locais.
Figura13.
Figura14.
Figura15.
Figura16.
Figura17.
Figura18.
Figura19.
JDataStore
O banco de dados Java da BorIand
!"# Edgar SiIva
BorIand ao Iongo dos anos vem ganhando cada vez mais
respeito no mercado Java. A companhia, que tornou o JBuiIder o
IDE mais utiIizado do mundo, mantm mais uma frente Javanesa: O
JDataStore. AIm de ser "Pure Java, o banco possui uma caracter-
stica curiosa: seu arquiteto, Srgio Cardoso, um dos brasiIeiros
que trabaIham na BorIand USA.
A
Para utilizao de um banco de da-
dos em Java, necessrio que se utilize
a JDBC. Semelhante ao modelo ODBC
da Microsoft, a JDBC uma ponte en-
tre o aplicativo e o banco de dados. O
JDBC e o ODBC tm por base a mesma
idia: deixar transparente para o aplicati-
vo qual banco de dados que est sendo
utilizado.

A API JDBC dividida em quatro classes
de acesso. Cada uma destas classes pos-
suem caractersticas nicas que denem
como o banco ser acessado, apresentando
vantagens e desvantagens, dependendo do
tipo da aplicao. Veja abaixo um pequeno
resumo dos tipos de acesso:
Tipo1: JDBC-ODBC - A aplicao
Java se conecta um driver ODBC e este
se conecta ao banco. A vantagem a am-
pla gama de banco de dados que oferecem
conexes via ODBC. O ponto negativo a
baixa performance e o fato de a ODBC ser
instalada em cada mquina cliente.
Tipo2: Native-API partly Java technology-
enabled driver O driver JDBC se comuni-
ca diretamente com o client do banco. mais
veloz do que o tipo1 pela ausncia da ODBC.
Como no tipo1, o cliente do banco precisa es-
tar instalado em cada mquina cliente.
Tipo3: Pure Java Driver for Database Mi-
ddleware A aplicao se comunica com
uma camada intermediria, que traduz as
chamadas e repassa para o banco de dados.
Elimina a necessidade do cliente do banco
estar instalado na mquina cliente. Entre-
tanto, no recomendvel para aplicaes
de pequeno porte.
Tipo4: Direct-to-Database Pure Java Dri-
ver. A mais rpida de todas. A aplicao se co-
munica diretamente com o banco de dados,
sem a necessidade de intermedirio, atravs
do protocolo nativo do banco de dados.
O driver nativo JDBC para o JDataStore
6 classe 4, assim como o do Oracle e do
novo InterBase 7.
JDataStore - O Banco de dados da Borland
SQL
Magazine - 49
JDataStore6: Banco de Dados 100%
Java, gil, Simples, Mvel e Dis-
tribuvel.
O JDataStore relacional e transacio-
nal, com suporte a StoredProcedures,
UDFs (User Dened Functions), cone-
xes simultneas e concorrentes. Apesar
de conter esses recursos um produto
compacto, podendo at ser executado
em dispositivos wireless. portvel e
multi-plataforma, j que foi desenvolvi-
do totalmente em Java. Suporta o padro
ansi92, tornando o acesso aos dados pra-
ticamente sem mistrios para quem j
usa algum outro banco relacional.
Um dos principais focos do JDataSto-
re na verso 6 possibilitar a criao de
aplicaes em dispositivos wireless, per-
mitindo sua utilizao em plataformas
como Compaq Ipaq, Sharp Zaurus e
outros que suportem a plataforma Jeode
(PersonalJava e EmbeddedJava). O Palm
OS ainda no suportado pelo JDS. Se-
gundo Srgio Cardoso, arquiteto do JDa-
taStore, Quando o PalmOS disponibili-
zar pelo menos 8Mbytes para processos
Java, poderemos rodar nestes modelos.
Pontos Fortes
Baixo custo de investimento: Uma li-
cena para 10 usurios custa em torno de
US$ 1000,00.
Perfomance: Por se tratar de um ban-
co de dados simples, o JDS apresenta boa
performance.
Fcil Distribuio: possvel distribuir
os recursos necessrios do engine do
JDS num disquete de 1.4 Mb. Distribuir
o Run time em formato Jar le do JDS
consome apensa 1 Mb.
Desenvolvimento: O JDataStore pos-
sui integrao nativa com o JBuilder, for-
necendo um ambiente mais produtivo do
que em outras plataformas de desenvolvi-
mento. Isso no impede que o JDataStore
seja acessado por outras ferramentas.
Resumo das Caracterticas Bsicas do
JDataSore
Totalmente escrito em Java;
Roda em dispositivos com apenas
16Mbytes de memria;
Suporta verses Java 1.1.8 1.4;
Certicado para rodar em Windows
(XP, 2000, NT, 98 SE), Linux (RedHat 7.x,
Mandrake 7.x), Solaris (7, 8) e Mac OS X;
Suporte padres (JavaBeans, SQL
92, stored procedures, foreign keys,
JDBC 3.0 scrollable, updatable cursors,
batch updates);
Alta Performance;
Suporte a transaes;
Suporte mltiplos processadores;
Recuperao automtica de erros;
Requer mnima administrao;
Fcil distribuio;
Um nico arquivo .jar le contm
toda funcionalidade;
Pode ser distribudo junto aplicao;
Arquivo de dados tem o mesmo for-
mato para todas as plataformas de insta-
lao do produto e at 50% menor que
um com a mesma estrutura gerado em
um banco de dados similar;
Algumas das Melhorias na Verso 6.0
Maior suporte aos padres adotados
pelo mercado;
Maior suporte as propriedades da API
JDBC e Implementaes adicionais para
interfaces JDBC 2 e JDBC 3;
Mudanas para tipos de dados FLO-
AT, DATE e TIME;
Implementao de novas funes de
sistema;
Suporte a Subqueries ;
Suporte a Foreign keys ;
Suporte a Table expressions;
Suporte a Stored procedures e UDFs
(User Dened Funcion);
Sobre as Stored Procedure e UDFs
Stored Procedures: A maioria dos servi-
dores de banco de dados utilizam o Tran-
sactSQL e o PL-SQL para implementa-
o de Stored Procedures. No JDataStore
6 a linguagem de procedures o Java, de
forma que todos os recursos de funes
de sistema, mecanismos de converso,
funes com tipos primitivos, bem como
manipulao de Strings e outras classes
Java, podem ser utilizados.
UDF (User Dened Functions): Como
no InterBase, possvel criar funes
personalizadas para o JDS. Com isso, as
possibilidades para tratamento dentro do
banco se tornam praticamente innitas.
A desvantagem, assim como qualquer
UDF, a queda de performance quando
o cdigo realiza uma chamada funo.
Utilizando o JDataStore pela primeira vez
O JDataStore est disponvel junta-
mente com a instalao do JBuilder para
download no site da Borland no endere-
o http://www.borland.com/products/
downloads/download_jdatastore.html.
A instalao simples e rpida, bem
como a utilizao dos seus recursos. O
banco acompanha um utilitrio para
manuteno visual, chamado JDataStore
Explorer (imagem 1).
Para criar um novo banco de dados se-
lecione o menu File->New. Na janela de
opes, indique a verso do banco a ser
criada, dena o diretrio e d um nome
para o arquivo de dados. A extenso do
banco ser .jds. (Imagem 2).
Uma tabela pode ser construda atra-
vs do menu Tools/Create Table. A
janela para criao intuitiva, deixando
qualquer um a vontade. Os dados da
tabela esto disponveis na guia View,
conforme mostra a gura 3.
Imagem 1 JDataStore Explorer
Imagem 2 Criando o Arquivo JDS na verso 6.0
Imagem 3 Manipulo da tabela criada.
SQL
50 - Magazine
Entrevista
com Srgio Cardoso
(Engenheiro de Produtos da Borland USA)
Durante os ltimos nove anos, Srgio
Cardoso teve a oportunidade de participar
no desenvolvimento de vrios releases do
Borland C++, JBuilder, Borland Applica-
tion Server e trabalhar no desenvolvimen-
to do Borland JDataStore. Esteve presente
este ano em So Paulo, na 1 BorCon Bra-
sil, ministrando uma palestra sobre o JDS.
O que o JDataStore?
JDataStore um banco de dados rela-
cional totalmente desenvolvido em Java.
Usurios do JBuilder Enterprise e do Bor-
land Enterprise Server contam com a tec-
nologia do JDataStore nestes produtos.
O JDataStore tambm distribudo em
uma verso standalone. Ele integra-se de
maneira transparente ao JBuilder, nossa
soluo para desenvolvimento Java.
Qual a misso do JDataStore?
O objetivo principal do JDataStore est
em facilitar o desenvolvimento de aplica-
es Java que necessitem de um banco de
dados com alta performance, instalao
transparente, manuteno zero e pouco
uso de memria. Procuramos garantir que
o JDataStore seja compatvel aos padres
de mercado tais como J2EE, JDBC e SQL.
Por sua versatilidade e robustez, o JDataS-
tore tanto pode ser usado em dispositivos
mveis como em aplicaes distribudas.
A portabilidade do ambiente Java per-
mite tambm que o mesmo cdigo e
arquivos de dados de uma aplicao que
use JDataStore possa ser utilizado sem
a necessidade de portes e converses.
O mesmo arquivo .jar com cerca de
1Mbyte contendo todo a funcionalidade
do produto pode ser usada em Windo-
ws, Linux, Solaris e Mac OS X.
Exitem concorrentes do JDS?
Cloudscape e PointBase so dois outros
bancos de dados Java no mercado norte-
americano. Depois da compra da Informix
pela IBM, no se ouve muita coisa a respei-
to do futuro do Cloudscape. PointBase est
oferecendo hoje recursos que j existem no
JDataStore h vrios releases.
Como funciona o JDataStore dentro
de dispositivos Mveis e como seria a
relao J2ME e JDataStore?
Boa parte do que se fala hoje sobre
J2ME est concentrado no MIDP. Mui-
tos dos modelos de telefone celular dis-
ponveis hoje possuem cerca de 2Mbytes
para execuo de programas.
Estamos trabalhando para o mercado
de dispositivos com 16Mbytes de mem-
ria RAM ou mais, que oferecem suporte
para Personal Java hoje e ao CDC/Perso-
nal Prole no futuro, como os modelos
baseados na arquitetura ARM, rodando
Pocket PC. O iPaq da Compaq possui
modelos com 32Mbytes de memria
RAM. Desses 32Mbytes metade pode ser
utilizado como rea de armazenamento
e outra metade para execuo de aplica-
es. A mesma quantidade de memria
est disponvel nos modelos Zaurus da
Sharp que usam Embedded Linux como
sistema operacional.
A Nokia possui o Communicator 9210i
que uma mistura de PC e telefone ce-
lular. Conseguimos executar aplicaes
com o JDataStore neste equipamento.
Mas enfrentamos baixa velocidade nas
transferncias de dados por estarem
baseados em redes GSM. Esses equipa-
mentos devero ter uma aceitao muito
maior quando suportarem redes GPRS
que oferecem velocidades maiores para
transferncia de dados.
Vai ser possvel um dia utilizar JDataS-
tore com Palms?
Quando o PalmOS disponibilizar pelo
menos 8Mbytes para processos Java, po-
deremos rodar nestes modelos.
simples trabalhar com repositrios
locais JDataStore e depois realizar a sin-
cronizao com outros servidores de
banco de dados?
Sim, isso possvel. O JDataStore pos-
sui uma solucao lightweight para sin-
cronizao de dados entre dispositivos
remotos e servidores de dados.
O JDataStore deixar de ser relacional
para tornar-se um banco de dados
orientado objetos?
Voc pode armazenar instncias de ob-
jetos em uma tabela com o JDataStore.
Todo o suporte para a serializao existe
hoje. Tambm contribumos com tecno-
logia de mapeamento relacional/objeto
na implementao do CMP do Borland
Enterprise Server (Enterprise Java Beans).
Como funciona o mecanismo de li-
cena do JDS?
O JDataStore possui basicamente 3 ti-
pos de licena: Developer, Local Server
e Server.
Quando voc compra o JBuilder Ente-
prise ou o Borland Enterprise Server (BES),
voc tambm est adquirindo uma licena
para desenvolvimento do JDS.
Quando uma aplicao desenvolvida
com o JDataStore precisa ser distribuda
voc pode adquirir licenas para um ser-
vidor local onde, por exemplo, o arquivo
de dados ser acessado pelo mesmo usu-
rio em uma mesma mquina.
Caso voc precise que a base de dados
seja acessada por diferentes usurios,
voc poder utilizar o JDataStore Server
em um servidor por usurios remotos.
A licena de Servidor permite que at 10
conexes simultneas sejam feitas a uma
mesma base de dados. Novas licenas po-
dem ser adquiridas e adicionadas.
O que podemos esperar no futuro do
JDataStore?
Estamos explorando os avanos em
.NET, segurana e dispositivos mveis.
Concluso
Assim como o Interbase da Borland,
o JDataStore uma soluo para quem
busca um banco leve, portvel, rpido e
de simples manuteno. Seu baixo custo,
aliado as vantagens de ser PureJava, faz
dele uma soluo nica para alguns tipos
de aplicao.
webSITES
http://bdn.borland.com
http://www.borland.com/jdatastore/index.html
http://wireless.java.sun.com/getstart/
http://java.sun.com/products/jdbc/.
SQLAutor
Edgar Silva Diretor Tcnico da Argos Tecnologia,
atuando em projetos envolvendo Multi-camadas
com J2EE e outras tecnologias Borland com
BizSnap e DataSnap. Est atuando no desenvolvi-
mento de vrias APIs Java, bem como o Argos
Framework (EJB, Servlets, JSP e Struts).
Foi durante muitos anos um dos principais in-
strutores da Borland, viajando o pas inteiro para
formao de novos instrutores e prossionais
certicados. Borland Delphi Certied Developer
& Instructor e Borland JBuilder Certied Developer
& Instructor. lider do Grupo de Usurios Java de
Belm (http://beljug.locaweb.com.br) e pode ser
contactado em esilva@argostecnologia.com.