Duvida de Java - aplicação para o banco de dados

6 respostas
J

Bom dia Gente!

Será que alguém pode ,e dar uma forcinha?!
Estou tentando implementar uma classe repositório de uma aplicação JDBC.
Na classe Certidao existe o objeto Orgao_Emissor orgao_emissor.
Eu travei na hora de implementar as condições do método. Quando é variável normal eu consigo instanciar mas nos casos de objeto me complico:

package br.com.certidoes.classes;

public class Certidao {
	
	 private int id;
	 private String nome;
	 private String DiasEmissao;
	 private Orgao_Emissor Orgao_Emissor_id;
	 
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getDiasEmissao() {
		return DiasEmissao;
	}
	public void setDiasEmissao(String diasEmissao) {
		DiasEmissao = diasEmissao;
	}
	public Orgao_Emissor getOrgao_Emissor_id() {
		return Orgao_Emissor_id;
	}
	public void setOrgao_Emissor_id(Orgao_Emissor orgao_Emissor_id) {
		Orgao_Emissor_id = orgao_Emissor_id;
		
	}
	
	
	
}
`

package br.com.certidoes.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import br.com.certidoes.classes.Certidao;
import br.com.certidoes.classes.Orgao_Emissor;

public class RepositorioCertidoesBD implements RepositorioCertidoes{

	private String nomeDriver;
	private String urlConexao;
	private String usuarioConexao;
	private String senhaConexao;
	private boolean indDriverCarregado;
	
	private static final String MSG_FALHA_CARGA_DRIVER =
		"Nome do driver JDBC usado não corresponde a uma classe válida";
	private static final String MSG_ERRO_CONEXAO =
		"Erro ao obter conexão com o banco de dados";
	
	private static final String MSG_ERRO_ACESSO_BD =
		"Erro de acesso ao banco de dados";
	
	private static final String MSG_CERTIDAO_CADASTRADA =
		"Certidao já cadastrada";
	
	private static final String MSG_ID_NAO_ENCONTRADO =
		"ID não encontrado";
	
	private static final String MSG_ID_INVALIDO =
		"ID inválido";

	private static final String INSERT_CERTIDAO =
		"INSERT INTO certidao (id, nome, DiasEmissao, Orgao_Emissor_id) VALUES (?,?,?,?)";

	private static final String PROCURA_CERT=
		"SELECT id, nome, DiasEmissao, Orgao_Emissor_id FROM certidao WHERE id = ?";
	
	private static final String LISTA_CERT =
		"SELECT id, nome, DiasEmissao, Orgao_Emissor_id FROM certidao";
	
	private static final String DELETE_CERT =
		"DELETE FROM certidao WHERE id = ?";
	
	public RepositorioCertidoesBD(
			
			String pNomeDriver,
			String pUrlConexao,
			String pUsuarioConexao,
			String pSenhaConexao) {
		
		super();
		
		nomeDriver = pNomeDriver;
		urlConexao = pUrlConexao;
		usuarioConexao = pUsuarioConexao;
		senhaConexao = pSenhaConexao;
		indDriverCarregado = false;
	}

	private Connection getConexao() {

		if (!indDriverCarregado) {
			try {
				Class.forName(nomeDriver);
				indDriverCarregado = true;
			} catch (ClassNotFoundException e) {
				System.err.print(MSG_FALHA_CARGA_DRIVER);
			}
		}
		try {
			return DriverManager.getConnection(
					urlConexao,
					usuarioConexao,
					senhaConexao);
		} catch (SQLException e) {
			System.err.print(MSG_ERRO_CONEXAO);
			return null;
		}
	}

	public void inserir(Certidao c) {

		if (c != null) {
			Connection con = getConexao();
			PreparedStatement psCert = null;
			PreparedStatement psEnd = null;
			
			try {
				psCert = con.prepareStatement(INSERT_CERTIDAO);
				psCert.setInt(1, c.getId());
				psCert.setString(2, c.getNome());
				psCert.setString(3, c.getDiasEmissao());
				
				Certidao cert = new Certidao();
				cert.setOrgao_Emissor(4, c.getOrgao_Emissor_id(1, "ana", "10", 4 ));
				


observe que consegui setar os demais atributos mas o objeto Orgao_Emissor não.

			} catch (SQLException e) {
				System.err.print(e.getMessage());
			} finally {
				fechaRecursos(con, psCert, null);
				fechaRecursos(con, psEnd, null);
			}
		}
	}
	
	public Certidao procurar(int id) {
		if (id != 0) {
			Connection con = getConexao();
			PreparedStatement ps = null;
			ResultSet rs = null;
			try {
				ps = con.prepareStatement(PROCURA_CERT);
				ps.setInt(1, id);
				rs = ps.executeQuery();
				if (rs.next()) {
					int bdId = rs.getInt(1);
					String bdNome = rs.getString(2);
					String bdDiasEmissao = rs.getString(3);
					Orgao_Emissor bdOrgao_Emissor_id = ((Object) rs).getOrgao_Emissor(4);
					
					  

					
					Certidao cert = new Certidao();
					cert.setId(bdId);
					cert.setNome(bdNome);
					cert.setDiasEmissao(bdDiasEmissao);
					cert.setOrgao_Emissor_id(bdOrgao_Emissor_id);
					
					cert.setOrgao_Emissor_id(bdOrgao_Emissor_id());
					
					
					return cert;
					
					
				} else {
					System.err.print(MSG_CERTIDAO_CADASTRADA);
				}
			} catch (SQLException e) {
				System.err.println(MSG_ERRO_ACESSO_BD);
				System.err.println(e.getMessage());
			} finally {
				fechaRecursos(con, ps, rs);
			}
		} 
		return null;
	}
	
	public ResultSet listar() {
			Connection con = getConexao();
			PreparedStatement ps = null;
			ResultSet rs = null;
			try {
				ps = con.prepareStatement(LISTA_CERT);
				rs = ps.executeQuery();
				if (rs.next()){
					return rs;
				}
			} catch (SQLException e) {
				System.err.println(MSG_ERRO_ACESSO_BD);
				System.err.println(e.getMessage());
			} 
		return rs;
	}



	
	public void remover(int id) {
	if (id != 0) {
		Connection con = getConexao();
		PreparedStatement ps = null;
		try {
			ps = con.prepareStatement(DELETE_CERT);
			ps.setInt(1, id);
			int rows = ps.executeUpdate();
			if (rows <= 0) {
				System.err.println("ID não encontrado");
			}
		} catch (SQLException e) {
			System.err.println(MSG_ID_NAO_ENCONTRADO);
			System.err.println(e.getMessage());
		} finally {
			fechaRecursos(con, ps, null);
		}
	} else {
		System.err.println(MSG_ID_INVALIDO);
	}
}

	private void fechaRecursos(
			Connection con,
			PreparedStatement ps,
			ResultSet rs) {

		try {
			if (rs != null)
				rs.close();
		} catch (Exception e) {
		}
		try {
			if (ps != null)
				ps.close();
		} catch (Exception e) {
		}
		try {
			if (con != null)
				con.close();
		} catch (Exception e) {
		}
	}

	
	}

6 Respostas

peczenyj

no caso de ser um objeto vc tem que criar o objeto.

qual a sua dificuldade? pode dar um exemplo?

alias, vc esta sumindo com exceptions. coloque ao menos um e.printStackTrace() no catch, não o deixe vazio

J

Hum…
É que não estou conseguindo setar o objet Orgao Emissor em Repositorio.

cviniciusm

Olá,

Uma vez que está usando JDBC, sugiro utilizar: private int Orgao_Emissor_id; E o Id da entidade Orgao_Emisor seja int nesse caso. Da mesma forma que você fez para Certidao.

Assim você pode fazer o CRUD da entidade Certidao independente do CRUD da entidade Orgao_Emissor.

Assim você irá perceber que o CRUD básico dos dois são muito semelhantes, dessa forma, poderá generalizar um mesmo CRUD para os dois.

E o seu CRUD deve utilizar sua entidade tanto quanto possível para facilitar a generalização depois.

Assim:

public void inserir(Certidao c) throws CrudException 
public Certidao procurar(Certidao c) throws CrudException 
public List<Certidao> listar() throws CrudException
public Certidao editar(Certidao c) throws CrudException 
public void remover(Certidao c) throws CrudException

Veja o seguinte link sobre Exception: http://blog.caelum.com.br/lidando-com-exceptions/

Jonathan_Medeiros

Bom dia!

Quando se tem um objeto, para pegar valores você pode tratar da seguinte maneira, acessa a classe modelo e resgata o atributo desejado. (mas para que isso funcione o seu modelo já deve estar carregado com informações de órgão emissor).

Orgao_Emissor bdOrgao_Emissor_id = ((Object) rs).getOrgao_Emissor().getIdEmissor();

espero ter ajudado, boa sorte!

J

Valeu, ajudou sim!

J

Muito obrigada! Tentarei sim.

Criado 11 de novembro de 2016
Ultima resposta 11 de nov. de 2016
Respostas 6
Participantes 4