Java - método inserir

Pessoal,

Estou tentando criar o metodo inserir para atender acesso ao BD usando java.
Já fiz o metodo procurar mas o inserir está dando erro no objeto da fk orgao_emissor_id da tabela certidao.
Poderias me ajudar pq nao estou conseguindo setar o Objeto Orgao Emissor.
Segue abaixo o repositorio e o main.

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.orgaoemissor.jdbc.ConexaoJDBC;

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_NAO_CADASTRADA =
		"Certidao não 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 (?,?,?,?)";
//	    "INSERT INTO certidao (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 = ?";
	
	private static final String ATUALIZAR_CERT =
			"UPDATE certidao SET nome = ? 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());
				psCert.setInt(4, c.getOrgao_Emissao.getIdOrgao_Emissao())
				
//				Certidao certi = new Certidao();
////			psCert.setInt(4, c.getOrgao_Emissor());
//				certi.setOrgao_Emissor_id(ConexaoJDBC.obterInstancia().procurar(certi.getOrgao_Emissor_id());
				
				
				
	
				psCert.executeUpdate();
				
			} catch (SQLException e) {
				System.err.print(e.getMessage());
				
			} finally {
				fechaRecursos(con, psCert, null);
				fechaRecursos(con, psEnd, null);
			}
		}
	}
	
	public void atualizar (Certidao c) {

		if (c != null) {
			Connection con = getConexao();
			PreparedStatement psCert = null;
			PreparedStatement psEnd = null;
			
			try {
				psCert = con.prepareStatement(ATUALIZAR_CERT);
				psCert.setString(1, c.getNome());
				psCert.setInt(2, c.getId());
				
//				psCert.setString(3, c.getDiasEmissao());
//				psCert.setInt(4, c.getOrgao_Emissor_id());
				
	
				psCert.executeUpdate();
				
			} 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()) {
					
					Certidao certidao = new Certidao();
					
					certidao.setDiasEmissao(rs.getString(3));
					
					certidao.setId(rs.getInt(1));
				
					certidao.setNome(rs.getString(2));
					
					certidao.setOrgao_Emissor_id(ConexaoJDBC.obterInstancia().procurar(rs.getInt(4)));
					
					return certidao;
					

				} else {
					
					System.err.print(MSG_CERTIDAO_NAO_CADASTRADA);
				}
				
			} catch (SQLException e) {
				
				System.err.println(MSG_ERRO_ACESSO_BD);
				System.err.println(e.getMessage());

			} finally {
				fechaRecursos(con, ps, rs);
			}
		}
		return null;
	}
	
	
	private Certidao carregarCertidao(int int1) {
		// TODO Auto-generated method stub
		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) {
		
		
	}

	}
	}


ackage br.com.certidoes.jdbc;

import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;

import br.com.certidoes.classes.Certidao;

public class TesteCertidoes {

//	@SuppressWarnings("deprecation")
	public static void main(String[] args) {
		Certidao c = new Certidao();
		c.setId();
		c.setNome("URB");
		c.setDiasEmissao("10");
		c.getOrgao_Emissor_id();
//		
////		c.setId(3);
//		c.setNome("Compesa");
//        c.setDiasEmissao("12");
//		c.setOrgao_Emissor_id(5);
		
		
	
//		ConexionJDBC.obterInstancia().atualizar(c); 
//		ConexionJDBC.obterInstancia().remover(2);
		
//		Certidao certidao = ConexionJDBC.obterInstancia().procurar(100);
//		System.out.println(certidao.toString());
		
		ConexionJDBC.obterInstancia().inserir(c);
	

		ResultSet rs = ConexionJDBC.obterInstancia().listar();
//		
//	
		ResultSetMetaData mdata;
		try {
			mdata = rs.getMetaData();
			int colCount = mdata.getColumnCount();
			String[] colNames = new String[colCount];
			for (int i = 1; i <= colCount; i++) {
				colNames[i - 1] = mdata.getColumnName(i);
			}
			rs.beforeFirst();
			while (rs.next()) {
				String[] rowData = new String[colCount];
				for (int i = 1; i <= colCount; i++) {
					rowData[i - 1] = rs.getString(i);
					System.out.println(rowData[i - 1]);
				}
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		

	}
}

Erro de Java ou erro de SQL? Faltou a mensagem, mas seu código usa o relacionamento:
psCert.setInt(4, c.getOrgao_Emissao.getIdOrgao_Emissao())
Só está faltando o ponto e vírgula da linha, de resto parece tudo certo.

1 curtida

você não setou o órgão emissão na certidão, ai o banco de dados não aceita inserir pois a chave estrangeira eh obrigatória.

`
Certidao c = new Certidao();
c.setId();
c.setNome(“URB”);
c.setDiasEmissao(“10”);
c.getOrgao_Emissor_id(); // aqui era para ser um setter
// eh para ser mais ou menos assim
c.setOrgao_emissor(New Orgao_Emissor(ID DO ORGAO EMISSOR));

`

1 curtida

@thimor, a não ser que o campo esteja definido como not null a fk não é obrigatória. A constraint de fk define apenas a correlação não obrigatoriedade.

pelo erro que ele passou esta não esta como not null.

Então… falta ele passar qual o erro:

Esse texto é muito genérico…

O meu chute é que esteja dando NPE, erro de java e não de banco!

1 curtida