Olá, sou nova por aqui, então por favor, me perdoem qualquer erro.
Estou aprendendo programação em java na faculdade, e me foi proposto o seguinte exercício:
**Criar um projeto em Java, de acordo com os requisitos abaixo e as explicações do professor no laboratório:
- Um aluno (matricula e nome) pode ter várias disciplinas (codigo e nome).
- Cada disciplina pode ter vários alunos.
- Boletim se refere a um aluno em uma disciplina. Portanto, deverá ter um atributo Aluno e um atributo Disciplina. Ele deverá conter nota1, nota2, mediaFinal, frequencia, aprovado (boolean).
- Criar as três classes e relacionamentos, bem como gets, sets e os outros serviços.
- Boletim deverá ter um serviço ToString, que deverá imprimir o nome do aluno, da disciplina, as notas, a frequencia e se foi ou não aprovado;
- As outras classes devem possuir serviço ToString;
- Boletim deverá ter um serviço chamado avaliarAluno(), que deverá registrar se o aluno foi aprovado na disciplina do boletim, desde que a média final seja maior ou igual a 6, e a frequencia maior que 75.
- Criar e testar os serviços de conexão (Factory) e acesso a dados (DAO), que deverá incluir, alterar, excluir, obter uma lista e obter um único objeto para todas as classes do modelo. Atente para o Boletim, que depende de outros objetos como atributo.
- Realizar Testes em uma classe Executável no pacote “visao”.**
Já consegui fazer boa parte do programa.Ele já adiciona Alunos disciplinas e boletins no banco de dados(Estou usando o postgresql), porém não estou conseguindo fazer a parte da consulta do boletim no BD . Consigo consultar e e retornar para o programa as informações de alunos e disciplinas, mas não estou conseguindo fazer o mesmo com o boletim.
Seguem do meu código, as classes boletim e Cadastro_AlunosDao:
`package model;
public class Boletim {
private int id;
private int idA;
private int idD;
private Aluno aluno;
private Disciplina disciplina;
private double nota1;
private double nota2;
private double mediaFinal;
private double frequencia;
private boolean aprovado;
public Boletim() {
}
public Boletim(Aluno aluno, Disciplina disciplina) {
this.aluno = aluno;
this.disciplina = disciplina;
}
public void setId(int id) {
this.id = id;
}
public void setIdAluno(int idA) {
this.idA = idA;
}
public void setIdDisciplina(int idD) {
this.idD = idD;
}
public void setAluno(Aluno aluno) {
this.aluno = aluno;
}
public void setDisciplina(Disciplina disciplina) {
this.disciplina = disciplina;
}
public void setNota1(double nota1) {
this.nota1 = nota1;
}
public void setNota2(double nota2) {
this.nota2 = nota2;
}
public void setMediaFinal(double mediaFinal) {
this.mediaFinal = mediaFinal;
}
public void setFrequencia(double frequencia) {
this.frequencia = frequencia;
}
public void setAprovado(boolean aprovado) {
this.aprovado = aprovado;
}
public int getId() {
return id;
}
public int getIdA() {
return idA;
}
public int getIdD() {
return idD;
}
public Aluno getAluno() {
return aluno;
}
public Disciplina getDisciplina() {
return disciplina;
}
public double getNota1() {
return nota1;
}
public double getNota2() {
return nota2;
}
public double getMediaFinal() {
return mediaFinal;
}
public double getFrequencia() {
return frequencia;
}
public boolean isAprovado() {
return aprovado;
}
public void calcularMediaFinal() {
mediaFinal = (nota1 + nota2)/2;
}
public void avaliarAluno() {
if(mediaFinal >= 6.0 && frequencia > 75.0) {
aprovado = true;
}else {
aprovado = false;
}
}
@Override
public String toString(){
String str = "";
str += this.aluno.toString();
str += this.disciplina.toString();
str += "\nId do aluno: " + this.idA;
str += "\nId da Disciplina: " + this.idD;
str += "\nNota 1: " + this.nota1;
str += "\nNota 2: " + this.nota2;
str += "\nFrequência: " + this.frequencia;
str += "\nMédia final: " + this.mediaFinal;
str += "\nAprovado? " + this.aprovado;
return str;
}
}
`
`package dao;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import model.Aluno;
import model.Boletim;
import model.Disciplina;
public class Cadastro_AlunosDao {
private Connection conexao;
public Cadastro_AlunosDao() {
this.conexao = new ConnectionFactory().getConnection();
}
public void add_Aluno(Aluno aluno) {
String sql = "";
sql += "INSERT INTO ALUNOS(AL_NOME , AL_MATRICULA)";
sql += "VALUES (? , ?)";
try {
PreparedStatement stm = this.conexao.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
stm.setString(1, aluno.getNome());
stm.setInt(2, aluno.getMatricula());
int quantidade = stm.executeUpdate();
ResultSet generatedKeys = stm.getGeneratedKeys();
if(generatedKeys.next()) {
int id = 0;
id = generatedKeys.getInt("al_id");
aluno.setId(id);
}
System.out.println("Atualizados " + quantidade + " registros na tabela Alunos.\n");
}catch(Exception e){
e.printStackTrace();
}
}
public void add_Disciplina(Disciplina disciplina) {
String sql = "";
sql += "INSERT INTO DISCIPLINAS(DIS_CODIGO , DIS_NOME)";
sql += "VALUES (? , ?)";
try {
PreparedStatement stm = this.conexao.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
stm.setInt(1, disciplina.getCodigo());
stm.setString(2, disciplina.getNome());
int quantidade = stm.executeUpdate();
ResultSet generatedKeys = stm.getGeneratedKeys();
if(generatedKeys.next()) {
int id = 0;
id = generatedKeys.getInt("dis_id");
disciplina.setId(id);
}
System.out.println("Atualizados " + quantidade + " registros na tabela Disciplinas.\n");
}catch(Exception e){
e.printStackTrace();
}
}
public void add_Boletim(Boletim boletim) {
String sql = "";
sql += "INSERT INTO BOLETINS(AL_ID, DIS_ID, BOL_NOTA1, BOL_NOTA2, BOL_MEDIAFINAL, BOL_FREQUENCIA, BOL_APROVADO)";
sql += "VALUES (?, ?, ?, ?, ?, ?, ?)";
try {
PreparedStatement stm = this.conexao.prepareStatement(sql);
stm.setInt(1, boletim.getAluno().getId());
stm.setInt(2, boletim.getDisciplina().getId());
stm.setDouble(3, boletim.getNota1());
stm.setDouble(4,boletim.getNota2());
stm.setDouble(5, boletim.getMediaFinal());
stm.setDouble(6, boletim.getFrequencia());
stm.setBoolean(7, boletim.isAprovado());
int quantidade = stm.executeUpdate();
System.out.println("Atualizados" + quantidade + " registros na tabela Boletins. \n");
}catch(Exception e) {
e.printStackTrace();
}
}
public void excluir_Aluno(Aluno aluno) {
String sql = "";
sql += "DELETE FROM ALUNOS WHERE AL_ID = ?";
try {
PreparedStatement Stm = this.conexao.prepareStatement(sql);
Stm.setInt(1, aluno.getId());
Stm.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
}
public void excluir_Disciplina(Disciplina disciplina) {
String sql = "";
sql += "DELETE FROM DISCIPLINAS WHERE DIS_ID = ?";
try {
PreparedStatement Stm = this.conexao.prepareStatement(sql);
Stm.setInt(1, disciplina.getId());
Stm.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
}
public void excluir_Boletim(Boletim boletim) {
String sql = "";
sql += "DELETE FROM BOLETINS WHERE BOL_ID = ?";
try {
PreparedStatement Stm = this.conexao.prepareStatement(sql);
Stm.setInt(1, boletim.getId());
Stm.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
}
public Aluno getAlInstance(int chave) {
String sql = "";
sql += "SELECT ALUNOS.* FROM ALUNOS WHERE ALUNOS.AL_ID = ?";
Aluno alunoPraRetornar = new Aluno();
try {
PreparedStatement stm = this.conexao.prepareStatement(sql);
stm.setInt(1, chave);
ResultSet rs = stm.executeQuery();
while (rs.next()) {
alunoPraRetornar.setId(rs.getInt("AL_ID"));
alunoPraRetornar.setMatricula(rs.getInt("AL_MATRICULA"));
alunoPraRetornar.setNome(rs.getString("AL_NOME"));
}
} catch (Exception e){
e.printStackTrace();
}
return alunoPraRetornar;
}
public Disciplina getDisInstance(int chave) {
String sql = "";
sql += "SELECT DISCIPLINAS.* FROM DISCIPLINAS WHERE DISCIPLINAS.DIS_ID = ?";
Disciplina disciplinaPraRetornar = new Disciplina();
try {
PreparedStatement stm = this.conexao.prepareStatement(sql);
stm.setInt(1, chave);
ResultSet rs = stm.executeQuery();
while (rs.next()) {
disciplinaPraRetornar.setId(rs.getInt("DIS_ID"));
disciplinaPraRetornar.setCodigo(rs.getInt("DIS_CODIGO"));
disciplinaPraRetornar.setNome(rs.getString("DIS_NOME"));
}
} catch (Exception e){
e.printStackTrace();
}
return disciplinaPraRetornar;
}
public Boletim getBolAlInstance(int chave) {
String sql = "";
sql += "SELECT BOLETINS.al_id, BOLETINS.dis_id, bol_nota1, bol_nota2, bol_mediafinal, bol_frequencia, bol_aprovado, bol_id,AL_NOME, AL_MATRICULA, DIS_NOME, DIS_CODIGO FROM public.boletins INNER JOIN ALUNOS ON(BOLETINS.AL_ID = ALUNOS.AL_ID) INNER JOIN DISCIPLINAS ON (BOLETINS.DIS_ID = DISCIPLINAS.DIS_ID) WHERE BOLETINS.AL_ID = ?";
Boletim boletimPraRetornar = new Boletim();
try {
PreparedStatement stm = this.conexao.prepareStatement(sql);
stm.setInt(1, chave);
ResultSet rs = stm.executeQuery();
while (rs.next()) {
boletimPraRetornar.setId(rs.getInt("BOL_ID"));
boletimPraRetornar.setIdAluno(rs.getInt("AL_ID"));
boletimPraRetornar.getAluno().setNome(rs.getString("AL_NOME"));
boletimPraRetornar.getAluno().setMatricula(rs.getInt("AL_MATRICULA"));
boletimPraRetornar.setIdDisciplina(rs.getInt("DIS_ID"));
boletimPraRetornar.getDisciplina().setNome(rs.getString("DIS_NOME"));
boletimPraRetornar.getDisciplina().setCodigo(rs.getInt("DIS_CODIGO"));
boletimPraRetornar.setNota1(rs.getDouble("BOL_NOTA1"));
boletimPraRetornar.setNota2(rs.getDouble("BOL_NOTA2"));
boletimPraRetornar.setMediaFinal(rs.getDouble("BOL_MEDIAFINAL"));
boletimPraRetornar.setFrequencia(rs.getDouble("BOL_FREQUENCIA"));
boletimPraRetornar.setAprovado(rs.getBoolean("BOL_APROVADO"));
}
} catch (Exception e){
e.printStackTrace();
}
return boletimPraRetornar;
}
}`
Quando executo o programa, chamando o método getBolAlInstance() ocorre o seguinte erro:
java.lang.NullPointerException
at dao.Cadastro_AlunosDao.getBolAlInstance(Cadastro_AlunosDao.java:228)
at view.Teste.main(Teste.java:51)
Exception in thread “main” java.lang.NullPointerException
at model.Boletim.toString(Boletim.java:122)
at view.Teste.main(Teste.java:52)