Translate

segunda-feira, 9 de fevereiro de 2015

Java - Banco de Dados I - A Fábrica de Conexões 'ConnectionFactory'

Connection Factory - A Fábrica de Conexões

Em padrões de desenvolvimento, o "conceito de fábrica" nada mais é do que uma classe onde encapsulamos métodos muito utilizados, além da mesma ser capaz de retornar uma referência a um novo objeto.

Resumindo, no caso da conexão a um Banco de Dados, criamos uma "ConnectionFactory" para nos conectarmos ao banco de dados, nos retornando uma instancia do objeto de conexão com o banco de dados, de maneira a evitar codificação repetida em diversos locais do código. 

Nesta caso, também implementaremos métodos para inicialização e fechamento desta conexão, evitando consumo desnecessário de recursos.


No código abaixo, criamos uma conexão para um Banco de Dados Oracle. 

Utilizamos o driver ojdbc6.jar, disponível em:


Nos próximos posts demonstrarei como criarmos uma classe com métodos para acesso às tabelas do banco. Esta classe, buscará uma instancia da conexão do banco, usando  o metodo estático ConnectionFactory.getConnection();


Abaixo, código comentado de uma Connection Factory:



package br.com.devfacil.factory;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class ConnectionFactory {

 private static Connection conn;

 public static Connection getConnection() {

  // Connection Factoru de exemplo para Banco Oracle

  try {

   // Configurações para acesso ao Banco de dados

   String driverName = "oracle.jdbc.driver.OracleDriver";
   String url = "jdbc:oracle:thin:@localhost:1521:XE";
   String username = "TESTES_LOCAIS";
   String password = "123456";



   // Carrega o driver JDBC
   Class.forName(driverName);
   
   // Cria uma conexão com a base de dados
   conn = DriverManager.getConnection(url, username, password);

  } catch (ClassNotFoundException e) {

   // Erro na conexão com o driver
   System.out.println("Não foi localizado o driver Oracle.");
   
  } catch (SQLException f) {
   
   // Erro na conexão com o Banco de Dados
   System.out.println("Não foi possível conectar ao banco.");
   
  }
  return conn;
 }

 // Fecha as conexões

 public static void closeConnection(Connection conn, PreparedStatement pstm,
   ResultSet rs) throws Exception {
  close(conn, pstm, rs);
 }

 public static void closeConnection(Connection conn, PreparedStatement pstm)
   throws Exception {
  close(conn, pstm, null);
 }

 public static void closeConnection(Connection conn) throws Exception {
  close(conn, null, null);
 }

 private static void close(Connection conn, PreparedStatement pstm,
   ResultSet rs) throws Exception {
  try {
   if (rs != null)
    rs.close();
   if (pstm != null)
    pstm.close();
   if (conn != null)
    conn.close();
  } catch (Exception e) {
   throw new Exception(e.getMessage());
  }
 }

}