Desenvolvimento - Java

Java: Acesso a dados usando JDBC

Veja neste artigo, numa linguagem clara e simples, o básico de JDBC usando Turbo JBuilder 2007 baseado no eclipse.

por Andrews Ferreira Bárbara



Sem dúvida alguma o acesso a dados é um dos recursos mais usados na área de desenvolvimento hoje em dia. Praticamente todo o sistema precisa de um banco de dados, havendo raras exceções. Neste artigo estaremos abordando o básico sobre esse assunto no Turbo JBuilder 2007, a IDE CodeGear para desenvolvimento Java, uma das linguagens mais faladas no mundo.

A linguagem de programação Java, diferente de linguagens como PHP, não suporta o acesso a banco de dados diretamente, para isso ele usa uma API (conjunto de classes e interfaces) para fazer o serviço. A JDBC (Java Database Connectivity), faz o envio de instruções SQL para qualquer banco de dados relacional, desde que haja um driver que corresponda ao mesmo presente.

Existem quatro tipos de drivers JDBC: 1, 2, 3 e 4. Neste artigo vamos usar o tipo 4 por ser o mais recomendado. Digo isso pois ele converte as chamadas diretamente no protocolo do banco de dados em questão, dando assim uma performance melhor, além, é claro, de ser o mais simples de se usar.

Muitos podem encontrar uma certa semelhança entre JDBC e ODBC; estão absolutamente corretos, podemos dizer a "grosso modo" que as duas seguem a mesma idéia. Ambas funcionam como meio de comunicação Banco X Aplicação, porém, ODBC é uma aplicação Windows restrito apenas a ele, enquanto a JDBC, por ser escrita em java, é multiplataforma.

Outra das vantagens da JDBC é o fato dela funcionar como uma camada de abstração de dados. Independente do SGBD utilizado, a API será a mesma, facilitando muito a vida dos programadores caso haja a necessidade de uma migração de banco.

Para ilustrar esses fatos, vamos montar uma pequena aplicação console, apenas para vermos o funcionamento da JDBC. Usaremos neste exemplo o FirebirdSQL, porém, os passos podem ser seguidos com qualquer outro banco, desde que haja o driver adequado.

Considerando que você tenha o banco de dados instalado em sua máquina, o primeiro passo é conseguir o driver necessário para realizar a conexão. Felizmente podemos encontrar o download do Jaybird (nome dado ao driver JDBC tipo 4 do firebird) no site oficial da Firebird Foundation (www.firebirdsql.org).

Depois de baixar o driver, é hora de torna-lo visível para o Turbo JBuilder. Esteja muito atento nesta parte. Muitos desenvolvedores que estão iniciando em java passam por uma verdadeira batalha, até mesmo chegando a desistir por causa de um detalhe simples. Para você poder usar o driver que conseguiu dentro do seu projeto, precisa-rá adiciona-lo ao "ClassPath" do mesmo. Para tal, clique com o botão direito em seu projeto (Na janela "Navegador"), logo em seguida vá em propriedades. Clique na sessão "Caminho de construção java". Seguindo esses passos você deve encontrar a aba "Bibliotecas", nela é que estão as referencias do seu projeto. Clicando em "Incluir JARs externos" você pode adicionar arquivos .jar ao "ClassPath" do seu projeto automaticamente, sem traumas. Para seguirmos o exemplo, adicione os arquivos .jar do Jaybird.

OBS: Existem mais formas de adicionar arquivos .jar ao "ClassPath", porém, usamos o recurso diretamente em nossa IDE para facilitar, até mesmo porque esse é o objetivo dela. Vale ressaltar que o Turbo JBuilder 2007 é baseado no Eclipse, ou seja, o caminho é bem parecido para adicionar as referencias por ele. Clicando com o botão direito no projeto, você tem a opção "Buid Path". Logo em seguida vá em "Configure Build Path" e depois em "Java Build Path". Nesta janela você encontra a aba "Libraries" exatamente como no Turbo JBuilder. Faço essa observação pois a grande massa de desenvolvedores java usam o Eclipse. Acho que isso justifica um pequeno desvio.

Voltando ao nosso foco. Agora temos o ambiente preparado para criar uma aplicação com acesso ao Firebird. Copie a codificação seguinte e veja o resultado.
import java.sql.*;

