Códigos para persistencia. Tudo junto ou tudo separado? E o jeito certo?

Olá pessoa, preciso de uma dica, não sei se aqui é o local correto mais é o que acho que é.

Bom, estou desenvolvendo um sistema para uma empresa, utilizando o MYSQL como banco.

Para a manipulação do banco de dados eu criei uma classe: GerenciadorDeAcessoAoBanco.
Nela eu tenho todos os metodos estaticos para manipular o banco de dados ex:

  • realizarConexao
  • fecharConexao
  • alterar contato
  • alterar serviço
  • alterar …
  • cadastrar contato
  • cadastrar serviço
  • cadastrar …
  • excluir contato
  • excluir serviço
  • excluir …

Quando preciso fazer alguma coisa no banco faço assim:

GerenciadorDeAcessoAoBanco.cadastrarContato(novoContato);

Isso é certo de se fazer?

Vcs tem algum exemplo de como que é feito essa manipulação do banco de dados? Nem que for um exemplo de organização onde vão os metodos, em um lugar separado, ou tudo junto como estou fazendo.

Gostaria da opnião de vcs que tem muito mais expericencia do que eu.

Obrigado. Gabriel

A técnica que você está usando não é incorreta, mas joga responsabilidades demais em cima de uma mesma classe (já que ela sabe manipular tanto Contatos quanto Serviços, e provavelmente outras entidades). Você já teve algum contato com o padrão de projeto DAO (Data Access Object) ? Ele vai lhe permitir dividir melhor essas responsabilidades:

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

Cara o legal seria você criar um classe de conexao com os metodos:

  • realizarConexao
  • fecharConexao

em outra classe por exemplo PersistenciaDAO você armazenar seus metodos

  • alterar contato
  • alterar serviço
  • alterar …
  • cadastrar contato

Da um estudada no Desing Patern DAO. Acho que pode ajudar…

dentro da classe persistenciaDAO você chama os metodos de abrir conexao ou fechar conexao na hora que você precisar.

Hum… bom saber ^^ Vou ler algumas coisas sobre DAO.
Esse DAO é a mesma coisa que aquele tal de DAO e ADO que tinha no VB6???

Muito obrigado.

Apenas aproveitando o tópico, queria saber o que vcs achama da maneira que manipulo o banco. Aprendi de uma forma que acho meio suspeita e sempre fiz assim, embora eu não tenho muita certeza que esteja correto. Se vcs pudessem dar uma olhada só por cima e falar se ta certo ou errado do jeito que faço agradeceria.

