Esse artigo faz parte da revista Java Magazine edição 41. Clique aqui para ler todos os artigos desta edição

Atenção: por essa edição ser muito antiga não há arquivo PDF para download.Os artigos dessa edição estão disponíveis somente através do formato HTML. 

JDBC Ponta a Ponta

Parte 1:De conceitos essenciais a configurações e consultas

Aprenda os fundamentos de uma APIs mais importante do Java

 

A tecnologia de bancos de dados relacionais é talvez a mais importante em todos os tempos para os Sistemas de Informação. Os bancos de dados mais populares do mercado, desde bancos leves como o HSQLDB, passando pelos livres “convencionais” como MySQL até os pesos-pesados como Oracle são, com poucas exceções, banco de dados relacionais.Desde os primórdios do Java, a importância dos bancos de dados foi reconhecida,e a versão 1.1 do JDK já trazia como componente padrão a API JDBC.

Por meio do JDBC,uma aplicação Java pode se conectar a qualquer banco relacional,submeter comandos SQL para execução e recuperar os resultados gerados pela execução desses comandos.além disso,o JDBC permite acesso aos metadados do banco de dados (também conhecido como “catalogo”) permitindo a construção de ferramentas para administração do próprio banco e apoiando o desenvolvimento de sistemas.

Embora versões posteriores do Java tenham trazido alguns novos recursos ao JDBC (veja o quadro”Versões da API JDBC”),os recursos presentes já nas primeiras versões da API atendem plenamente às necessidades da maioria das aplicações,mesmo quando há demandas fortes de performance e de suporte a recursos avançados como dados multimídia.O melhor de tudo é que a compatibilidade retroativa foi preservado - ao contrário de APIs como Swing e coleções, que mudaram bastante do Java 1.1 para o Java 2.Então aplicações Java baseadas nas primeiras versões do JDBC não necessitam de modificações para adaptação a versões mais recentes da JVM ou do JDK.

Mesmo o desenvolvedor que utiliza mecanismo de persistência objeto-relacional como Hibernate e EJB 3,ou que a prefere frameworks relacionais como iBatis ou Spring JDBC (veja links) necessita de um conhecimento  abrangente da API JDBC e de conceitos de bancos de dados relacionais em geral.Afinal, todos esses frameworks e bibliotecas usam o JDBC como base para comunicação com banco de dados.

Esta série sobre JDBC atende a dois públicos distintos.Para os iniciantes,que nunca tiveram contato com o JDBC,esta primeira parte apresenta os fundamentos da API.Já para os desenvolvedores com alguma experiência prévia com JDBC,a segunda parte,na próxima edição,apresenta recursos que fazem a diferença entre uma aplicação “de brinquedo” e uma aplicação profissional como transações,o uso de PreparedStatements,e dicas de segurança.

Os exemplos serão todos executados sobre o HSQLDB, para que não seja necessário instalar e administrar um banco mais sofisticado.Mas funcionam sem alterações em qualquer outro banco de dados – foram testados MySQL,PostgreSQL,FireBird e Oracle.Como não haveria espaço suficiente para apresentar os procedimentos para inicialização de todas esses bancos,nesta parte focamos no HSSQLDB, e na segunda mostraremos como executar os exemplos (das duas partes) no MySQL e PostgreSQL,os dois bancos de dados livres mais populares.

 

Drivers JDBC

Para acessar um banco relacional, uma aplicação Java necessita,além da própria máquina virtual, de um driver JDBC.Este driver é em geral fornecido junto com o banco de dados ou com um download separados pelo próprio fornecedor do banco,sem custo adicional.

Se você vem de outros ambientes, como VB e o Delphi, vai se surpreender ao descobrir que o JDBC não necessita de nenhuma configuração prévia, nem que seja instalado um cliente nativo do banco de dados para funcionar. Drivers JDBC são na grande maioria simples biblioteca Java – arquivo JAR que podem ser copiados para qualquer sistema operacional. Não há necessidade de editar arquivos de configuração nem de executar algum painel de controle administrativo.

 

Ø       “Drivers JDBC escritos inteiramente em Java são conhecidos como drivers Tipo 4 (Type 4).”

 

Existem no mercado alguns drivers que utilizam códigos nativo (via JNI) para aproveitar código dos clientes nativos proprietários do banco de dados. Mas eles em geral têm performance inferior, e são mais pesados e menos estáveis do que os escritos inteiramente em Java para o mesmo banco.

