Acesso ao BD

1 resposta
bcartaxo

Sou estudante de ciência da computação e estou iniciando no mundo dos projetos de software. Estou com uma dúvida com relação a implementação do acesso ao BD. Lendo algumas coisas na net descobri um padrão chamado Data Acess Object (DAO), mas n entendi muito bem o seu funcionamento.
Segue o código q fiz para o tal DAO e uma classe q implementei com o intúito de me fornecer PreperadedStatement´s a qual intitulei de QueryManager. Porém estou achando minha própria implementação confusa, com certeza pelo fato de não ter entendido o funcionamento do DAO, aproveito para pedir sugestões de como implementar esse acesso único ao BD, para evitar de q em todos os métodos eu carrege o Driver JDBC e chame o DriverManager passando url login e senha do BD. E outra pergunta =PPP Esse queryManager seria um Factory???

package util;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

public class DAO {
	
	private Properties properties;
	
	private static DAO instance = null;
	
	private DAO(){
		properties = new Properties();
		try {
			String url = getClass().getResource("/conf/db/DAO.properties").toString().substring(6);
			properties.load(new FileInputStream(url));
		} catch (FileNotFoundException e) {
			throw new ConfigurationErrorException();
		} catch (IOException e) {
			throw new ConfigurationErrorException();
		}
	}
	
	public static DAO instance(){
		if (instance == null){
			instance = new DAO();
		}
		
		return instance;
	}
	
	public Connection getConnection(){		
		try {
			String driver = properties.getProperty("driver");
			String url = properties.getProperty("url");
			String user = properties.getProperty("user");
			String password = properties.getProperty("password");
			
			Class.forName(driver);
			
			Connection connection = DriverManager.getConnection(url, user, password);
			return connection;
		} catch (ClassNotFoundException e) {
			throw new ConfigurationErrorException();
		} catch (SQLException e) {
			throw new ConfigurationErrorException();
		}		
	}
	
}
package util;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Date;
import java.util.Properties;

public class QueryManager {

	private Properties queriesProperty;
	private Connection connection;
	
	public QueryManager(String fileURL){
		queriesProperty = new Properties();
		try {
			String fileURLString = getClass().getResource(fileURL).toString().substring(6);
			queriesProperty.load(new FileInputStream(fileURLString));
			connection = DAO.instance().getConnection();
		} catch (FileNotFoundException e) {
			throw new ConfigurationErrorException();
		} catch (IOException e) {
			throw new ConfigurationErrorException();
		}
	}
	
	public PreparedStatement getPreparedStatement(String properties){
		try {
			String query = queriesProperty.getProperty(properties);
			PreparedStatement statement = connection.prepareStatement(query);
			return statement;
		} catch (SQLException e) {
			throw new ConfigurationErrorException();
		}
	}
	
	public void closeConnection(){
		try {
			connection.close();
		} catch (SQLException e) {
			throw new ConfigurationErrorException();
		}
	}
	
	public static java.sql.Date convertDateToSQLDate(Date date){
		long dateMillis = date.getTime();
		return new java.sql.Date(dateMillis);
	}
	
}

1 Resposta

alberto_ribeiro

Boa tarde acolon, olhando seus exemplos não consigo entender uma classe que provê conexão com o banco de dados seja um DAO…

segue este link:

http://www.javafree.org/content/view.jf?idContent=183

Padrões (tem o factory aqui)

http://www.guj.com.br/java.tutorial.artigo.137.1.guj

Acredito eu que o DAO usará esta sua classe que retorna a conexão, mas chama-la de DAO não acredito que esteja certo…
Nos meus DAO’s eu separo toda a lógica de acesso a banco de dados colocando os métodos CRUD dentro deles e não essas conexões… claro em cada método meu eu tenho que pegar a conexão…

[]'s

Criado 8 de maio de 2007
Ultima resposta 10 de mai. de 2007
Respostas 1
Participantes 2