Utilizando Prepared Statement

	/**
	 * Cadastra um contato (utilizar para Clientes,Fornecedores,Funcionários...) <br>
	 * Recebe como paramentro um objeto contato. A definição se o registro será
	 * um Cliente,Fornecedor e/ou Funcionário é feita atravez de atributos
	 * booleanos do objeto Cliente.
	 * 
	 * É retornado um objeto Contato com o id do novo contato cadastrado.
	 * 
	 * @param paramContato
	 *            - Objeto contato com os dados do novo registro.
	 **/
	public static Contato cadastrarContato(Contato paramContato) {
		try {

			// verifica se existe conexão
			if (!existeConexao) {
				throw new SQLException( // Lança excessão de conexão não
						// encontrada.
						Constantes.ERRO_BANCO_CONEXAO_NAO_ENCONTRADA);
			}

			// String generica de insersão no banco de dados para se utilizar em
			// preparedStatement.
			String strComandoSQL = "INSERT INTO tbContatos("
				+ "nomeCompleto,logradouro,numero,bairro,cep,cidade,telefone,telefone2,celular,fax,email,cpf,rg,vinculo,outros,razaosocial,"
				+ "inscricao,contato,cnpj,uf,complemento,localizacao,dataDeCadastro,dataDeNascimento,obs,indicador,cliente"
				+ ",fornecedor,funcionario,vip,excluido,ctps,ctpsserie) "
				+ "VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
			PreparedStatement preStmComandoSQL = (PreparedStatement) conConexaoComBanco
			.prepareStatement(strComandoSQL);

			// Verifica se o Contato tem nome.
			if (paramContato.getNomeCompleto().equals("")
					|| paramContato.getNomeCompleto() == null) {
				// Se não tiver dispara uma exception.
				throw new InvalidParameterException(
						Constantes.ERRO_BANCO_CONTATO_SEM_NOME);
			}
			if (!(paramContato.isTipoCliente()
					|| paramContato.isTipoFornecedor() || paramContato
					.isTipoFuncionario())) {
				throw new InvalidParameterException(
						Constantes.ERRO_BANCO_CONTATO_SEM_NOME);
			}

			// Inicia o preenchimento dos dados do Contato para o prepared
			// statement

			// Nome
			preStmComandoSQL.setString(1, paramContato.getNomeCompleto());
			// Logradouro
			preStmComandoSQL.setString(2, paramContato.getEndereco()
					.getLogradouro());
			// Numero
			preStmComandoSQL.setInt(3, paramContato.getEndereco().getNumero());
			// Bairro
			preStmComandoSQL.setString(4, paramContato.getEndereco()
					.getBairro());
			// CEP
			preStmComandoSQL.setString(5, paramContato.getEndereco().getCep());
			// Cidade
			preStmComandoSQL.setString(6, paramContato.getEndereco()
					.getCidade());
			// Telefone
			preStmComandoSQL.setString(7, paramContato.getTelefone());
			// Telefone2
			preStmComandoSQL.setString(8, paramContato.getTelefone2());
			// Celular
			preStmComandoSQL.setString(9, paramContato.getCelular());
			// Fax
			preStmComandoSQL.setString(10, paramContato.getFax());
			// Email
			preStmComandoSQL.setString(11, paramContato.getEmail());
			// CPF
			preStmComandoSQL.setString(12, paramContato.getCpf());
			// RG
			preStmComandoSQL.setString(13, paramContato.getRg());
			// Vinculo
			preStmComandoSQL.setString(14, paramContato.getVinculo());
			// Outros dados
			preStmComandoSQL.setString(15, paramContato.getOutros());
			// razão social
			preStmComandoSQL.setString(16, paramContato.getRazaoSocial());
			// Inscrição
			preStmComandoSQL.setString(17, paramContato.getInscricao());
			// Contato
			preStmComandoSQL.setString(18, paramContato.getContato());
			// CNPJ
			preStmComandoSQL.setString(19, paramContato.getCnpj());
			// UF
			preStmComandoSQL.setString(20, paramContato.getEndereco().getUf());
			// Complemento
			preStmComandoSQL.setString(21, paramContato.getEndereco()
					.getComplemento());

			// Localização
			preStmComandoSQL.setString(22, paramContato.getEndereco()
					.getLocalizacao());

			// Datas de cadastro. Se não houver uma data insere null
			if (paramContato.getDataDeCadastro() != null) {
				preStmComandoSQL.setDate(23, new java.sql.Date(paramContato
						.getDataDeCadastro().getTime()));
			} else {

				preStmComandoSQL.setDate(23, null);

			}

			// Datas de nascimento. Se não houver uma data insere a data
			// 0/0/0000
			if (paramContato.getDataDeNascimento() != null) {
				preStmComandoSQL.setDate(24, new java.sql.Date(paramContato
						.getDataDeNascimento().getTime()));
			} else {
				preStmComandoSQL.setDate(24, null);
			}

			// Observações
			preStmComandoSQL.setString(25, paramContato.getObs());
			// Indicador
			preStmComandoSQL.setString(26, paramContato.getIndicador());

			// TIPOS ===========================================================

			// SE É CLIENTE
			preStmComandoSQL.setInt(27, paramContato.isTipoCliente() ? 1 : 0);
			// SE É FORNECEDOR
			preStmComandoSQL
			.setInt(28, paramContato.isTipoFornecedor() ? 1 : 0);
			// SE É FUNCIONARIO
			preStmComandoSQL.setInt(29, paramContato.isTipoFuncionario() ? 1
					: 0);

			// ================================================================

			// Vip
			preStmComandoSQL.setInt(30, paramContato.isVip() ? 1 : 0);
			// Excluido
			preStmComandoSQL.setInt(31, paramContato.isExcluido() ? 1 : 0);
			// Ctps
			preStmComandoSQL.setString(32, paramContato.getCtps());
			// Ctps Serie
			preStmComandoSQL.setString(33, paramContato.getCtpsSerie());

			// Realiza a insersão no banco de dados.
			preStmComandoSQL.execute();

			// Recupera o ID do contato
			Statement stmID = (Statement) conConexaoComBanco.createStatement();
			ResultSet rstID = stmID.executeQuery("SELECT LAST_INSERT_ID();");
			rstID.next();
			long idContato = rstID.getLong("LAST_INSERT_ID()");

			// Define o id do contato
			paramContato.setId(idContato);
			// Retorna o contato com o ID
			return paramContato;
		} catch (SQLException e) {
			JOptionPane.showMessageDialog(null, "ERRO DESCONHECIDO: "
					+ e.getMessage(), Constantes.SISTEMA_NOME,
					JOptionPane.ERROR_MESSAGE);
		}
		return null; // retorna Null (sinal de erro)

	}

Statement normal