Drivers que usam códigos nativos têm o overhead de traduzir objetos Java para estruturas de dados e tipos nativos do sistema operacional. Já drivers puro-Java pode usufruir dos recursos avançados de conectividade de rede, gerência de memória e segurança embutidas no Java.

A Figura 1 compara um driver JDBC escrito inteiramente em Java com drivers que usam códigos nativo. A mesma figura compara drivers JDBC com mecanismo nativo de acesso a bancos de dados, tomando como referencia o popular ODBC do Windows.É utilizado como exemplo o driver JDBC do Oracle.A figura ficaria praticamente igual se em vez de ODBC fosse utilizado o dbExpress do Delphi, o ADO.NET da Microsoft,ou tecnologia similares.

Para compilar uma aplicação Java que acessa um banco de dados via JDBC,não é necessário ter nenhum drivers JDBC, não é necessário ter nenhum driver JDBC instalado nem configuração no seu IDE.Mas para executar a aplicação,as classes do driver devem estar no classpath.Isto significa que uma mesma aplicação pode ser executada utilizando qualquer banco de dados que deseje, contanto que a aplicação seja escrita usando apenas comando SQL padronizados,ou então encapsulando com cuidado comandos que utilizam sintaxes proprietárias de cada banco.

 

Figura 1.Drivers JDBC Tipo 4 versus drivers ODBC do (os drivers JDBC OCI e Thin são ambos fornecidos pela Oracle,no mesmo pacote

 

O banco de dados de exemplo

Como indicado na introdução, os exemplos os exemplos deste artigo utilizam o HQSLDB,um  banco de dados livre escrito inteiramente em Java,mas foram testados e funcionam com vários bancos.Não entraremos em muitos detalhes sobre HQSLDB,pois ele já foi descoberto extensamente em edições anteriores da Java Magazine.Apresentaremos aqui apenas o suficiente para criar o banco de dados de exemplo e executar as aplicações criadas neste artigo.

Baixe o arquivo hqsldb_1_8_0_7.zip de hqsldb.sf.net e descompacte em uma pasta qualquer,por exemplo c:\java ou /home/usuário no Linux.O resultado será a criação de um diretório chamado hqsldb,contendo a documentação,classes Java e fontes HQSLDB existe o arquivohsqldb.jar que contém tanto o driver JDBC quanto o próprio servidor do banco de dados.Este é um caso raro:em geral o driver JDBC é fornecido em um pacote JAR à parte,mas o uso embarcado do HQSLDB justifica este empacotamento atípico.

O HQSLDB pode ser executado como um servidor de rede, aceitando conexões TCP/IP da mesma forma que o MySQL ou Oracle, ou então no chamado modo standalone,onde o banco de dados fica embutido dentro da aplicação Java e acessa diretamente os arquivos de dados.Para a aplicação,os dois modos são indiferente.A aplicação apenas indica ou o caminho para um arquivo local,ou a URL para um servidor remoto.

Vamos então configurar o classpath do sistema operacional para incluir o driver do HSQLDB.Usuários Windows podem digitar o comando a seguir em um prompt de comandod do MS-DOS:

 

setCLASSPATH=%CLASSPATH%;c:\java\hsqldb\lib\hsqldb.jar

 

Utilize este mesmo prompt de comando para executar os exemplos deste artigo. Caso a janela seja fechada, a configuração do classpath será perdida.

Usuários Linux podem usar o comando:

 

exportCLASSPATH=

  $CLASSPATH:/home/lozano/hsqldb/lib/hsqldb.jar

 

E, da mesma forma que no Windows, também  devem ser executados os exemplos no mesmo shell onde foi configurado o classpath.Em ambos os casos,altere o diretório de instalação do HSQLDB conforme sua preferência.

O arquivo hsqldb.jar contém ainda um pequeno aplicativo de administração do banco de dados chamdo DataBase Manager.Todos os bancos de dados fornece uma interface similar para execução de comandos SQL.Um detalhe é que a fornecida pelo HSQLDB é escrita em Java e pode ser usada com outros bancos.

A Listagem 1 apresenta a seqüência de comando SQL que cria o banco de dados de exemplo e insere alguns dados de teste.Nosso banco de dados contém  um resumo de informações sobre vendas de produtos de uma rede de lojas varejistas. ...

Quer ler esse conteúdo completo? Tenha acesso completo