Conexão com Banco + Patterns

2 respostas
T

E ai galera do Fórum tudo blz…

Seguinte, estou criando um projeto onde preciso fazer a conexão com um Banco de Dados PostgreSQL…

Estava pensando em usar os Padrões de Projeto Singleton e DAO.

Mas vamos a prática, como eu faria isso?

Tenho uma classe Singleton, para garantir o retorna de uma unica instancia da conexao…

public class DBConnectionPool {
	
	private static DBConnectionPool instance;
	
	private DBConnectionPool() {
        // Construtor é privado. Cria conexão para o banco de dados
    }
	
	public synchronized static DBConnectionPool getInstance() {
		if (instance == null) {
			instance = new DBConnectionPool();
		}
		return instance;
	}
	
	public Connection getConnection() {
		Connection conn = null;
		//Pega uma conexão livre ou uma nova conexão
		return conn;
	}

	public void releaseConnection(Connection conn) {
		//Libera a conexão de volta pro pool
	}
}

Tudo bem, tenho um Singleton, mas é dentro do construtor desta classe que eu devo criar a minha conexão?

Class.forName("org.postgresql.Driver");
Connection conexao = DriverManager.getConnection("jdbc:postgresql:java", "root", "larhena");

Outra dúvida:
E depois, como eu faço para acessar essa conexão criada?

public class TestDAO implements InterfaceTestDAO{
	
	private Connection con;
	
	public TestDAO(){

		this.con = ??????????????????????
                
                 this.con = DBConnectionPool.getInstance(); //retorna uma instancia da classe DBConnectionPool e não uma instancia de Connection...

	}
	
	public void metodoQueExecutaQuery(String name) {
		// TODO Auto-generated method stub
		
		Statement stmt = null;
		ResultSet rs;
		
		try {
			stmt = con.createStatement();
			rs = stmt.executeQuery("SELECT * FROM....");
			
			// PEGA O RESULTADO....
			
			rs.close();
			stmt.close();
		} catch(Exception e) {
			//TRATA EXCEÇÃO
		}
		
		return null;
	}

}

Espero que entendam minhas duvidas… Abraço a todos…

2 Respostas

S

eu criei um singleton para conexão da seguinte maneira:

package acesita.cl1.persistencia.connection;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.HashMap;

public class DBConnection {

	private static DBConnection dbConnection = null;
	protected Connection connection = null;
	
	private DBConnection() {}
	
	public static DBConnection getInstance(HashMap<String,String> parameters) throws SQLException {
		if(dbConnection == null) {
			dbConnection = new DBConnection();
			dbConnection.setConnection(new FactoryConnection().getFactoryConnection(parameters));
		}
		
		return dbConnection;
	}
	
	public void setConnection(Connection connection) {
		this.connection = connection;
	}
	
	public Connection getConnection() {
		return this.connection;
	}
}

Tenho um atributo do tipo connection que recebe a conexao criada, e sempre que precisar a conexão eu faço o seguinte;

DBConnection db = DBConnection.getInstance();
Connection conn = db.getConnection();

ou simplesmente,

Connection conn = DBConnection.getInstance().getConnection();

espero ter ajudado. Caso alguem tenha alguma crítica sobre o meu codigo, favor postar, para que eu possa melhora-lo

J

Acho que seria mais interessante você usar um padrão Factory para criar os DAOs, invés de usar um Singleton. Ou então usar injeção de dependencia.

Criado 11 de maio de 2007
Ultima resposta 11 de mai. de 2007
Respostas 2
Participantes 3