[code]
public static Contato alterarContato(Contato c) throws Exception {

	if (c.getId() <= 0) {
		throw new Exception(Constantes.ERRO_BANCO_CONTATO_BUSCA_ID_INVALIDO);
	} else {

		try {
			java.sql.Statement stmUpdateContato = conConexaoComBanco
					.createStatement();
			String quem = " WHERE idContato = " + c.getId();

			String nome, razao, obs, telefone1, telefone2, celular, fax, email, vinculo, contato, inscricao, outros, indicador, cpf, cnpj, ctps, ctpsSerie, rg;
			String cliente, vip, fornecedor, funcionario, excluido;
			String dataNascimento, dataCadastro;

			String logradouro, numero, bairro, cidade, uf, cep, localizacao, complemento;

			nome = c.getNomeCompleto() != null ? "nomeCompleto = '"
					+ c.getNomeCompleto() + "', " : "";
			razao = c.getRazaoSocial() != null ? "razaoSocial = '"
					+ c.getRazaoSocial() + "', " : "";
			telefone1 = c.getTelefone() != null ? "telefone = '"
					+ c.getTelefone() + "', " : "";
			telefone2 = c.getTelefone2() != null ? "telefone2 = '"
					+ c.getTelefone2() + "'," : "";
			celular = c.getCelular() != null ? " Celular = '"
					+ c.getCelular() + "'," : "";
			fax = c.getFax() != null ? "fax ='" + c.getFax() + "'," : "";
			email = c.getEmail() != null ? "email = '" + c.getEmail()
					+ "'," : "";
			contato = c.getContato() != null ? "contato = '"
					+ c.getContato() + "'," : "";
			vinculo = c.getVinculo() != null ? "vinculo = '"
					+ c.getVinculo() + "'," : "";
			cpf = c.getCpf() != null ? "cpf = '" + c.getCpf() + "'," : "";
			inscricao = c.getInscricao() != null ? "inscricao = '"
					+ c.getInscricao() + "'," : "";
			rg = c.getRg() != null ? "rg = '" + c.getRg() + "'," : "";
			cnpj = c.getCnpj() != null ? "cnpj= '" + c.getCnpj() + "',"
					: "";
			ctps = c.getCtps() != null ? "ctps= '" + c.getCtps() + "',"
					: "";
			ctpsSerie = c.getCtpsSerie() != null ? "ctpsSerie = '"
					+ c.getCtpsSerie() + "'," : "";
			indicador = c.getIndicador() != null ? "indicador = '"
					+ c.getIndicador() + "'," : "";
			obs = c.getObs() != null ? "obs= '" + c.getObs() + "'," : "";
			outros = c.getOutros() != null ? "outros= '" + c.getOutros()
					+ "'," : "";

			if (c.getDataDeCadastro() != null) {
				dataCadastro = Funcoes.formatadorDeDatasParaSQL.format(c
						.getDataDeCadastro()) != null ? "dataDeCadastro= '"
						+ Funcoes.formatadorDeDatasParaSQL.format(c
								.getDataDeCadastro()) + "'," : "";
			}
			if (c.getDataDeNascimento() != null) {
				dataNascimento = Funcoes.formatadorDeDatasParaSQL.format(c
						.getDataDeNascimento()) != null ? "dataDeNascimento= '"
						+ Funcoes.formatadorDeDatasParaSQL.format(c
								.getDataDeNascimento()) + "',"
						: "";
			}

			logradouro = c.getEndereco().getLogradouro() != null ? "logradouro = '"
					+ c.getEndereco().getLogradouro() + "',"
					: "";
			numero = c.getEndereco().getNumero() >= 0 ? "numero = "
					+ c.getEndereco().getNumero() + "," : "";
			bairro = c.getEndereco().getBairro() != null ? " bairro = '"
					+ c.getEndereco().getBairro() + "'," : "";
			cidade = c.getEndereco().getCidade() != null ? " cidade = '"
					+ c.getEndereco().getCidade() + "'," : "";
			complemento = c.getEndereco().getComplemento() != null ? "complemento = '"
					+ c.getEndereco().getComplemento() + "',"
					: "";
			localizacao = c.getEndereco().getLocalizacao() != null ? "localizacao = '"
					+ c.getEndereco().getLocalizacao() + "',"
					: "";
			cep = c.getEndereco().getCep() != null ? "cep = '"
					+ c.getEndereco().getCep() + "'," : "";
			uf = c.getEndereco().getUf() != null ? "uf = '"
					+ c.getEndereco().getUf() + "'," : "";

			cliente = !c.isTipoCliente() ? "cliente = 0," : "cliente = 1,";
			vip = !c.isVip() ? "vip = 0," : "vip = 1,";
			fornecedor = !c.isTipoFornecedor() ? "fornecedor = 0,"
					: "funcionario = 1,";
			funcionario = !c.isTipoFuncionario() ? "funcionario = 0,"
					: "funcionario = 1,";
			excluido = !c.isExcluido() ? "excluido= 0" : "excluido= 1";

			String comandoSQL = "UPDATE tbContatos SET ";
			comandoSQL += nome + razao + obs + telefone1 + telefone2
					+ celular + fax + email + vinculo + contato + inscricao
					+ outros + indicador + cpf + cnpj + ctps + ctpsSerie
					+ rg + cliente + vip + fornecedor + funcionario
					+ logradouro + numero + bairro + cidade + uf + cep
					+ localizacao + complemento + excluido;

			if (comandoSQL.lastIndexOf(",") == comandoSQL.length() - 1) {
				comandoSQL = comandoSQL.substring(0,
						comandoSQL.length() - 1);
			}
			comandoSQL += quem;
			stmUpdateContato.execute(comandoSQL);

		} catch (Exception e) {
			System.out.println(e.getMessage());
			throw new Exception(Constantes.ERRO_BANCO_CONTATO_EXCLUIR);

		}

	}// Fim da validação de ID

	return null;

}[/code]

Muito obrigado pela ajuda.