class TESTE2
{
 public static void main(String[] args)
 {
 try 
 {
 Class.forName("org.firebirdsql.jdbc.FBDriver"); 
 Connection con = 
 DriverManager.getConnection("jdbc:firebirdsql:localhost:C:\\teste.FDB","SYSDBA","masterkey");
 Statement stm = con.createStatement();
 ResultSet rs = stm.executeQuery("select * from tabela");
 while(rs.next())
 {
 System.out.println("Mostrando o valor da primeira coluna do resultado" + rs.getString(1));
 } 
 con.close();
 }
 catch(Exception e)
 {
 System.out.println("Houve um erro:" + e.getMessage()); 
 }
 }
}
Vamos então analisar o código:

import java.sql.* - Nesta linha estamos adicionando todo o pacote "java.sql", onde estão as classes necessárias para acessarmos o banco. Vale lembrar que a inclusão de todo o pacote com o * não influi na performance da aplicação, pois o java adiciona as suas dependências dinamicamente quando os objetos são instanciados.

Vou pular as linhas que estruturam a aplicação para podermos ir direto ao assunto! Até porque esse é apenas um exemplo de aplicação console.

Class.forName("org.firebirdsql.jdbc.FBDriver"); - Esse sem dúvida é o comando principal. É através dele que estamos chamando o driver JDBC do Firebird.

Connection con = DriverManager.getConnection("jdbc:firebirdsql:localhost:C:\\BLUERAY.FDB","SYSDBA","masterkey"); - Aqui estamos criando um objeto do tipo "Connection". É nele que ficam armazenadas as informações da sua conexão com o banco. Para ser mais direto, usamos o método "getConnection" do objeto "DriverManager" contido no "java.sql" ao invés do construtor padrão, isso faz com que a conexão seja estabelecida imediatamente. Repare na string passada como parâmetro, nela estão contidas as informações da nossa conexão, são elas respectivamente: driver JDBC, host, caminho do banco, usuário e por ultimo a senha.

Statement stm = con.createStatement(); - É uma declaração simples, porém vital para qualquer projeto. O objeto "Statment" é o responsavel por receber os comandos SQL e fazer o envio das informações, assim como o retorno.

ResultSet rs = stm.executeQuery("select * from tabela"); - Como dito antes, através do objeto "Statment", mais precisamente pelo método "executeQuery", passamos o comando SQL como parâmetro. O retorno dessa função será um objeto do tipo "ResultSet". Nele ficam os dados retornados da consulta. Caso queira executar uma operação de inclusão,alteração ou exclusão, proceda da mesma maneira. A única diferença será que o objeto "ResultSet" será desnecessário.

while(rs.next())
{
System.out.println("Mostrando o valor da primeira coluna do resultado" + rs.getString(1));
} - Usamos um loop para mostrar os dados da primeira coluna da consulta, para isso usamos o método "getStrings" do objeto "ResultSet" passando como parâmetro o índice da coluna. É possível também passar uma string contendo o nome da coluna desejada como parâmetro, use o que mais te convier, lembrando sempre que o parâmetro numérico vai ter sempre melhor performance. Tenha estremo cuidado com o método "next()" do "ResultSet". Repare que o loop acontece enquanto ele retorna verdadeiro, ou seja, enquanto não atingir o registro final. É bem comum ver programadores gerarem loops desastrosos por esquecerem de avançar o cursor no "ResultSet", lembre que se você não usar o método para avançar de registro, vai te retornar sempre as mesmas informações.

con.close(); - Finalmente fechamos a conexão usando o método "Close" do objeto "Connection".

Seguindo o raciocínio, podemos abrir um leque enorme de possibilidades, já que a partir do conhecimento adquirido nesse artigo pode-se executar as quatro operações básicas em banco de dados (select, insert, update e delete).

A JDBC é uma API fantástica, com muitos recursos. Tenha certeza que não terá arrependimentos se usa-la da forma correta.

Relaxa! Não é nenhum dragão de sete cabeças... É apenas um pouco de java!

Recado: A JDBC é relativamente pesada se comparada com acesso nativo ou camadas de abstração como o DBX. Tenha muito cuidado ao usar executar loops com acesso a dados (prática não recomendada mas necessária em alguns raros momentos, infelizmente) ou transações com "N" comandos. Nunca desenvolva com JDBC tendo o mesmo raciocínio usado em outras linguagens, tecnologias diferentes exigem práticas diferentes. Tenha isso sempre em mente.
Andrews Ferreira Bárbara

Andrews Ferreira Bárbara - É técnico em informática com ênfase em programação e internet. Atualmente trabalha como profissional autônomo desenvolvendo soluçõesusando técnologias CodeGear aliadas ao SGBD Firebird.