Fórum Dúvida #9683
30/09/2009
0
No value specified for parameter 4
java.sql.SQLException: No value specified for parameter 4
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2214)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2020)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1964)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1949)
at devmedia.dao.ProdutoDao.set(ProdutoDao.java:46)
at devmedia.dao.ProdutoDaoTest.testSet(ProdutoDaoTest.java:73)
Ruinaldo
Curtir tópico
+ 0Posts
30/09/2009
Henrique Weissmann
duas possíveis causas para o seu problema (mais provável):
* você criou um PreparedStatement que possui n parametros, porém não preencheu um deles (o de ordem 4).
* sua instrução SQL para inclusão de registros ou edição está errada, tal como no exemplo abaixo:
"insert into tabela (campoA, campoB, campoC) values (?, ?)" (falta um parametro)
Gostei + 0
30/09/2009
Ruinaldo
public class ProdutoDao extends DatabaseUtil {
private static final long serialVersionUID = 1L;
public ProdutoDao(){
super();
}
public boolean add(Produto prod)throws ClassNotFoundException, SQLException {
PreparedStatement ps = getPreparedStatement("INSERT INTO aplicacaojsf.produto values (?,?,?,?)");
ps.setInt(1, prod.getId());
ps.setString(2, prod.getNome());
ps.setInt(3, prod.getNumeroDeItens());
ps.setDouble(4, prod.getPreco());
int toReturn = ps.executeUpdate();
ps.close();
return toReturn > 0 ;
}
public boolean set(Produto prod)throws ClassNotFoundException, SQLException{
PreparedStatement ps = getPreparedStatement("update aplicacaojsf.produto set nome=?, numeroDeItens=?, price=? where id=?");
ps.setString(1,prod.getNome());
ps.setInt(2, prod.getNumeroDeItens());
ps.setDouble(3, prod.getPreco());
int toReturn = ps.executeUpdate();
ps.close();
return toReturn > 0 ;
}
public boolean delete (Produto prod)throws ClassNotFoundException, SQLException{
PreparedStatement ps = getPreparedStatement("DELETE from aplicacaojsf.produto where id=?");
ps.setInt(1, prod.getId());
int toReturn = ps.executeUpdate();
ps.close();
return toReturn > 0 ;
}
public List<Produto> getAllProduto()throws ClassNotFoundException, SQLException{
List<Produto> toReturn = new LinkedList<Produto>();
ResultSet rs = getStatement().executeQuery("Select * from aplicacaojsf.produto");
while (rs.next()){
Produto prod = new Produto();
populateProd(prod, rs);
toReturn.add(prod);
}
rs.close();
return toReturn;
}
private void populateProd (Produto prod, ResultSet rs) throws SQLException{
prod.setId(rs.getInt("id"));
prod.setNome(rs.getString("nome"));
prod.setNumeroDeItens(rs.getInt("numeroDeItens"));
prod.setPreco(rs.getDouble("price"));
}
public Produto getById(int idProduto)throws ClassNotFoundException, SQLException{
PreparedStatement ps = getPreparedStatement ("select * from aplicacaojsf.produto where id=?");
ps.setInt(1, idProduto);
ResultSet rs = ps.executeQuery();
if (!rs.next())return null;
Produto toReturn = new Produto();
populateProd (toReturn, rs);
rs.close();
ps.close();
return toReturn;
}
}
Gostei + 0
30/09/2009
Henrique Weissmann
public boolean set(Produto prod)throws ClassNotFoundException, SQLException{
PreparedStatement ps = getPreparedStatement("update aplicacaojsf.produto set nome=?, numeroDeItens=?, price=? where id=?");
ps.setString(1,prod.getNome());
ps.setInt(2, prod.getNumeroDeItens());
ps.setDouble(3, prod.getPreco());
int toReturn = ps.executeUpdate();
ps.close();
return toReturn > 0 ;
}
repare, você está definindo apenas 3 dos 4 parametros do seu comando SQL no PreparedStatement.
Gostei + 0
30/09/2009
Ruinaldo
abraços
Gostei + 0
30/09/2009
Ruinaldo
Gostei + 0
30/09/2009
Henrique Weissmann
Porém, estes erros como o que você cometeu também são comuns.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)