Olá pessoa, estou tendo um problema de null pointer no sistema que estou desenvolvendo usando MVC & DAO, estou tentando fazer um insert no banco de dados fazendo uso de uma chave estrangeira.
porem ao chegar no insert do DAO em pstm.setInt(1, equipamento.getUnidade().getId()); ao tentar pegar o modelo unidade de equipamento getunidade e pegar seu id, a execução para e aponta:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException: Cannot invoke "model.Unidade.getId()" because the return value of "model.Equipamento.getUnidade()" is null
Equipamento.java
package model;
public class Equipamento {
int id;
Unidade unidade = new Unidade();
String tipoequip;//OBRIGATORIO
String tombo;//SE HOUVER
String serie;//OBRIGATORIO
String fornecedor;//OBRIGATORIO
String fabricante;//OBRIGATORIO
String modelo;//OBRIGATORIO
String status; //Boolean, ou string?
String equipamento;//OBRIGATORIO
String observacao;//NAO
//metodo construtor passando todos campos como obrigatorios
public Equipamento(
int id,
Unidade unidade,
String tipoequip,
String tombo,
String serie,
String fornecedor,
String fabricante,
String modelo,
String status,
String equipamento,
String observacao
) {
this.id = id;
this.unidade = unidade;
this.tipoequip = tipoequip;
this.tombo = tombo;
this.serie = serie;
this.fornecedor = fornecedor;
this.fabricante = fabricante;
this.modelo = modelo;
this.status = status;
this.equipamento = equipamento;
this.observacao = observacao;
}
//metodo construtor passando apenas os campos obrigatorios sem o id
public Equipamento(
Unidade unidade,
String tipoequip,
String tombo,
String serie,
String fornecedor,
String fabricante,
String modelo,
String status,
String equipamento,
String observacao
) {
this.unidade = unidade;
this.tipoequip = tipoequip;
this.tombo = tombo;
this.serie = serie;
this.fornecedor = fornecedor;
this.fabricante = fabricante;
this.modelo = modelo;
this.status = status;
this.equipamento = equipamento;
this.observacao = observacao;
}
//metodo construtor vazio(NÃO APAGUE)
public Equipamento() {}
//getters e setters
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Unidade getUnidade() {
return unidade;
}
public void setUnidade(Unidade unidade) {
this.unidade = unidade;
}
public String getTipoequip() {
return tipoequip;
}
public void setTipoequip(String tipoequip) {
this.tipoequip = tipoequip;
}
public String getTombo() {
return tombo;
}
public void setTombo(String tombo) {
this.tombo = tombo;
}
public String getSerie() {
return serie;
}
public void setSerie(String serie) {
this.serie = serie;
}
public String getFornecedor() {
return fornecedor;
}
public void setFornecedor(String fornecedor) {
this.fornecedor = fornecedor;
}
public String getFabricante() {
return fabricante;
}
public void setFabricante(String fabricante) {
this.fabricante = fabricante;
}
public String getModelo() {
return modelo;
}
public void setModelo(String modelo) {
this.modelo = modelo;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getEquipamento() {
return equipamento;
}
public void setEquipamento(String equipamento) {
this.equipamento = equipamento;
}
public String getObservacao() {
return observacao;
}
public void setObservacao(String observacao) {
this.observacao = observacao;
}
}
Unidade.java
package model;
public class Unidade {
int id;
String unidadenome;
//metodo construtor
public Unidade(int id, String unidadenome) {
this.id = id;
this.unidadenome = unidadenome;
}
//metodo construtor sem id
public Unidade(String unidadenome) {
this.unidadenome = unidadenome;
}
//metodo construtor vazio
public Unidade() {}
//getters e setters
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUnidadenome() {
return unidadenome;
}
public void setUnidadenome(String unidadenome) {
this.unidadenome = unidadenome;
}
public String unidadeToString() {
return getUnidadenome();
}
public boolean equals(Object objeto) {
Unidade u = (Unidade) objeto;
if(this.id == u.getId()) {
return true;
} else {
return false;
}
}
}
EquipamentoDAO.java
package model.DAO;
import controller.Conexao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import model.Equipamento;
import java.sql.ResultSet;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import model.Unidade;
public class EquipamentoDAO {
private final Connection conexao;
//metodo construtor
public EquipamentoDAO(Connection conexao) {
this.conexao = conexao;
}
//função para inserir(insert)
public void inserir(Equipamento equipamento) throws SQLException {
//string sql
String sql = "insert into equipamento(unidade,tipoequip,tombo,serie,fornecedor,fabricante,modelo,status,equipamento,observacao)values (?,?,?,?,?,?,?,?,?,?)";
//criamos um statement para executar a query sql
PreparedStatement pstm = conexao.prepareStatement(sql);
try {
//antes de executar pstm setString
pstm.setInt(1, equipamento.getUnidade().getId());
pstm.setString(2, equipamento.getTipoequip());
pstm.setString(3, equipamento.getTombo());
pstm.setString(4, equipamento.getSerie());
pstm.setString(5, equipamento.getFornecedor());
pstm.setString(6, equipamento.getFabricante());
pstm.setString(7, equipamento.getModelo());
pstm.setString(8, equipamento.getStatus());
pstm.setString(9, equipamento.getEquipamento());
pstm.setString(10, equipamento.getObservacao());
//execute o pstm
pstm.execute();
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, "Error ao inserir equipamento no banco de dados!" + ex);
} finally {
//feche a conexao e o pstm
conexao.close();
pstm.close();
}
}
}
CadastroEquipamentoController.java
package controller;
import controller.helper.CadastroEquipamentoHelper;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import model.Equipamento;
import view.TelaCadastroEquipamento;
import view.TelaPrincipal;
import java.sql.Connection;
import model.DAO.EquipamentoDAO;
import java.sql.SQLException;
import javax.swing.table.DefaultTableModel;
import model.DAO.UnidadeDAO;
import model.Unidade;
public class CadastroEquipamentoController {
//cria arraylist do tipo Equipamento chamado equipamentos
ArrayList<Equipamento> equipamentos = new ArrayList<Equipamento>();
//cria variavel do tipo telacadastroequipamento e CadastroEquipamentoHelper e chamando-as de view e helper
private TelaCadastroEquipamento view;
private CadastroEquipamentoHelper helper;
//cria variavel tipo TelaPrincipal chamada telaprincipal
public TelaPrincipal TelaPrincipal;
//metodo construtor
public CadastroEquipamentoController(TelaCadastroEquipamento view) {
this.view = view;
this.helper = new CadastroEquipamentoHelper(view);
}
//metodo construtor tela principal
public CadastroEquipamentoController(TelaPrincipal viewprincipal) {
this.TelaPrincipal = viewprincipal;
}
//metodo salvar equipamento
public void salvarEquipamento() {
//comparações logicas
if (view.getTxtUnidade().getSelectedIndex() == 0 &&
view.getTxtTipoEquip().getText().trim().isEmpty() &&
view.getTxtTombo().getText().trim().isEmpty() &&
view.getTxtSerie().getText().trim().isEmpty() &&
view.getTxtFornecedor().getText().trim().isEmpty() &&
view.getTxtFabricante().getText().trim().isEmpty() &&
view.getTxtModelo().getText().trim().isEmpty() &&
view.getTxtStatus().getSelectedIndex() == 0 &&
view.getTxtEquipamento().getSelectedIndex() == 0
) {
JOptionPane.showMessageDialog(null, "Campos obrigatorios vazios, preencha-os!!","ATENÇÃO", JOptionPane.WARNING_MESSAGE);
} else if (view.getTxtUnidade().getSelectedIndex() == 0 &&
view.getTxtTombo().getText().trim().isEmpty() &&
view.getTxtSerie().getText().trim().isEmpty()
) {
JOptionPane.showMessageDialog(null, "Combobox unidade, campos tombo e serie vazios preencha-os!","ATENÇÃO", JOptionPane.WARNING_MESSAGE);
} else if (view.getTxtTipoEquip().getText().trim().isEmpty()) {
JOptionPane.showMessageDialog(null, "Campo tipo equip esta vazio preencha-o!","ATENÇÃO", JOptionPane.WARNING_MESSAGE);
} else if (view.getTxtFornecedor().getText().trim().isEmpty()) {
JOptionPane.showMessageDialog(null, "Campo fornecedor esta vazio preencha-o!","ATENÇÃO", JOptionPane.WARNING_MESSAGE);
} else if (view.getTxtFabricante().getText().trim().isEmpty()) {
JOptionPane.showMessageDialog(null, "Campo fabricante esta vazio preencha-o!","ATENÇÃO", JOptionPane.WARNING_MESSAGE);
} else if (view.getTxtModelo().getText().trim().isEmpty()) {
JOptionPane.showMessageDialog(null, "Campo modelo esta vazio preencha-o!","ATENÇÃO", JOptionPane.WARNING_MESSAGE);
} else if (view.getTxtStatus().getSelectedIndex() == 0) {
JOptionPane.showMessageDialog(null, "Combobox status esta vazio preencha-o!","ATENÇÃO", JOptionPane.WARNING_MESSAGE);
} else if (view.getTxtEquipamento().getSelectedIndex() == 0) {
JOptionPane.showMessageDialog(null, "Campo equipamento esta vazio preencha-o!","ATENÇÃO", JOptionPane.WARNING_MESSAGE);
}
//compara se todos os campos foram preenchidos
if (view.getTxtUnidade().getSelectedItem() != null &&
view.getTxtTipoEquip().getText().length() > 0 &&
view.getTxtTombo().getText().length() > 0 &&
view.getTxtSerie().getText().length() > 0 &&
view.getTxtFornecedor().getText().length() > 0 &&
view.getTxtFabricante().getText().length() > 0 &&
view.getTxtModelo().getText().length() > 0 &&
view.getTxtStatus().getSelectedItem() != null &&
view.getTxtEquipamento().getSelectedItem() != null &&
view.getTxtObservacao().getText().trim().isEmpty() ||
!view.getTxtObservacao().getText().trim().isEmpty()
) {
//pega um equipamento da view
Equipamento equipamento = helper.obterModeloSemID();
try {
//cria objeto do tipo connection conexao passando novo Conexao(conexao.java) chamando metodo conectar
Connection conexao = new Conexao().Conectar();
//cria objeto do tipo EquipamentoDAO chamado equipamentoDAO passando novo EquipamentoDAO recebendo conexao
EquipamentoDAO equipamentoDAO = new EquipamentoDAO(conexao);
//arraylist do tipo equipamento chamado equipamentos recebe equipamentoDAO.selecioneallequipamento
equipamentoDAO.inserir(equipamento);
//helper chama o metodo bloquear campos
helper.bloquearCampos();
//helper chama metodo limpar tela(Campos)
helper.limparTela();
//chama tabela equipamentos;
tabelaEquipamentos();
JOptionPane.showMessageDialog(null, "Equipamento inserido com sucesso!");
//pegue exceção sql
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, "Error ao inserir equipamento no banco de dados! /nError:"+ex);
}
}
}
//metodo tabelaEquipamentos
public void tabelaEquipamentos() {
//se a view a tabela for diferente de nulo
if (view.jTabelaCadEquip != null) {
//modelo do tipo defaultablemodel recebe convertendo para defaulttablemodel a view passando a tabela e pegando seu modelo
DefaultTableModel modelo = (DefaultTableModel) view.jTabelaCadEquip.getModel();
//se as linhas do modelo for maior que zero
if (modelo.getRowCount() > 0) {
//sete as linhas como 0
modelo.setRowCount(0);
}
try {
//cria objeto do tipo connection conexao passando novo Conexao(conexao.java) chamando metodo conectar
Connection conexao = new Conexao().Conectar();
//cria objeto do tipo EquipamentoDAO chamado equipamentoDAO passando novo EquipamentoDAO recebendo conexao
EquipamentoDAO equipamentoDAO = new EquipamentoDAO(conexao);
//logins do tipo arraylist do tipo Equipamento recebe equipamentoDAO chamando metodo selecione todos equipamentos
ArrayList<Equipamento> equipamentos = equipamentoDAO.selecioneAllEquipamento();
//para cada equipamento no arraylist equipamentos
for (Equipamento equipamento : equipamentos) {
//quantidade de linhas que o objeto vai ter
Object[] linha = new Object[11];
//pegue as respectivas linhas de cada equipamento e as sete
linha[0] = equipamento.getId();
linha[1] = equipamento.getUnidade().getUnidadenome();
linha[2] = equipamento.getTipoequip();
linha[3] = equipamento.getTombo();
linha[4] = equipamento.getSerie();
linha[5] = equipamento.getFornecedor();
linha[6] = equipamento.getFabricante();
linha[7] = equipamento.getModelo();
linha[8] = equipamento.getStatus();
linha[9] = equipamento.getEquipamento();
linha[10] = equipamento.getObservacao();
//adicione as linhas ao modelo
modelo.addRow(linha);
}
} catch(SQLException ex) {
JOptionPane.showMessageDialog(null, "Error ao preencher tabela!" + ex);
}
}
}
public void atualizaUnidade() {
try {
//buscar unidade no banco de dados
//cria objeto do tipo connection conexao passando novo Conexao(conexao.java) chamando metodo conectar
Connection conexao = new Conexao().Conectar();
//cria objeto do tipo UnidadeDAO unidadedao passando UnidadeDAO recebendo conexao
UnidadeDAO unidadedao = new UnidadeDAO(conexao);
//cria arraylist de unidade chamado unidades passando o objeto unidadedao do tipo Unidade chamando o metodo selecioneAllUnidade
ArrayList<Unidade> unidades = unidadedao.selecioneAllUnidade();
//exibir login nome no combobox nome
helper.preencherUnidade(unidades);
} catch(SQLException ex) {
JOptionPane.showMessageDialog(null,"Error a preencher combobox unidade:" +ex);
}
}
}
CadastroEquipamentoHelper.java
package controller.helper;
import java.util.ArrayList;
import javax.swing.DefaultComboBoxModel;
import model.Equipamento;
import model.Unidade;
import view.TelaCadastroEquipamento;
public class CadastroEquipamentoHelper {
private final TelaCadastroEquipamento view;
//metodo construtor
public CadastroEquipamentoHelper(TelaCadastroEquipamento view) {
this.view = view;
}
//metodo obter modelo sem id apenas para a inserção dos campos mais importantes
public Equipamento obterModeloSemID() {
Unidade unidade = obterUnidade();//Unidade unidade recebe metodo obter unidade neste helper
String tipoequip = view.getTxtTipoEquip().getText();//String tipoequip recebe view pegue o getTextUnidade e pegue o texto
String tombo = view.getTxtTombo().getText();//String tombo recebe view pegue o getTxtTombo e pegue o texto
String serie = view.getTxtSerie().getText();//String serie recebe view pegue o getTxtSerie e pegue o texto
String fornecedor = view.getTxtFornecedor().getText();//String fornecedor recebe view pegue o getTxtFornecedor e pegue o texto
String fabricante = view.getTxtFabricante().getText();//String fabricante recebe view pegue o get TxtFabricante e pegue o texto
String modelo = view.getTxtModelo().getText();//String modelo recebe view pegue o getTxtmodelo e pegue o texto
String status = view.getTxtStatus().getSelectedItem().toString();//String status recebe view pegue o getselecteditem para string
String equipamentouni = view.getTxtEquipamento().getSelectedItem().toString();//String equipamentouni recebe view pegue o getselected item para string
String observacao = view.getTxtObservacao().getText();//String observacao recebe view pegue o getTextObservacao e pegue o texto
//construir objeto do tipo equipamento
Equipamento equipamento = new Equipamento(unidade, tipoequip, tombo, serie, fornecedor, fabricante, modelo, status, equipamentouni, observacao);
return equipamento;
}
//metodo obter modelo com todos os campos
public Equipamento obterModelo() {
Integer id = Integer.parseInt(view.getTxtId().getText());
Unidade unidade = obterUnidade();//Unidade unidade recebe metodo obter unidade neste helper
String tipoequip = view.getTxtTipoEquip().getText();//String tipoequip recebe view pegue o getTextUnidade e pegue o texto
String tombo = view.getTxtTombo().getText();//String tombo recebe view pegue o getTxtTombo e pegue o texto
String serie = view.getTxtSerie().getText();//String serie recebe view pegue o getTxtSerie e pegue o texto
String fornecedor = view.getTxtFornecedor().getText();//String fornecedor recebe view pegue o getTxtFornecedor e pegue o texto
String fabricante = view.getTxtFabricante().getText();//String fabricante recebe view pegue o get TxtFabricante e pegue o texto
String modelo = view.getTxtModelo().getText();//String modelo recebe view pegue o getTxtmodelo e pegue o texto
String status = view.getTxtStatus().getSelectedItem().toString();//String status recebe view pegue o getselecteditem para string
String equipamentouni = view.getTxtEquipamento().getSelectedItem().toString();//String equipamentouni recebe view pegue o getselected item para string
String observacao = view.getTxtObservacao().getText();//String observacao recebe view pegue o getTextObservacao e pegue o texto
//construir objeto do tipo equipamento
Equipamento equipamento = new Equipamento(id, unidade, tipoequip, tombo, serie, fornecedor, fabricante, modelo, status, equipamentouni, observacao);
return equipamento;
}
//metodo para setar modelo
public void setModelo() {
int setar = view.jTabelaCadEquip.getSelectedRow();
view.txtId.setText(view.jTabelaCadEquip.getModel().getValueAt(setar, 0).toString());
view.txtUnidade.setSelectedItem(view.jTabelaCadEquip.getModel().getValueAt(setar, 1).toString());
view.txtTipoEquip.setText(view.jTabelaCadEquip.getModel().getValueAt(setar, 2).toString());
view.txtTombo.setText(view.jTabelaCadEquip.getModel().getValueAt(setar, 3).toString());
view.txtSerie.setText(view.jTabelaCadEquip.getModel().getValueAt(setar, 4).toString());
view.txtFornecedor.setText(view.jTabelaCadEquip.getModel().getValueAt(setar, 5).toString());
view.txtFabricante.setText(view.jTabelaCadEquip.getModel().getValueAt(setar, 6).toString());
view.txtModelo.setText(view.jTabelaCadEquip.getModel().getValueAt(setar, 7).toString());
view.txtStatus.setSelectedItem(view.jTabelaCadEquip.getModel().getValueAt(setar, 8).toString());
view.txtEquipamento.setSelectedItem(view.jTabelaCadEquip.getModel().getValueAt(setar, 9).toString());
view.txtObservacao.setText(view.jTabelaCadEquip.getModel().getValueAt(setar, 10).toString());
}
//metodo para limpar os campos
public void limparTela() {
view.getTxtUnidade().removeAllItems();
view.getTxtTipoEquip().setText("");
view.getTxtTombo().setText("");
view.getTxtSerie().setText("");
view.getTxtFornecedor().setText("");
view.getTxtFabricante().setText("");
view.getTxtModelo().setText("");
view.getTxtStatus().removeAllItems();
view.getTxtEquipamento().removeAllItems();
view.getTxtObservacao().setText("");
view.getjTabelaCadEquip().clearSelection();
}
//metodo para bloquear os campos
public void bloquearCampos() {
view.getTxtUnidade().setEnabled(false);
view.getTxtTipoEquip().setEnabled(false);
view.getTxtTombo().setEnabled(false);
view.getTxtSerie().setEnabled(false);
view.getTxtFornecedor().setEnabled(false);
view.getTxtFabricante().setEnabled(false);
view.getTxtModelo().setEnabled(false);
view.getTxtStatus().setEnabled(false);
view.getTxtEquipamento().setEnabled(false);
view.getTxtObservacao().setEnabled(false);
view.btnEditar.setEnabled(false);
view.btnSalvar.setEnabled(false);
view.btnExcluir.setEnabled(true);
view.btnPesquisar.setEnabled(false);
}
//metodo para desbloquear campos
public void desbloquearCampos() {
view.getTxtUnidade().setEnabled(true);
view.getTxtTipoEquip().setEnabled(true);
view.getTxtTombo().setEnabled(true);
view.getTxtSerie().setEnabled(true);
view.getTxtFornecedor().setEnabled(true);
view.getTxtFabricante().setEnabled(true);
view.getTxtModelo().setEnabled(true);
view.getTxtStatus().setEnabled(true);
view.getTxtEquipamento().setEnabled(true);
view.getTxtObservacao().setEnabled(true);
view.btnEditar.setEnabled(true);
view.btnExcluir.setEnabled(true);
view.btnSalvar.setEnabled(true);
view.btnPesquisar.setEnabled(true);
}
public Unidade obterUnidade() {
view.getTxtUnidade().removeAllItems();
return (Unidade) view.getTxtUnidade().getSelectedItem();
}
public void preencherUnidade(ArrayList<Unidade> unidades) {
view.getTxtUnidade().removeAllItems();
DefaultComboBoxModel combomodel = (DefaultComboBoxModel) view.getTxtUnidade().getModel();
for(Unidade unidade : unidades) {
combomodel.addElement(unidade.unidadeToString());
}
}
}
Abreviei parte do codigo para não ficar muito extenso:
Projeto no github:GitHub - YUSEIRENDER/SemurrCEI