Dúvida para inserir dados no banco com JSF

5 respostas
W

Boa tarde à todos !

Estou com uma certa dúvida, estou desenvolvendo uma aplicação para estudos em JSF, a princípio estou começando com as entidades “classes java”
depois as classes “DAO”, ao terminar as classes DAO. Lembrando que minha aplicação é para gerenciamento de provas e trabalhos.
Ao terminar a classe DAO irie para a classe DisciplinaDAO onde tenho os atributos :

private int codigo;
private String nome;
private String tipoAvaliacao;
private Aluno aluno;
private Curso curso;
private Professor professor;

Após inserir os valores das classes Aluno,Curso,Professor no BD, terei que incluir as chaves primárias das classe citadas na tabela disciplina, eis a dúvida agora:
A cada inserção dos atributos das classes Aluno, Curso, Professor tenho que inserir também suas chaves primárias na tabela disciplina, com é possivel fazer assim sendo que os objetos
não estão instanciados por exemplo:

public void adicionar(Disciplina disciplina){
disciplina.getAluno.getCodigo(); // nesse caso o objeto aluno não estaria instanciado
disciplina.getCurso.getCodigo(); // nesse caso o objeto Curso não estaria instanciado

}

--------------------------------------------------------------------------------------------------------

AlunoDAO

public class AlunoDAO extends Conexao {

    public boolean adicionar(Aluno aluno) throws SQLException, ClassNotFoundException {

        PreparedStatement ps = getPrepareStatement("INSERT INTO aluno VALUES(?,?,?,?,?,?,?,?,?)");
        ps.setString(1, aluno.getNome());
        ps.setString(2, aluno.getEndereco());
        ps.setString(3, aluno.getTelefone());
        ps.setString(4, aluno.getCidade());
        ps.setString(5, aluno.getEstado());
        ps.setString(6, aluno.getSenha());
        ps.setString(7, aluno.getEmail());
        ps.setString(8, aluno.getBairro());
        ps.setString(9, aluno.getInstituicao());
        return ps.execute();

    }

    public boolean alterar(Aluno aluno) throws SQLException, ClassNotFoundException {

        this.pegarID(aluno);

        PreparedStatement ps = getPrepareStatement("UPDATE aluno SET nome = ?,endereco = ?,telefone = ?,cidade = ?,estado = ?,email = ?,bairro = ?,instituicao = ? WHERE idaluno = ?");
        ps.setString(1, aluno.getNome());
        ps.setString(2, aluno.getEndereco());
        ps.setString(3, aluno.getTelefone());
        ps.setString(4, aluno.getCidade());
        ps.setString(5, aluno.getEstado());
        ps.setString(6, aluno.getEmail());
        ps.setString(7, aluno.getBairro());
        ps.setString(8, aluno.getInstituicao());
        ps.setInt(9, aluno.getCodigo());
        return ps.execute();
    }

    private void pegarID(Aluno aluno) throws SQLException, ClassNotFoundException {

        PreparedStatement ps = getPrepareStatement("SELECT idaluno FROM aluno WHERE nome = ?");
        ps.setString(1, aluno.getNome());
        ResultSet rs = ps.executeQuery();
        if (rs.next()) {
            aluno.setCodigo(rs.getInt("idaluno"));
        }

    }
}

-------------------------------------------------------------------------------------------------------------------------
ProfessorDAO

public class ProfessorDAO extends Conexao {

    public boolean adicionar(Professor professor) throws SQLException, ClassNotFoundException {

        PreparedStatement ps = getPrepareStatement("INSERT INTO professor VALUES(?,?,?,?)");
        ps.setString(1, professor.getNome());
        ps.setString(2, professor.getTelefone());
        ps.setString(3, professor.getEmail());
        ps.setString(4, professor.getTitulo());
        return ps.execute();
    }

    public boolean alterar(Professor professor) throws SQLException, ClassNotFoundException {

        this.pegarID(professor);

        PreparedStatement ps = getPrepareStatement("UPDATE professor SET nome = ?, telefone = ?, email = ?, titulo = ? WHERE codprofessor = ?");
        ps.setString(1, professor.getNome());
        ps.setString(2, professor.getTelefone());
        ps.setString(3, professor.getEmail());
        ps.setString(4, professor.getTitulo());
        ps.setInt(5, professor.getCodigo());
        return ps.execute();

    }

    public void pegarID(Professor professor) throws SQLException, ClassNotFoundException {

        PreparedStatement ps = getPrepareStatement("SELECT idprofessor FROM professor WHERE nome = ?");
        ps.setString(1, professor.getNome());
        ResultSet rs = ps.executeQuery();
        if (rs.next()) {
            professor.setCodigo(rs.getInt("idprofessor"));
        }

    }

    public boolean deletar(Professor professor) throws SQLException, ClassNotFoundException {
        
        this.pegarID(professor);
        
        PreparedStatement ps = getPrepareStatement("DELETE FROM professor WHERE idprofessor = ?");
        ps.setInt(1, professor.getCodigo());
        return ps.execute();
    }
}
--------------------------------------------------------------------------------------------------------------------------

CursoDAO

public class CursoDAO extends Conexao {

    public boolean adicionar(Curso curso) throws SQLException, ClassNotFoundException {

        PreparedStatement ps = getPrepareStatement("INSERT INTO curso VALUES(?,?,?)");
        ps.setString(1, curso.getNome());
        ps.setInt(2, curso.getPeriodo());
        ps.setDate(3, curso.getDataProva());             
        return ps.execute();
    }

