Pessoal, estou com dificuldade para fazer um CRUD funcionar, utilizando DAO.
Se for possível, gostaria de uma ajuda de você para descobrir oque está errado.
Abaixo segue o código.
Classe de conexão com o banco.
public class ConnectionEcommerceFactory {
public static Connection getConnection() throws EcommerceDAOException{
try{
Class.forName("com.mysql.jdbc.Driver");
return DriverManager.getConnection("jdbc:mysql://localhost/webecommerce","root","");
}catch (Exception e) {
throw new EcommerceDAOException(e.getMessage());
}
}
public static void closeConnection(Connection con, Statement ps)
throws EcommerceDAOException{
close(con,ps,null);
}
public static void closeConnection(Connection con)
throws EcommerceDAOException{
close(con, null, null);
}
public static void close(Connection con, Statement ps, ResultSet rs)
throws EcommerceDAOException {
try{
if(rs != null) rs.close();
if(ps!= null) ps.close();
if(con != null) con.close();
}catch (Exception e) {
throw new EcommerceDAOException(e.getMessage());
}
}
}
O bean.
public class FornecedorBean {
private Fornecedor fornecedor = new Fornecedor();
private DataModel model;
public String novoFornecedor(){
this.fornecedor = new Fornecedor();
return "novoFornecedor";
}
public DataModel getTodos() throws EcommerceDAOException{
InterfaceFonecedorDAO dao = new FornecedorDao();
this.model = new ListDataModel(dao.todosFornecedores());
return model;
}
public String create() throws EcommerceDAOException{
InterfaceFonecedorDAO dao = new FornecedorDao();
dao.salvar(fornecedor);
return "sucesso_create";
}
public String editar(){
Fornecedor fornecedor = getFornecedorFromEditOrDelete();
setFornecedor(fornecedor);
return "altFornecedor";
}
public String excluir() throws EcommerceDAOException{
InterfaceFonecedorDAO dao = new FornecedorDao();
Fornecedor fornecedor = getFornecedorFromEditOrDelete();
dao.excluir(fornecedor);
return "sucesso_exc";
}
public Fornecedor getFornecedorFromEditOrDelete(){
Fornecedor fornecedor = (Fornecedor) model.getRowData();
return fornecedor;
}
public Fornecedor getFornecedor() {
return fornecedor;
}
public void setFornecedor(Fornecedor fornecedor) {
this.fornecedor = fornecedor;
}
}
A interface DAO.
public interface InterfaceFonecedorDAO {
void atualizar(Fornecedor fornecedor) throws EcommerceDAOException;
void salvar(Fornecedor fornecedor) throws EcommerceDAOException;
void excluir(Fornecedor fornecedor) throws EcommerceDAOException;
List todosFornecedores() throws EcommerceDAOException;
}
A classe fornecedor DAO.
public class FornecedorDao implements InterfaceFonecedorDAO {
private Connection con;
public FornecedorDao() throws EcommerceDAOException {
try{
this.con = ConnectionEcommerceFactory.getConnection();
} catch (Exception e) {
throw new EcommerceDAOException("Erro: " + ":\n" + e.getMessage());
}
}
@Override
public void salvar(Fornecedor fornecedor) throws EcommerceDAOException {
PreparedStatement ps = null;
Connection con = null;
if(fornecedor == null)
throw new EcommerceDAOException("O valor passado não pode ser nulo!");
try{
String sql = "INSERT INTO fornecedor (nome) values (?)";
con = this.con;
ps = con.prepareStatement(sql);
ps.setString(1,fornecedor.getNome());
} catch (SQLException e) {
throw new EcommerceDAOException("Erro ao inserir dados! " + e);
} finally{
ConnectionEcommerceFactory.closeConnection(con, ps);
}
}
@Override
public void excluir(Fornecedor fornecedor) throws EcommerceDAOException {
PreparedStatement ps = null;
Connection con = null;
if (fornecedor == null)
throw new EcommerceDAOException("O valor passado não pode ser nulo");
try {
con = this.con;
ps = con.prepareStatement("delete from fornecedor where nome=?");
ps.setString(1, fornecedor.getNome());
ps.executeUpdate();
} catch (SQLException e) {
throw new EcommerceDAOException("Erro ao excluir dados: " + e);
} finally {
ConnectionEcommerceFactory.closeConnection(con, ps);
}
}
@Override
public List todosFornecedores() throws EcommerceDAOException {
PreparedStatement ps = null;
Connection con = null;
ResultSet rs = null;
try {
con = this.con;
ps = con.prepareStatement("select * from fornecedor");
rs = ps.executeQuery();
List<Fornecedor> list = new ArrayList<Fornecedor>();
while (rs.next()) {
String nome = rs.getString(1);
list.add(new Fornecedor(nome));
}
return list;
} catch (SQLException e) {
throw new EcommerceDAOException(e);
} finally {
ConnectionEcommerceFactory.close(con, ps, rs);
}
}
@Override
public void atualizar(Fornecedor fornecedor) throws EcommerceDAOException {
PreparedStatement ps = null;
Connection con = null;
if (fornecedor == null)
throw new EcommerceDAOException("O valor não pode ser nulo");
try {
String sql = "UPDATE fornecedor SET nome=?";
con = this.con;
ps = con.prepareStatement(sql);
ps.setString(1, fornecedor.getNome());
ps.executeUpdate();
} catch (SQLException e) {
throw new EcommerceDAOException("Erro ao atualizar os dados " + e);
} finally {
ConnectionEcommerceFactory.closeConnection(con, ps);
}
}
}
E por ultimo a página novoFornecedor.xhtml.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head></h:head>
<h:body>
<f:view>
<h:form id="cadastro">
<rich:panel>
<f:facet name="header">
<h:outputText value="Cadastro de Fornecedores" />
</f:facet>
<h:panelGrid columns="3">
<h:outputText value="Nome" />
<h:inputText value="#{fornecedorBean.fornecedor.nome}"
id="fornecedor" label="Fornecedor" required="true" />
<rich:messages for="fornecedor">
<f:facet name="errorMarker">
<h:graphicImage value="/images/error.gif" />
</f:facet>
</rich:messages>
<f:facet name="footer">
<a4j:commandButton action="#{fornecedorBean.create()}"
value="Cadastrar"></a4j:commandButton>
</f:facet>
</h:panelGrid>
</rich:panel>
</h:form>
</f:view>
</h:body>
</html>
Quando vou cadastrar um novo fornecedor não é gerada nenhuma exception mais também não é inserido nada no banco.