Erro ao testar Classe de produto
Conforme pedido, estas são minhas classes. Desde já abrigado!
Classe Produto
package treinamento.entidade;
import java.io.Serializable;import java.math.BigDecimal;import java.util.Collection;import javax.persistence.Basic;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.Id;import javax.persistence.JoinColumn;import javax.persistence.ManyToOne;import javax.persistence.NamedQueries;import javax.persistence.NamedQuery;import javax.persistence.OneToMany;import javax.persistence.Table;import javax.xml.bind.annotation.XmlRootElement;import javax.xml.bind.annotation.XmlTransient;
/** * * @author nsouza */@Entity@Table(name = "PRODUTO")@XmlRootElement@NamedQueries({ @NamedQuery(name = "Produto.findAll", query = "SELECT p FROM Produto p"), @NamedQuery(name = "Produto.findByIdProduto", query = "SELECT p FROM Produto p WHERE p.idProduto = :idProduto"), @NamedQuery(name = "Produto.findByNome", query = "SELECT p FROM Produto p WHERE p.nome = :nome"), @NamedQuery(name = "Produto.findByVlrUnitario", query = "SELECT p FROM Produto p WHERE p.vlrUnitario = :vlrUnitario"), @NamedQuery(name = "Produto.findByQtdeEstoque", query = "SELECT p FROM Produto p WHERE p.qtdeEstoque = :qtdeEstoque")})public class Produto implements Serializable { @OneToMany(mappedBy = "idProduto") private Collection<Saida> saidaCollection; private static final long serialVersionUID = 1L; @Id @Basic(optional = false) @Column(name = "ID_PRODUTO") private Integer idProduto; @Column(name = "NOME") private String nome; // @Max(value=?) @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation @Column(name = "VLR_UNITARIO") private Float vlrUnitario; @Column(name = "QTDE_ESTOQUE") private Integer qtdeEstoque; @JoinColumn(name = "IDFORN", referencedColumnName = "IDFORN") @ManyToOne private Fornecedor idforn;
public Produto() { }
public Produto(Integer idProduto) { this.idProduto = idProduto; }
public Integer getIdProduto() { return idProduto; }
public void setIdProduto(Integer idProduto) { this.idProduto = idProduto; }
public String getNome() { return nome; }
public void setNome(String nome) { this.nome = nome; }
public Float getVlrUnitario() { return vlrUnitario; }
public void setVlrUnitario(Float vlrUnitario) { this.vlrUnitario = vlrUnitario; }
public Integer getQtdeEstoque() { return qtdeEstoque; }
public void setQtdeEstoque(Integer qtdeEstoque) { this.qtdeEstoque = qtdeEstoque; }
public Fornecedor getIdforn() { return idforn; }
public void setIdforn(Fornecedor idforn) { this.idforn = idforn; }
@Override public int hashCode() { int hash = 0; hash += (idProduto != null ? idProduto.hashCode() : 0); return hash; }
@Override public boolean equals(Object object) { // TODO: Warning - this method won't work in the case the id fields are not set if (!(object instanceof Produto)) { return false; } Produto other = (Produto) object; if ((this.idProduto == null && other.idProduto != null) || (this.idProduto != null && !this.idProduto.equals(other.idProduto))) { return false; } return true; }
@Override public String toString() { return "treinamento.entidade.Produto[ idProduto=" + idProduto + " ]"; }
@XmlTransient public Collection<Saida> getSaidaCollection() { return saidaCollection; }
public void setSaidaCollection(Collection<Saida> saidaCollection) { this.saidaCollection = saidaCollection; } }
Classe fornecedorpackage treinamento.entidade;
import java.io.Serializable;import java.util.Collection;import javax.persistence.Basic;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.Id;import javax.persistence.NamedQueries;import javax.persistence.NamedQuery;import javax.persistence.OneToMany;import javax.persistence.Table;import javax.xml.bind.annotation.XmlRootElement;import javax.xml.bind.annotation.XmlTransient;
/** * * @author nsouza */@Entity@Table(name = "FORNECEDOR")@XmlRootElement@NamedQueries({ @NamedQuery(name = "Fornecedor.findAll", query = "SELECT f FROM Fornecedor f"), @NamedQuery(name = "Fornecedor.findByIdforn", query = "SELECT f FROM Fornecedor f WHERE f.idforn = :idforn"), @NamedQuery(name = "Fornecedor.findByNome", query = "SELECT f FROM Fornecedor f WHERE f.nome = :nome"), @NamedQuery(name = "Fornecedor.findByEndereco", query = "SELECT f FROM Fornecedor f WHERE f.endereco = :endereco"), @NamedQuery(name = "Fornecedor.findByNumero", query = "SELECT f FROM Fornecedor f WHERE f.numero = :numero"), @NamedQuery(name = "Fornecedor.findByComplemento", query = "SELECT f FROM Fornecedor f WHERE f.complemento = :complemento"), @NamedQuery(name = "Fornecedor.findByBairro", query = "SELECT f FROM Fornecedor f WHERE f.bairro = :bairro"), @NamedQuery(name = "Fornecedor.findByCidade", query = "SELECT f FROM Fornecedor f WHERE f.cidade = :cidade"), @NamedQuery(name = "Fornecedor.findByInscEstadual", query = "SELECT f FROM Fornecedor f WHERE f.inscEstadual = :inscEstadual"), @NamedQuery(name = "Fornecedor.findByTelefone", query = "SELECT f FROM Fornecedor f WHERE f.telefone = :telefone"), @NamedQuery(name = "Fornecedor.findByEmail", query = "SELECT f FROM Fornecedor f WHERE f.email = :email")})public class Fornecedor implements Serializable { private static final long serialVersionUID = 1L; @Id @Basic(optional = false) @Column(name = "IDFORN") private Integer idforn; @Column(name = "NOME") private String nome; @Column(name = "ENDERECO") private String endereco; @Column(name = "NUMERO") private Integer numero; @Column(name = "COMPLEMENTO") private String complemento; @Column(name = "BAIRRO") private String bairro; @Column(name = "CIDADE") private String cidade; @Column(name = "INSC_ESTADUAL") private Integer inscEstadual; @Column(name = "TELEFONE") private String telefone; @Column(name = "EMAIL") private String email; @OneToMany(mappedBy = "idforn") private Collection<Produto> produtoCollection;
public Fornecedor() { }
public Fornecedor(Integer idforn) { this.idforn = idforn; }
public Integer getIdforn() { return idforn; }
public void setIdforn(Integer idforn) { this.idforn = idforn; }
public String getNome() { return nome; }
public void setNome(String nome) { this.nome = nome; }
public String getEndereco() { return endereco; }
public void setEndereco(String endereco) { this.endereco = endereco; }
public Integer getNumero() { return numero; }
public void setNumero(Integer numero) { this.numero = numero; }
public String getComplemento() { return complemento; }
public void setComplemento(String complemento) { this.complemento = complemento; }
public String getBairro() { return bairro; }
public void setBairro(String bairro) { this.bairro = bairro; }
public String getCidade() { return cidade; }
public void setCidade(String cidade) { this.cidade = cidade; }
public Integer getInscEstadual() { return inscEstadual; }
public void setInscEstadual(Integer inscEstadual) { this.inscEstadual = inscEstadual; }
public String getTelefone() { return telefone; }
public void setTelefone(String telefone) { this.telefone = telefone; }
public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
@XmlTransient public Collection<Produto> getProdutoCollection() { return produtoCollection; }
public void setProdutoCollection(Collection<Produto> produtoCollection) { this.produtoCollection = produtoCollection; }
@Override public int hashCode() { int hash = 0; hash += (idforn != null ? idforn.hashCode() : 0); return hash; }
@Override public boolean equals(Object object) { // TODO: Warning - this method won't work in the case the id fields are not set if (!(object instanceof Fornecedor)) { return false; } Fornecedor other = (Fornecedor) object; if ((this.idforn == null && other.idforn != null) || (this.idforn != null && !this.idforn.equals(other.idforn))) { return false; } return true; }
@Override public String toString() { return "treinamento.entidade.Fornecedor[ idforn=" + idforn + " ]"; } } Testes
@Test public void testAddProduto() throws Exception { System.out.println("addProduto"); Fornecedor forn = new Fornecedor(); forn.setNome("Andorra"); forn.setEndereco("romano cruz"); forn.setNumero(2201); forn.setComplemento("apt 21"); forn.setBairro("bairu"); forn.setCidade("caatinga"); forn.setInscEstadual(97143000); forn.setTelefone("323327656"); forn.setEmail("mario@gmail.com"); FornecedorDao instanceFornecedor = new FornecedorDao(); instanceFornecedor.addFornecedor(forn);
Produto prd = new Produto(); prd.setIdforn(instanceFornecedor.getFornecedor(2)); prd.setNome("camisa"); prd.setVlrUnitario(10f); prd.setQtdeEstoque(50); ProdutoDao instance = new ProdutoDao(); instance.addProduto(prd); }
Mensagem de erro:
Classe Produto
package treinamento.entidade;
import java.io.Serializable;import java.math.BigDecimal;import java.util.Collection;import javax.persistence.Basic;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.Id;import javax.persistence.JoinColumn;import javax.persistence.ManyToOne;import javax.persistence.NamedQueries;import javax.persistence.NamedQuery;import javax.persistence.OneToMany;import javax.persistence.Table;import javax.xml.bind.annotation.XmlRootElement;import javax.xml.bind.annotation.XmlTransient;
/** * * @author nsouza */@Entity@Table(name = "PRODUTO")@XmlRootElement@NamedQueries({ @NamedQuery(name = "Produto.findAll", query = "SELECT p FROM Produto p"), @NamedQuery(name = "Produto.findByIdProduto", query = "SELECT p FROM Produto p WHERE p.idProduto = :idProduto"), @NamedQuery(name = "Produto.findByNome", query = "SELECT p FROM Produto p WHERE p.nome = :nome"), @NamedQuery(name = "Produto.findByVlrUnitario", query = "SELECT p FROM Produto p WHERE p.vlrUnitario = :vlrUnitario"), @NamedQuery(name = "Produto.findByQtdeEstoque", query = "SELECT p FROM Produto p WHERE p.qtdeEstoque = :qtdeEstoque")})public class Produto implements Serializable { @OneToMany(mappedBy = "idProduto") private Collection<Saida> saidaCollection; private static final long serialVersionUID = 1L; @Id @Basic(optional = false) @Column(name = "ID_PRODUTO") private Integer idProduto; @Column(name = "NOME") private String nome; // @Max(value=?) @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation @Column(name = "VLR_UNITARIO") private Float vlrUnitario; @Column(name = "QTDE_ESTOQUE") private Integer qtdeEstoque; @JoinColumn(name = "IDFORN", referencedColumnName = "IDFORN") @ManyToOne private Fornecedor idforn;
public Produto() { }
public Produto(Integer idProduto) { this.idProduto = idProduto; }
public Integer getIdProduto() { return idProduto; }
public void setIdProduto(Integer idProduto) { this.idProduto = idProduto; }
public String getNome() { return nome; }
public void setNome(String nome) { this.nome = nome; }
public Float getVlrUnitario() { return vlrUnitario; }
public void setVlrUnitario(Float vlrUnitario) { this.vlrUnitario = vlrUnitario; }
public Integer getQtdeEstoque() { return qtdeEstoque; }
public void setQtdeEstoque(Integer qtdeEstoque) { this.qtdeEstoque = qtdeEstoque; }
public Fornecedor getIdforn() { return idforn; }
public void setIdforn(Fornecedor idforn) { this.idforn = idforn; }
@Override public int hashCode() { int hash = 0; hash += (idProduto != null ? idProduto.hashCode() : 0); return hash; }
@Override public boolean equals(Object object) { // TODO: Warning - this method won't work in the case the id fields are not set if (!(object instanceof Produto)) { return false; } Produto other = (Produto) object; if ((this.idProduto == null && other.idProduto != null) || (this.idProduto != null && !this.idProduto.equals(other.idProduto))) { return false; } return true; }
@Override public String toString() { return "treinamento.entidade.Produto[ idProduto=" + idProduto + " ]"; }
@XmlTransient public Collection<Saida> getSaidaCollection() { return saidaCollection; }
public void setSaidaCollection(Collection<Saida> saidaCollection) { this.saidaCollection = saidaCollection; } }
Classe fornecedorpackage treinamento.entidade;
import java.io.Serializable;import java.util.Collection;import javax.persistence.Basic;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.Id;import javax.persistence.NamedQueries;import javax.persistence.NamedQuery;import javax.persistence.OneToMany;import javax.persistence.Table;import javax.xml.bind.annotation.XmlRootElement;import javax.xml.bind.annotation.XmlTransient;
/** * * @author nsouza */@Entity@Table(name = "FORNECEDOR")@XmlRootElement@NamedQueries({ @NamedQuery(name = "Fornecedor.findAll", query = "SELECT f FROM Fornecedor f"), @NamedQuery(name = "Fornecedor.findByIdforn", query = "SELECT f FROM Fornecedor f WHERE f.idforn = :idforn"), @NamedQuery(name = "Fornecedor.findByNome", query = "SELECT f FROM Fornecedor f WHERE f.nome = :nome"), @NamedQuery(name = "Fornecedor.findByEndereco", query = "SELECT f FROM Fornecedor f WHERE f.endereco = :endereco"), @NamedQuery(name = "Fornecedor.findByNumero", query = "SELECT f FROM Fornecedor f WHERE f.numero = :numero"), @NamedQuery(name = "Fornecedor.findByComplemento", query = "SELECT f FROM Fornecedor f WHERE f.complemento = :complemento"), @NamedQuery(name = "Fornecedor.findByBairro", query = "SELECT f FROM Fornecedor f WHERE f.bairro = :bairro"), @NamedQuery(name = "Fornecedor.findByCidade", query = "SELECT f FROM Fornecedor f WHERE f.cidade = :cidade"), @NamedQuery(name = "Fornecedor.findByInscEstadual", query = "SELECT f FROM Fornecedor f WHERE f.inscEstadual = :inscEstadual"), @NamedQuery(name = "Fornecedor.findByTelefone", query = "SELECT f FROM Fornecedor f WHERE f.telefone = :telefone"), @NamedQuery(name = "Fornecedor.findByEmail", query = "SELECT f FROM Fornecedor f WHERE f.email = :email")})public class Fornecedor implements Serializable { private static final long serialVersionUID = 1L; @Id @Basic(optional = false) @Column(name = "IDFORN") private Integer idforn; @Column(name = "NOME") private String nome; @Column(name = "ENDERECO") private String endereco; @Column(name = "NUMERO") private Integer numero; @Column(name = "COMPLEMENTO") private String complemento; @Column(name = "BAIRRO") private String bairro; @Column(name = "CIDADE") private String cidade; @Column(name = "INSC_ESTADUAL") private Integer inscEstadual; @Column(name = "TELEFONE") private String telefone; @Column(name = "EMAIL") private String email; @OneToMany(mappedBy = "idforn") private Collection<Produto> produtoCollection;
public Fornecedor() { }
public Fornecedor(Integer idforn) { this.idforn = idforn; }
public Integer getIdforn() { return idforn; }
public void setIdforn(Integer idforn) { this.idforn = idforn; }
public String getNome() { return nome; }
public void setNome(String nome) { this.nome = nome; }
public String getEndereco() { return endereco; }
public void setEndereco(String endereco) { this.endereco = endereco; }
public Integer getNumero() { return numero; }
public void setNumero(Integer numero) { this.numero = numero; }
public String getComplemento() { return complemento; }
public void setComplemento(String complemento) { this.complemento = complemento; }
public String getBairro() { return bairro; }
public void setBairro(String bairro) { this.bairro = bairro; }
public String getCidade() { return cidade; }
public void setCidade(String cidade) { this.cidade = cidade; }
public Integer getInscEstadual() { return inscEstadual; }
public void setInscEstadual(Integer inscEstadual) { this.inscEstadual = inscEstadual; }
public String getTelefone() { return telefone; }
public void setTelefone(String telefone) { this.telefone = telefone; }
public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
@XmlTransient public Collection<Produto> getProdutoCollection() { return produtoCollection; }
public void setProdutoCollection(Collection<Produto> produtoCollection) { this.produtoCollection = produtoCollection; }
@Override public int hashCode() { int hash = 0; hash += (idforn != null ? idforn.hashCode() : 0); return hash; }
@Override public boolean equals(Object object) { // TODO: Warning - this method won't work in the case the id fields are not set if (!(object instanceof Fornecedor)) { return false; } Fornecedor other = (Fornecedor) object; if ((this.idforn == null && other.idforn != null) || (this.idforn != null && !this.idforn.equals(other.idforn))) { return false; } return true; }
@Override public String toString() { return "treinamento.entidade.Fornecedor[ idforn=" + idforn + " ]"; } } Testes
@Test public void testAddProduto() throws Exception { System.out.println("addProduto"); Fornecedor forn = new Fornecedor(); forn.setNome("Andorra"); forn.setEndereco("romano cruz"); forn.setNumero(2201); forn.setComplemento("apt 21"); forn.setBairro("bairu"); forn.setCidade("caatinga"); forn.setInscEstadual(97143000); forn.setTelefone("323327656"); forn.setEmail("mario@gmail.com"); FornecedorDao instanceFornecedor = new FornecedorDao(); instanceFornecedor.addFornecedor(forn);
Produto prd = new Produto(); prd.setIdforn(instanceFornecedor.getFornecedor(2)); prd.setNome("camisa"); prd.setVlrUnitario(10f); prd.setQtdeEstoque(50); ProdutoDao instance = new ProdutoDao(); instance.addProduto(prd); }
Mensagem de erro:
Testsuite: treinamento.dao.ProdutoDaoTestaddProdutoError to try 0 with value treinamento.entidade.Fornecedor[ idforn=2 ]populateProdutoInfoTests run: 2, Failures: 0, Errors: 2, Time elapsed: 1,769 sec ------------- Standard Output ---------------addProdutoError to try 0 with value treinamento.entidade.Fornecedor[ idforn=2 ]populateProdutoInfo------------- ---------------- ---------------Testcase: testAddProduto(treinamento.dao.ProdutoDaoTest): Caused an ERRORParâmetro IN ou OUT ausente do índice:: 1java.sql.SQLException: Parâmetro IN ou OUT ausente do índice:: 1 at oracle.jdbc.driver.OraclePreparedStatement.processCompletedBindRow(OraclePreparedStatement.java:1821) at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3571) at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3657) at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:1350) at treinamento.dao.GenericaDao.executeCommand(GenericaDao.java:63) at treinamento.dao.ProdutoDao.addProduto(ProdutoDao.java:31) at treinamento.dao.ProdutoDaoTest.testAddProduto(ProdutoDaoTest.java:73) Testcase: testPopulateProdutoInfo(treinamento.dao.ProdutoDaoTest): Caused an ERRORnulljava.lang.NullPointerException at treinamento.dao.ProdutoDao.populateProdutoInfo(ProdutoDao.java:67) at treinamento.dao.ProdutoDaoTest.testPopulateProdutoInfo(ProdutoDaoTest.java:142) Test treinamento.dao.ProdutoDaoTest FAILEDtest:Deleting: /tmp/TEST-treinamento.dao.ProdutoDaoTest.xmlBUILD SUCCESSFUL (total time: 2 seconds)
Nilo Souza
Curtidas 0
Respostas
Davi Costa
16/05/2011
Já percebi que idFornecedor realmente é um objeto fornecedor. (seria interessante depois alterar na classe Produto, com o atributo desse modo gera dúvida, não é bom quando se trabalha em equipe)
Bom vamos ao erro, o que está acontecendo é um nullpointer nas Classes ProdutoDao e ProdutoDaoTest, mais especificamente nas linhas:
at treinamento.dao.ProdutoDao.populateProdutoInfo(ProdutoDao.java:67) at treinamento.dao.ProdutoDaoTest.testPopulateProdutoInfo(ProdutoDaoTest.java:142)
Verifica elas, e caso não entenda erro, posta elas aqui.
att Davi
Bom vamos ao erro, o que está acontecendo é um nullpointer nas Classes ProdutoDao e ProdutoDaoTest, mais especificamente nas linhas:
at treinamento.dao.ProdutoDao.populateProdutoInfo(ProdutoDao.java:67) at treinamento.dao.ProdutoDaoTest.testPopulateProdutoInfo(ProdutoDaoTest.java:142)
Verifica elas, e caso não entenda erro, posta elas aqui.
att Davi
GOSTEI 0
Nilo Souza
16/05/2011
Outra duvida é:
O que tenho que passar dentro do parametro no lugar do "2"?
prd.setIdforn(instanceFornecedor.getFornecedor(2));
GOSTEI 0
Davi Costa
16/05/2011
Teriamos que ver a classe, pois esse método é de FornecedorDao:
instanceFornecedor.getFornecedor(2)
Att Davi
instanceFornecedor.getFornecedor(2)
Att Davi
GOSTEI 0
Nilo Souza
16/05/2011
Davi, a classe fornecedor esta no 1 post.
GOSTEI 0
Davi Costa
16/05/2011
Não cara se vc perceber é FornecedorDao.
Fornecedor está ok.
Se notar instanceFornecedor é um FornecedorDao
Att Davi
Fornecedor está ok.
Se notar instanceFornecedor é um FornecedorDao
Att Davi
GOSTEI 0
Pjava
16/05/2011
Uma pergunta em cima de seu post. Eu estou aprendendo java pra valer e gostaria de saber o que significa isso:
@XmlRootElement --> Essa linha e as de baixo
@NamedQueries({ @NamedQuery(name = "Fornecedor.findAll", query = "SELECT f FROM Fornecedor f"), @NamedQuery(name = "Fornecedor.findByIdforn", query = "SELECT f FROM Fornecedor f WHERE f.idforn = :idforn"), @NamedQuery(name = "Fornecedor.findByNome", query = "SELECT f FROM Fornecedor f WHERE f.nome = :nome"), @NamedQuery(name = "Fornecedor.findByEndereco", query = "SELECT f FROM Fornecedor f WHERE f.endereco = :endereco"), @NamedQuery(name = "Fornecedor.findByNumero", query = "SELECT f FROM Fornecedor f WHERE f.numero = :numero"), @NamedQuery(name = "Fornecedor.findByComplemento", query = "SELECT f FROM Fornecedor f WHERE f.complemento = :complemento"), @NamedQuery(name = "Fornecedor.findByBairro", query = "SELECT f FROM Fornecedor f WHERE f.bairro = :bairro"), @NamedQuery(name = "Fornecedor.findByCidade", query = "SELECT f FROM Fornecedor f WHERE f.cidade = :cidade"),
@NamedQuery(name = "Fornecedor.findByInscEstadual", query = "SELECT f
FROM Fornecedor f WHERE f.inscEstadual = :inscEstadual"), @NamedQuery(name = "Fornecedor.findByTelefone", query = "SELECT f FROM Fornecedor f WHERE f.telefone = :telefone"), @NamedQuery(name = "Fornecedor.findByEmail", query = "SELECT f FROM Fornecedor f WHERE f.email = :email")})GOSTEI 0
Nilo Souza
16/05/2011
Davi, essa é minha classe fornecedorDao. E quanto as linhas não faço a minima ideia, tb estou aprendendo.
package treinamento.dao;import java.util.logging.Level;import java.util.logging.Logger;import treinamento.entidade.Fornecedor;
import java.sql.ResultSet;import java.sql.SQLException;import java.util.LinkedList;import java.awt.List;
/** * * @author nsouza */public class FornecedorDao extends GenericaDao{ public FornecedorDao(){ } public void addFornecedor(Fornecedor frn){ try { String sql = "insert into fornecedor (nome,endereco,numero,complemento,bairro,cidade," + "insc_estadual,telefone,email) values(?,?,?,?,?,?,?,?,?)"; executeCommand(sql, frn.getNome(),frn.getEndereco(),frn.getNumero(),frn.getComplemento(),frn.getBairro(), frn.getCidade(),frn.getInscEstadual(),frn.getTelefone(),frn.getEmail()); } catch (SQLException ex) { Logger.getLogger(FornecedorDao.class.getName()).log(Level.SEVERE, null, ex); }
} public Fornecedor getFornecedor(int idForn) throws SQLException { ResultSet rs = executeQuery("SELECT * FROM Fornecedor WHERE IDForn = ?", idForn); Fornecedor usr = null; if (rs.next()) { usr = populateFornecedorInfo(rs); } rs.close(); return usr; } public void updateFornecedor(Fornecedor frn){ try { String sql = "UPDATE Fornecedor SET nome=?, endereco=?, numero=?,complemento=?,bairro=?,cidade=?," + "insc_estadual=?,telefone=?,email=? WHERE IDForn = ?"; executeCommand(sql, frn.getNome(),frn.getEndereco(),frn.getNumero(),frn.getComplemento(),frn.getBairro() + frn.getCidade(),frn.getInscEstadual(),frn.getTelefone(),frn.getEmail(),frn.getIdforn()); } catch (SQLException ex) { Logger.getLogger(FornecedorDao.class.getName()).log(Level.SEVERE, null, ex); } } public void revomeFornecedor(int idForn) { try { executeCommand("DELETE FROM Fornecedor WHERE IDForn = ?", idForn); } catch (SQLException ex) { Logger.getLogger(FornecedorDao.class.getName()).log(Level.SEVERE, null, ex); } } public LinkedList<Fornecedor> getAllFornecedor() throws SQLException { ResultSet rs = executeQuery("SELECT * FROM Fornecedor"); LinkedList<Fornecedor> toReturn = new LinkedList<Fornecedor>(); while (rs.next()) { toReturn.add(populateFornecedorInfo(rs)); } rs.close(); return toReturn; } public static Fornecedor populateFornecedorInfo(ResultSet rs) throws SQLException { Fornecedor toReturn = new Fornecedor(); toReturn.setIdforn(rs.getInt("IDFORN")); toReturn.setNome(rs.getString("NOME")); toReturn.setEndereco(rs.getString("ENDERECO")); toReturn.setNumero(rs.getInt("NUMERO")); toReturn.setComplemento(rs.getString("COMPLEMENTO")); toReturn.setBairro(rs.getString("BAIRRO")); toReturn.setCidade(rs.getString("CIDADE")); toReturn.setInscEstadual(rs.getInt("INSC_ESTADUAL")); toReturn.setTelefone(rs.getString("TELEFONE")); toReturn.setEmail(rs.getString("EMAIL")); return toReturn; }
}
GOSTEI 0
Davi Costa
16/05/2011
Pelo método:
Percebi que ele retorna o Fornecedor pelo id.
Para ver o número das linhas, se tiver usando eclipse, vai no canto esquerdo da classe (*.java) e clica com o botão direito e seleciona a opção show numbers. No netbenas tb é parecido, a opção para aparecer as linhas não é identico , mas é bem parecido.
Não se esqueça que o erro está acontecendo é um NullPointerException nas classes ProdutoDao e ProdutoDaoTest.
Em um post anterior citei até as linhas.
Att Davi
Percebi que ele retorna o Fornecedor pelo id.
Para ver o número das linhas, se tiver usando eclipse, vai no canto esquerdo da classe (*.java) e clica com o botão direito e seleciona a opção show numbers. No netbenas tb é parecido, a opção para aparecer as linhas não é identico , mas é bem parecido.
Não se esqueça que o erro está acontecendo é um NullPointerException nas classes ProdutoDao e ProdutoDaoTest.
Em um post anterior citei até as linhas.
Att Davi
GOSTEI 0
Nilo Souza
16/05/2011
Caro Davi, corrigi o problema no nullpoint, agora deu o seguinte erro:
Testsuite: treinamento.dao.ProdutoDaoTestaddProdutoError to try 0 with value treinamento.entidade.Fornecedor[ idforn=2 ]Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 7,985 sec ------------- Standard Output ---------------addProdutoError to try 0 with value treinamento.entidade.Fornecedor[ idforn=2 ]------------- ---------------- ---------------Testcase: testAddProduto(treinamento.dao.ProdutoDaoTest): Caused an ERRORParâmetro IN ou OUT ausente do índice:: 1java.sql.SQLException: Parâmetro IN ou OUT ausente do índice:: 1 at oracle.jdbc.driver.OraclePreparedStatement.processCompletedBindRow(OraclePreparedStatement.java:1821) at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3571) at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3657) at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:1350) at treinamento.dao.GenericaDao.executeCommand(GenericaDao.java:63) at treinamento.dao.ProdutoDao.addProduto(ProdutoDao.java:31) at treinamento.dao.ProdutoDaoTest.testAddProduto(ProdutoDaoTest.java:72) Test treinamento.dao.ProdutoDaoTest FAILEDtest:Deleting: /tmp/TEST-treinamento.dao.ProdutoDaoTest.xmlBUILD SUCCESSFUL (total time: 9 seconds)
GOSTEI 0
Robson Teixeira
16/05/2011
Favor poste tb a sua classe ProdutoDAO e conforme a mesagem do stackTrace verifique o indice revise o
Parâmetro IN ou OUT ausente do índice
metodo addProduto em ProdutoDAO para ver o erro se naum post ele aqui tb para analisarmos melhor.
att
robson Passarella
Parâmetro IN ou OUT ausente do índice
metodo addProduto em ProdutoDAO para ver o erro se naum post ele aqui tb para analisarmos melhor.
att
robson Passarella
GOSTEI 0
Nilo Souza
16/05/2011
Abaixo o que vc pediu, sobre revisar os parametos IN e OUT não sei como fazer.Obrigado desde já!!!
Classe produtoDao
METODO addProduto
Classe produtoDao
package treinamento.dao;
import treinamento.entidade.Produto;import treinamento.dao.FornecedorDao;import java.sql.ResultSet;import java.sql.SQLException;import java.util.LinkedList;import java.util.List;/** * * @author Nilo */public class ProdutoDao extends GenericaDao{
private static final long serialVersionUID = 1L;
public ProdutoDao(){
}
public void addProduto(Produto prd) throws SQLException { //usr.setId(getNextId("ProdutoS")); String sql = "INSERT INTO PRODUTO (IDFORN,NOME,VLR_UNITARIO,QTDE_ESTOQUE) values (?,?,?,?)"; executeCommand(sql, prd.getIdforn(), prd.getNome(),prd.getVlrUnitario(),prd.getQtdeEstoque());
}
public void removeProduto(int idProduto) throws SQLException { executeCommand("DELETE FROM Produto WHERE IDProduto = ?", idProduto); }
public void updateProduto(Produto prd) throws SQLException { String sql = "UPDATE Produto SET IDFOR=?,NOME=?,VLR_UNITARIO=?,QTDE_ESTOQUE=? where ID_PRODUTO=?"; executeCommand(sql, prd.getIdforn(),prd.getNome(),prd.getVlrUnitario(),prd.getQtdeEstoque(),prd.getIdProduto()); }
public Produto getProduto(int idProduto) throws SQLException { ResultSet rs = executeQuery("SELECT * FROM Produto WHERE ID_Produto = ?", idProduto); Produto usr = null; if (rs.next()) { usr = populateProdutoInfo(rs); } rs.close(); return usr; }
public List<Produto> getAllProdutos() throws SQLException { ResultSet rs = executeQuery("SELECT * FROM Produto"); List<Produto> toReturn = new LinkedList<Produto>(); while (rs.next()) { toReturn.add(populateProdutoInfo(rs)); } rs.close(); return toReturn; }
public static Produto populateProdutoInfo(ResultSet rs) throws SQLException { Produto toReturn = new Produto(); FornecedorDao FornDao = new FornecedorDao(); toReturn.setIdProduto(rs.getInt("ID_PRODUTO")); toReturn.setIdforn(FornDao.getFornecedor(rs.getInt("IDFORN"))); toReturn.setNome(rs.getString("NOME")); toReturn.setVlrUnitario(rs.getFloat("VLR_UNITARIO")); toReturn.setQtdeEstoque(rs.getInt("QTDE_ESTOQUE")); return toReturn; }
METODO addProduto
@Test public void testAddProduto() throws Exception { System.out.println("addProduto"); Fornecedor forn = new Fornecedor(); forn.setNome("Andorra"); forn.setEndereco("Californai"); forn.setNumero(201); forn.setComplemento("apt 21"); forn.setBairro("caburiu"); forn.setCidade("lavras"); forn.setInscEstadual(97143000); forn.setTelefone("3258156"); forn.setEmail("nicolas@gmail.com"); FornecedorDao instanceFornecedor = new FornecedorDao(); instanceFornecedor.addFornecedor(forn);
Produto prd = new Produto(); prd.setIdforn(instanceFornecedor.getFornecedor(2)); prd.setNome("camisa"); prd.setVlrUnitario(10f); prd.setQtdeEstoque(50); ProdutoDao instance = new ProdutoDao(); instance.addProduto(prd); }
GOSTEI 0
Davi Costa
16/05/2011
Seguinte, desconfio um pouco desse sql:
INSERT INTO PRODUTO (IDFORN,NOME,VLR_UNITARIO,QTDE_ESTOQUE
Como está usando JPA, ao invés de VLR_UNITARIO, vc deve passar o atributo que vc mapeou que é vlrUnitario.
Confere isso para todos os sql.
Além disso, pode ser que vc ao corrigir isso ainda dê o erro,
então confere se :
prd.getIdforn()
Retorna algum valor, pq se ele estiver vindo nulo, não deveria estar nesse sql.
Espero ter ajudado
Att Davi
INSERT INTO PRODUTO (IDFORN,NOME,VLR_UNITARIO,QTDE_ESTOQUE
Como está usando JPA, ao invés de VLR_UNITARIO, vc deve passar o atributo que vc mapeou que é vlrUnitario.
Confere isso para todos os sql.
Além disso, pode ser que vc ao corrigir isso ainda dê o erro,
então confere se :
prd.getIdforn()
Retorna algum valor, pq se ele estiver vindo nulo, não deveria estar nesse sql.
Espero ter ajudado
Att Davi
GOSTEI 0
Nilo Souza
16/05/2011
Não entendi bem sua explicação. Não entendi o que tem haver o VLR_Unitario e o prd.getIdforn() passa o valor 2.
GOSTEI 0
Davi Costa
16/05/2011
Seguinte vc está usando JPA, como ele é framework ORM, ele facilita muito a nossa vida.
Mas na hora de montar suas consultas ele não usa sql nativão, ele usa JPQL que é bem parecido.
Ao invez de utilizar esse String
String sql = "INSERT INTO PRODUTO (IDFORN,NOME,VLR_UNITARIO,QTDE_ESTOQUE) values (?,?,?,?)"
Vc deve substituir por:
String sql = "INSERT INTO PRODUTO (idforn,NOME,vlrUnitario,qtdeEstoque) values (?,?,?,?)"
É assim que o JPQL funciona ou se tiver usando Hibernate HQl e por aí vai....
ele já inteligente o bastante para saber que esses atributos são relativos as colunas que vc mapeou nas suas entidades.
Vamos ver se com essa correção o erro ainda vai continuar.
Agora vendo seu código com mais calma percebi que vc está usando jdbc em uma consulta e não JPA.
Esse método :
executeCommand(sql, prd.getIdforn(), prd.getNome(),prd.getVlrUnitario(),prd.getQtdeEstoque());
Usa jdbc pq se for, esquece o que falei de JPQL.
Se ele realmente usar jdbc seria interessante vc copiar toda a query gerada pelo sua String sql e tentgarrodar no seu próprio banco para ver que erro acontece lá.
Outra coisa se estiver usando jdbc puro esse prd.getIdForn() retorna um objeto e não o id do fornecedor, vc deveria fazer o seguinte:
prd.getIdforn().getIdforn()
Aí sim tem o id do fornecedor para vc usar no seu insert.
Att Davi
Mas na hora de montar suas consultas ele não usa sql nativão, ele usa JPQL que é bem parecido.
Ao invez de utilizar esse String
String sql = "INSERT INTO PRODUTO (IDFORN,NOME,VLR_UNITARIO,QTDE_ESTOQUE) values (?,?,?,?)"
Vc deve substituir por:
String sql = "INSERT INTO PRODUTO (idforn,NOME,vlrUnitario,qtdeEstoque) values (?,?,?,?)"
É assim que o JPQL funciona ou se tiver usando Hibernate HQl e por aí vai....
ele já inteligente o bastante para saber que esses atributos são relativos as colunas que vc mapeou nas suas entidades.
Vamos ver se com essa correção o erro ainda vai continuar.
Agora vendo seu código com mais calma percebi que vc está usando jdbc em uma consulta e não JPA.
Esse método :
executeCommand(sql, prd.getIdforn(), prd.getNome(),prd.getVlrUnitario(),prd.getQtdeEstoque());
Usa jdbc pq se for, esquece o que falei de JPQL.
Se ele realmente usar jdbc seria interessante vc copiar toda a query gerada pelo sua String sql e tentgarrodar no seu próprio banco para ver que erro acontece lá.
Outra coisa se estiver usando jdbc puro esse prd.getIdForn() retorna um objeto e não o id do fornecedor, vc deveria fazer o seguinte:
prd.getIdforn().getIdforn()
Aí sim tem o id do fornecedor para vc usar no seu insert.
Att Davi
GOSTEI 0
Anthony Accioly
16/05/2011
Uma pergunta em cima de seu post. Eu estou aprendendo java pra valer e gostaria de saber o que significa isso:
@XmlRootElement --> Essa linha e as de baixo
PJava,
Em geral eu não recomendo sub-perguntas nos chamados de outras pessoas (é melhor que você abra uma nova pergunta para que outras pessoas possam fazer buscas no fórum e se se beneficiar das respostas mais facilmente).
Porém, abrindo um exceção, aqui vai uma explicação rápida:
@XmlRootElement : Tem haver com binding de XML na especificação JAXB, quando você quer transformar uma classe em XML e vice-versa. De uma olhada no Javadoc dela aqui: http://download.oracle.com/javase/6/docs/api/javax/xml/bind/annotation/XmlRootElement.html
Quanto as named queries, elas são anotações que permitem definir queries "reaproveitáveis". Você dá um nome para a query e pode recuperá-la através desse nome ao invés de ter que forçar a barra repetindo o JPQL várias vezes. Algumas implementações aproveitam para para fazer algumas otimizações (por exemplo, deixar a query preparada de antemão) que também podem trazer melhorias de performance. Eis um pequeno artigo em português sobre elas: http://javasemcafe.blogspot.com/2011/04/jpa-20-utilizando-os-namedquery.html E eis os javadocs: http://download.oracle.com/javaee/6/api/javax/persistence/NamedQuery.html
GOSTEI 0
Davi Costa
16/05/2011
Boa a dica do nosso colega acima, mas ainda estou encucado se vc está usando jdbc.
Posta para gente a classe: GenericaDao
Att Davi
Posta para gente a classe: GenericaDao
Att Davi
GOSTEI 0
Nilo Souza
16/05/2011
Com certeza estou usando o jdbc. Minha conexao é com o Oracle 10g, quando chegar em casa a noite, postarei a minha classe GenericaDao.
GOSTEI 0
Nilo Souza
16/05/2011
Seguinte, desconfio um pouco desse sql:
INSERT INTO PRODUTO (IDFORN,NOME,VLR_UNITARIO,QTDE_ESTOQUE
Como está usando JPA, ao invés de VLR_UNITARIO, vc deve passar o atributo que vc mapeou que é vlrUnitario.
Confere isso para todos os sql.
Além disso, pode ser que vc ao corrigir isso ainda dê o erro,
então confere se :
prd.getIdforn()
Retorna algum valor, pq se ele estiver vindo nulo, não deveria estar nesse sql.
Espero ter ajudado
Att Davi
O prd.getIdforn().getIdForn() eu coloco dentro da comand certo? E só substituir né?
INSERT INTO PRODUTO (IDFORN,NOME,VLR_UNITARIO,QTDE_ESTOQUE
Como está usando JPA, ao invés de VLR_UNITARIO, vc deve passar o atributo que vc mapeou que é vlrUnitario.
Confere isso para todos os sql.
Além disso, pode ser que vc ao corrigir isso ainda dê o erro,
então confere se :
prd.getIdforn()
Retorna algum valor, pq se ele estiver vindo nulo, não deveria estar nesse sql.
Espero ter ajudado
Att Davi
GOSTEI 0
Davi Costa
16/05/2011
Exato.
Att Davi
Att Davi
GOSTEI 0
Nilo Souza
16/05/2011
Caro Davi e demais colegas, essa etapa funcionou. Agora testarei os outro métodos.Um abraço a todos.
GOSTEI 0
Davi Costa
16/05/2011
Show de bola Nilo.
Caso tenha resolvido fechar pendência.
Att Davi
Divulgando:
https://www.devmedia.com.br/articles/viewcomp.asp?comp=21178 https://www.devmedia.com.br/articles/viewcomp.asp?comp=21179 https://www.devmedia.com.br/articles/viewcomp.asp?comp=21180
Caso tenha resolvido fechar pendência.
Att Davi
Divulgando:
https://www.devmedia.com.br/articles/viewcomp.asp?comp=21178 https://www.devmedia.com.br/articles/viewcomp.asp?comp=21179 https://www.devmedia.com.br/articles/viewcomp.asp?comp=21180
GOSTEI 0