Estou desenvolvendo uma aplicação em java para o estagio, porem, na hora do cadastro, a minha aplicação não salva os dados no banco, poderiam me ajudar? As classes foram feitas a partir de um tutorial no youtube
Classe FabricanteBean
package br.com.drogaria.bean;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.model.ListDataModel;
import br.com.drogaria.dao.FabricanteDAO;
import br.com.drogaria.domain.Fabricante;
@ManagedBean(name = "MBFabricante")
@ViewScoped
public class FabricanteBean {
private Fabricante fabricante;
public Fabricante getFabricante() {
return fabricante;
}
public void setFabricante(Fabricante fabricante) {
this.fabricante = fabricante;
}
private ListDataModel<Fabricante> itens;
public ListDataModel<Fabricante> getItens() {
return itens;
}
public void setItens(ListDataModel<Fabricante> itens) {
this.itens = itens;
}
@PostConstruct
public void prepararPesquisa() {
FabricanteDAO dao = new FabricanteDAO();
try {
ArrayList<Fabricante> lista;
lista = dao.listar();
itens = new ListDataModel<Fabricante>(lista);
} catch (SQLException e) {
e.printStackTrace();
}
}
public void prepararNovo() {
fabricante = new Fabricante();
}
public void novo() {
try {
FabricanteDAO dao = new FabricanteDAO();
dao.salvar(fabricante);
ArrayList<Fabricante> lista = dao.listar();
itens = new ListDataModel<Fabricante>(lista);
} catch (SQLException ex) {
ex.printStackTrace();
}
}
}
Classe FabricanteDAO
package br.com.drogaria.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import br.com.drogaria.domain.Fabricante;
import br.com.drogaria.factory.ConexaoFactory;
public class FabricanteDAO {
public void salvar(Fabricante f) throws SQLException {
StringBuilder sql = new StringBuilder(); // utiliza um metodo de junção de strings.
sql.append("INSERT INTO drogaria_fabricante "); // juntar coisas
sql.append("(descricao) ");
sql.append("VALUES(?)");
Connection conexao = ConexaoFactory.conectar();
PreparedStatement comando = conexao.prepareStatement(sql.toString());
comando.setString(1, f.getDescricao());
comando.executeUpdate(); // execute o comando sql
}
public void excluir(Fabricante f) throws SQLException {
// Definir a query
StringBuilder sql = new StringBuilder();
sql.append("DELETE FROM drogaria_fabricante ");
sql.append("WHERE codigo = ?");
// Conectar ao banco de dados
Connection conexao = ConexaoFactory.conectar();
// Substituir os valores
PreparedStatement comando = conexao.prepareStatement(sql.toString());
comando.setLong(1, f.getCodigo());
// Executa a query
comando.executeUpdate();
}
public void editar(Fabricante f) throws SQLException {
StringBuilder sql = new StringBuilder();
sql.append("UPDATE drogaria_fabricante ");
sql.append("SET descricao = ? ");
sql.append("WHERE codigo = ? ");
Connection conexao = ConexaoFactory.conectar();
PreparedStatement comando = conexao.prepareStatement(sql.toString());
comando.setString(1, f.getDescricao());
comando.setLong(2, f.getCodigo());
comando.executeUpdate();
}
public Fabricante buscarPorCodigo(Fabricante f) throws SQLException {
// defenir a query
StringBuilder sql = new StringBuilder();
sql.append("SELECT codigo, descricao ");
sql.append("FROM drogaria_fabricante ");
sql.append("WHERE codigo = ? ");
// conectar ao banco
Connection conexao = ConexaoFactory.conectar();
// substituir os valores das interrogações
PreparedStatement comando = conexao.prepareStatement(sql.toString());
comando.setLong(1, f.getCodigo());
// ResultSet = interface usada para guardar os dados vindos do banco de dados. O
// resultado sera guardado na variavel resultado
ResultSet resultado = comando.executeQuery();
// a variavel vai guardar o fabricante da pesquisa. Quando não for encontrado
// nenhum fabricante, o retorno sera igual a null.
Fabricante retorno = null;
if (resultado.next()) {
retorno = new Fabricante();
retorno.setCodigo(resultado.getLong("codigo"));
retorno.setDescricao(resultado.getString("descricao"));
}
return retorno;
}
public ArrayList<Fabricante> listar() throws SQLException{
StringBuilder sql = new StringBuilder();
sql.append("SELECT codigo, descricao ");
sql.append("FROM drogaria_fabricante ");
sql.append("ORDER BY codigo ASC ");
Connection conexao = ConexaoFactory.conectar();
PreparedStatement comando = conexao.prepareStatement(sql.toString());
ResultSet resultado = comando.executeQuery();
ArrayList<Fabricante> lista = new ArrayList<Fabricante>();
while(resultado.next()) {
Fabricante f = new Fabricante();
f.setCodigo(resultado.getLong("codigo"));
f.setDescricao(resultado.getString("descricao"));
lista.add(f);
}
return lista;
}
public ArrayList<Fabricante> buscarPorDescricao(Fabricante f) throws SQLException{
StringBuilder sql = new StringBuilder();
sql.append("SELECT codigo, descricao ");
sql.append("FROM drogaria_fabricante ");
sql.append("WHERE descricao LIKE ? ");
sql.append("ORDER BY descricao ASC ");
Connection conexao = ConexaoFactory.conectar();
PreparedStatement comando = conexao.prepareStatement(sql.toString());
comando.setString(1, "%" + f.getDescricao() + "%");
ResultSet resultado = comando.executeQuery();
ArrayList<Fabricante> lista = new ArrayList<Fabricante>();
while(resultado.next()) {
Fabricante item = new Fabricante();
item.setCodigo(resultado.getLong("codigo"));
item.setDescricao(resultado.getString("descricao"));
lista.add(item);
}
return lista;
}
obs: Se eu rodar a classe como java application, ela consegue inserir.
Classe Fabricante:
package br.com.drogaria.domain;
public class Fabricante {
private Long codigo;
private String descricao;
public Long getCodigo() {
return codigo;
}
public void setCodigo(Long codigo) {
this.codigo = codigo;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao.toUpperCase();
}
@Override
public String toString() {
String saida = "\nCodigo do fabricante: " + codigo + "\nDescricao: " + descricao;
return saida;
}
}
XHTML:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui"
template="/templates/modeloSistema.xhtml">
<ui:define name="menu">
<ui:include src="/includes/menuPrincipal.xhtml" />
</ui:define>
<ui:define name="conteudo">
<h:form id="frmFabListagem">
<p:dataTable id="tblFabricantes" emptyMessage="Não foram encontrados registros."
value="#{MBFabricante.itens}" var="item" paginator="true" rows="10">
<f:facet name="header">
Lista De Fabricantes
</f:facet>
<p:column headerText="Código" sortBy="#{item.codigo}"
filterBy="#{item.codigo}">
<h:outputText value="#{item.codigo}" />
</p:column>
<p:column headerText="Descrição " sortBy="#{item.descricao}"
filterBy="#{item.descricao}">
<h:outputText value="#{item.descricao}" />
</p:column>
<f:facet name="footer">
<p:commandButton value="Novo" actionListener="#{MBFabricante.prepararNovo}" oncomplete="PF('dlgFabNovo').show();"/>
</f:facet>
</p:dataTable>
</h:form>
<p:dialog widgetVar="dlgFabNovo" closable="false" draggable="false" resizable="false" modal="true" appendTo="@(body)" header="Cadastro de novo Fabricante">
<h:form>
<h:panelGrid columns="2">
<p:outputLabel value="INSIRA A DESCRIÇÃO"/>
<p:inputText size="55" maxlength="50" value="#{MBFabricante.fabricante.descricao}"/>
</h:panelGrid>
<h:panelGrid columns="2">
<p:commandButton value="GRAVAR" actionListener="#{MBFabricante.novo}" oncomplete="PF('dlgFabNovo').hide();" />
<p:commandButton value="CANCELAR" onclick="PF('dlgFabNovo').hide();"/>
</h:panelGrid>
</h:form>
</p:dialog>
</ui:define>
</ui:composition>
Alguém poderia me ajuda?