Acesso a banco de dados

Fala Galera!

Estou começando em Java, estou criando uma classe de acesso ao banco de dados. Vou coletando uma informação aqui e outra ali e aos poucos vou montando. Porém como sou iniciante em java, não sei se está classe está legal. Gostaria da opinião de todos, o que acham da classe e o que posso mudar, já que vcs tem mais experiência que eu, desta maneira me previnerei de futuros problemas com está classe.
Fico muito grato com a colaboração de todos.

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

public class DataBase {
	//define as variáveis de instancia única
	private static boolean loadDriver = false;
	private String arquivo = null;
	
	//Construtor
	public DataBase(String arquivo) {
		this.arquivo = arquivo;
	}

    //método para registrar o driver do banco de dados
	private void regDriver() {
		//abre o arquivo de propriedades especificado
		Properties propriedades = new Properties();
		try {
			FileInputStream conteudo = new FileInputStream(arquivo);
			propriedades.load(conteudo);
			conteudo.close();
			loadDriver = true;
		}
		catch (IOException ioe){
			System.out.println("Erro ao ler o arquivo de propriedades do BD");
			System.out.println(ioe.getMessage());
      		ioe.printStackTrace(); 
		}
			
		//atribui o valor das propriedades do arquivo para as variáveis
		String driver = propriedades.getProperty("jdbc.driver");
		
		try { 
			//registra o driver do banco de dados
			Class.forName(driver);
			System.out.println("Driver registrado");
		}
		catch (ClassNotFoundException cnf){
			System.out.println("Classe não localizada");
			System.out.println(cnf.getMessage());
		} 
	}
	
	//metodo para pegar conexão com o banco
	private Connection getConnection() {
       Connection conexao = null;
       
		//registra o driver do banco de dados
		if (loadDriver == false) {
			regDriver();
		}

		//abre o arquivo de propriedades especificado
		Properties propriedades = new Properties();
		try {
			FileInputStream conteudo = new FileInputStream(arquivo);
			propriedades.load(conteudo);
			conteudo.close();
		}
		catch (IOException ioe){
			System.out.println("Erro ao ler o arquivo de propriedades do BD");
			System.out.println(ioe.getMessage());
      		ioe.printStackTrace(); 
		}
			
		//atribui o valor das propriedades do arquivo para as variáveis
		String banco = propriedades.getProperty("jdbc.banco");
		String usuario = propriedades.getProperty("jdbc.usuario");
		String senha = propriedades.getProperty("jdbc.senha");
		
		try { 
			//atribui a conexão criada a variável unica conexao
			conexao = DriverManager.getConnection(banco, usuario, senha); 
			conexao.setAutoCommit(false);
			System.out.println("Conexão aberta");
		}
		catch (SQLException sqle){ 
			conexao = null; 

			System.out.println("Erro no SQL");
			while(sqle != null){
				System.err.println("Estado SQL: " + sqle.getSQLState());
				System.err.println("Mensagem de Erro: " + sqle.getMessage());
				System.err.println("Mensagem de Erro do Banco: " + sqle.getErrorCode());
				sqle = sqle.getNextException();
			}       
		}

		return conexao;
	}

	//fecha a conexão com o banco, caso esteja aberta
	public void closeConnection(Connection conexao) {
		try {
			if (!conexao.isClosed()){
				conexao.setAutoCommit(true);
				conexao.close();
				conexao = null;
				System.out.println("Conexão fechada");
			}
		}
		catch(SQLException sqle) {
			System.err.println("Erro ao fechar a conexão.");
			sqle.printStackTrace();
		}
	}

	public void closeConnection(Connection conexao, PreparedStatement ps) {
		try {
			closeConnection(conexao);
			
    		if (ps != null){
    			ps.close();
    		}
		}
		catch(SQLException sqle) {
			System.err.println("Erro ao fechar a conexão.");
			sqle.printStackTrace();
		}
	}
	
	public void closeConnection(Connection conexao, PreparedStatement ps, ResultSet rs) {
		try {
			closeConnection(conexao, ps);
			
    		if (rs != null){
    			rs.close();
    		}
		}
		catch(SQLException sqle) {
			System.err.println("Erro ao fechar a conexão.");
			sqle.printStackTrace();
		}
	}
	
	// o método PrepareStatement representa uma simples query ou comando SQL é identico
	// ao método CreateStatemente porém tem algumas funcionalidades a mais, como parâmetros
	private PreparedStatement getPrepareStatement(String SQL) {
		Connection conn = null;
		try {
			conn = getConnection();
			return conn.prepareStatement(SQL);
		} catch (SQLException e) {
			System.err.println("Erro ao prepara o sql");
			e.printStackTrace();
			closeConnection(conn);
			return null;
		}
	}
	
	public ResultSet retornarConsulta(String sql){
		try {
			PreparedStatement ps = getPrepareStatement(sql);
			return ps.executeQuery();
		}
		catch (Exception e){
			e.printStackTrace();
			return null;
		}
	}
	
	public int executarSql (String sql){
		try {
			PreparedStatement ps = getPrepareStatement(sql);
			return ps.executeUpdate();
		}
		catch (Exception e){
			e.printStackTrace();
			return 0;
		}
	}
	
}

[size=“11”]
[color=“red”]

  • Editado: Aumente as chances de alguém responder o seu tópico. Use BBCode em seus códigos para mantê-los identados e mais legíveis para outros usuários. - Matheus[/color][/size] :joia:

Rá! Bem-vindo ao Portal Java Elissandro!

Da uma olhada nesse link, sobre Data Access Object, um padrão de projeto para a camada de persistência. Vai ser muito útil :joia:

http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html

Ok. Matheus!

Verifiquei o pattern DAO. Para melhor detalhar este tópico, estou tentando desenvolver um pequeno sistema swing (stand alone), utilizo DAO e VO. O DAO faz acesso a esta classe database, postada anteriormente. Do jeito que está a princípio está funcionando, porém gostaria de saber a opinião de vcs, se nesta classe existe algo que eu deva mudar / melhorar para prevenir futuros problemas, já que nunca contrui um projeto em swing e não tenho experiência alguma.

[quote=“Elissandro”]Ok. Matheus!

Verifiquei o pattern DAO. Para melhor detalhar este tópico, estou tentando desenvolver um pequeno sistema swing (stand alone), utilizo DAO e VO. O DAO faz acesso a esta classe database, postada anteriormente. Do jeito que está a princípio está funcionando, porém gostaria de saber a opinião de vcs, se nesta classe existe algo que eu deva mudar / melhorar para prevenir futuros problemas, já que nunca contrui um projeto em swing e não tenho experiência alguma.[/quote]

Detalhe melhor como está montado o seu projeto… se possível com trechos de código, para o pessoal possa dar uma avaliada…

:wink:

Tenho um DAO que recebe um VO.
Mais ou menos assim:

[code]
public void adicionar(IngredienteVO ingrediente) throws Exception{
StringBuffer query = new StringBuffer();
query.append("INSERT INTO ingrediente (codigo,");
query.append(" descricao)");
query.append(" VALUES (?, ");
query.append(" ?)");

	String parametro[] = {String.valueOf(ingrediente.getCodigo()), ingrediente.getDescricao()};
	DataBase bd = new DataBase("firebird.properties");
	System.out.println(bd.executarSql(query.toString(), parametro) + " linha(s) processada(s)");
}[/code]

Qualquer dúvida, estou à disposição.