Olá galera, estou fazendo um projeto para a faculdade, gostaria de saber se esta seria uma forma correta
de tratar os objetos.
Segue detalhes:
Vou tratar um objeto chamado Acesso, na verdade irá indicar quais acessos os usuários terão.
No banco tem apenas 3 campos, cod_acesso, ds_acesso e ativo, não peço avaliação do banco,
pois precisariam de maiores detalhes até mesmo da regra de ne negócio.
Bom vamos lá…
Primeiro uma fabrica de conexao onde servirá para todo meu projeto:
package br.com.preaula.odbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ConnectionFactory {
public static Connection getConnection() throws SQLException{
try {
Class.forName("com.mysql.jdbc.Driver");
return DriverManager.getConnection("jdbc:mysql://localhost/intranet","root","contem");
} catch (ClassNotFoundException e) {
throw new SQLException(e.getMessage());
}
}
}
Segundo o objeto que será tratado:
package br.com.preaula.autentica;
public class Acesso {
private String descricao;
private int codigo;
public Acesso(String descricao){
setDescricao(descricao);
}
public Acesso() {
}
public boolean equals(Acesso acesso){
if(this.descricao.equals(acesso.getDescricao())){
return true;
}else{
return false;
}
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public int getCodigo() {
return codigo;
}
public void setCodigo(int codigo) {
this.codigo = codigo;
}
}
Depois uma criação de uma classe de Exception própria:
package br.com.preaula.odbc;
public class ObjetoExistente extends RuntimeException {
public ObjetoExistente(String mensagem){
super(mensagem);
}
}
Por fim uma clsse DAO onde terão todas as manipulações do objeto acesso:
package br.com.preaula.autentica;
import br.com.preaula.odbc.*;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class AcessoDAO {
private Connection conn;
public ResultSet rs;
public AcessoDAO() throws SQLException {
//busca uma conecao na fabrica de conexao
conn = ConnectionFactory.getConnection();
}
public Acesso procuraAcesso(Acesso acesso) throws SQLException {
//cria o objeto e seta para null pq se nao for encontrado ira retornar null
Acesso acessoAux = null;
PreparedStatement pr;
pr = conn.prepareStatement("select * from TBL_ACESSO where DS_ACESSO=? and ativo=1");
pr.setString(1, acesso.getDescricao());
rs = pr.executeQuery();
if (rs.next()) {
acessoAux = new Acesso();
acessoAux.setCodigo(rs.getInt("COD_ACESSO"));
acessoAux.setDescricao(rs.getString("DS_ACESSO"));
}
return acessoAux;
}
public void cadastraAcesso(Acesso acesso) throws SQLException, ObjetoExistente {
if (this.procuraAcesso(acesso) != null) {
//passa uma exception criada por mim mesmo
throw new ObjetoExistente("Erro: O item já consta no banco...");
} else {
PreparedStatement pr = conn.prepareStatement("insert into TBL_ACESSO(ds_acesso,ativo) values(?,?)");
pr.setString(1, acesso.getDescricao());
pr.setString(2, "1"); //inserir por padrao o campo ativo da tabela como 1, onde indica que esta ativo
pr.execute();
pr.close();
conn.close();
}
}
public void removerAcesso(Acesso acesso) throws SQLException,ObjetoExistente{
if (this.procuraAcesso(acesso) == null) {
//passa uma exception criada por mim mesmo
throw new ObjetoExistente("Erro: Item não consta no banco...");
} else {
PreparedStatement pr = conn.prepareStatement("update TBL_ACESSO set ATIVO=0 where COD_ACESSO=?");
pr.setInt(1, acesso.getCodigo());
pr.execute();
pr.close();
conn.close();
}
}
}
Vale dizer que tudo está funcionando, apenas preciso da avaliação de vcs…
A avaliação de vcs é muito importante para mim, tendo em vista que estou começando no mundo java…
Desde já agradeço o seu tempo neste tópico…