    public void pegarID(Curso curso) throws SQLException, ClassNotFoundException {
        PreparedStatement ps = getPrepareStatement("SELECT idaluno WHERE nome = ?");
        ps.setString(1, curso.getNome());
        ResultSet rs = ps.executeQuery();
        if (rs.next()) {
            curso.setCodigo(rs.getInt("idcurso"));
        }
    }

    public boolean alterar(Curso curso) throws SQLException, ClassNotFoundException {
        this.pegarID(curso);
        PreparedStatement ps = getPrepareStatement("UPDATE curso SET nome = ?,periodo = ?,dataProva = ? WHERE = ?");
        ps.setString(1, curso.getNome());
        ps.setInt(2, curso.getPeriodo());
        ps.setDate(3, curso.getDataProva());
        ps.setInt(4, curso.getCodigo());
        return ps.execute();
    }
}
-------------------------------------------------------------------------------------------------------------------------------------------------


DisciplinaDAO

public class DisciplinaDAO extends Conexao{
    
    public boolean adicionar(Disciplina disciplina) throws SQLException, ClassNotFoundException{
        PreparedStatement ps = getPrepareStatement("INSET INTO disciplina VALUES (?,?,?,?,?)");
        ps.setString(1, disciplina.getNome());
        ps.setString(2, disciplina.getTipoAvaliacao());
        ps.setInt(3, disciplina.getAluno().getCodigo()); // o codigo no caso virá como nullo como resolver isso?
        ps.setInt(5, disciplina.getProfessor().getCodigo());
        ps.setInt(6, disciplina.getCurso().getCodigo());
        return ps.execute();
    }

Como faço para popular esses objetos e ao mesmo tempo os objetos dentro da classe disciplina : aluno,Professor e Curso?

aluno.getCodigo();

curso.getCodigo()

professor.getCodigo()

os getCodigo são as chaves primarias

5 Respostas

fabiozoroastro

Welder, percebe-se que você não está usando nenhum framework para Orm, portanto, eu faria assim:

Classe Disciplina.java:

private Long id;
private String nome;
private Long idCurso;
/**
* Este atributo é utilizado apenas como leitura 
* para facilitar o trabalho com as views
*/
private Curso curso;

// getters & setters

public void setIdCurso(Long idCurso){
   this.idCurso = idCurso;
   if( idCurso != null ){
     this.curso = new Curso( idCurso ) ; // atribui uma nova instância com o id de referência do curso
   }
}

=)

Até mais.

W

fabiozoroastro:
Welder, percebe-se que você não está usando nenhum framework para Orm, portanto, eu faria assim:

Classe Disciplina.java:

private Long id;
private String nome;
private Long idCurso;
/**
* Este atributo é utilizado apenas como leitura 
* para facilitar o trabalho com as views
*/
private Curso curso;

// getters & setters

public void setIdCurso(Long idCurso){
   this.idCurso = idCurso;
   if( idCurso != null ){
     this.curso = new Curso( idCurso ) ; // atribui uma nova instância com o id de referência do curso
   }
}

=)

Até mais.

Olá Fábio,

Mas o problema não é esse, veja bem os atributos das classes Aluno, Professor e Curso já foram inseridos via banco esses mesmos objetos já preenchidos teria que está dentro
da classe disciplina e ai assim usá-los para inserção:

disciplina.getCurso.getCodigo

Se estiver outra forma que resolva fico grato.

fabiozoroastro

Olá Welder,

Você pode usar então, apenas o atributo de relacionamento ao invés de chave(tipo Long) nas suas classes.

Curso curso = cursoDAO.obterPorCodigo(1L); // retorna o curso de chave igual a 1.
Aluno a = new Aluno();
a.setNome("Fabio");
a.setCurso(curso);

No AlunoDAO:

public void adicionar(Aluno a){

//insert blablabla
//a.getCurso().getCodigo();
}

Acho que é isso aí…

Você viu o link que te passei do Orm?

Mesmo que você não utilize nenhum framework, seria interessante você dar uma olhada no link(caso ainda não tenha conhecimento desse padrão).

Atpe mais.

W

Ola Fábio !

Mas para eu pegar o idCurso, idProfessor, idAluno que são chaves primárias teria que ter uma relação:
por exemplo a tabela curso: Existem varios cursos como eu saberia qual o curso daquela usuario logado?
somente com uma chave de aluno em curso, mas minha aplicação e o seguinte quando o usuario logar ele tera a possibilidade
de altera seus dados , cadastrar notas, em cadastrar notas ele ira digitar os dados de professor, e os dados de aluno e curso que já foram digitados
após fazer isso de emediato irá gravar na tabela disciplina onde tenho as chaves de aluno,professor, curso.

No caso do Hibernet irei estudar após a conclusão disso

fabiozoroastro

Welder,

pelo que entendi você ainda não tem o modelo lógico do seu banco de dados.

Sugiro que faça a construção do seu banco primeiro para depois implementar.

Uma sugestão para o seu caso seria criar tabelas assim:

  • Aluno

  • Curso

  • Disciplina

  • Matricula(Armazena dados de matrícula)

  • CursoAluno(Armazena o alunos e seus cursos matriculados)

  • DisciplinaAluno (Armazena os alunos e suas disciplinas matriculadas)

E por aí vai…

Até mais!

Criado 14 de julho de 2011
Ultima resposta 14 de jul. de 2011
Respostas 5
Participantes 2