Dúvida
Professor
ache que havia resolvido a qustão mais esta engando crie a classe de
teste e tive o seguinte problema ! O que pode esta acontecendo?
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)
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
Curtidas 0
Respostas
Henrique Weissmann
30/09/2009
Olá Ruinaldo,
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)
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
Ruinaldo
30/09/2009
Professor estou enviando minha classe que estou trabalhnado gostaria que o senhor desse uma olhada nela por gentileza pois precxiso descobrir o quanto antes esse problema
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;
}
}
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
Henrique Weissmann
30/09/2009
Há um problema nesta função:
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.
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
Ruinaldo
30/09/2009
Valeu professor muito bem esclarecido obrigado pela atenção já pode encerra o chamado!
abraços
abraços
GOSTEI 0
Ruinaldo
30/09/2009
Só mais uma coisa sempre que eu tiver problemas de Paramentro com preparede Statemente na maioria dos caso esta relacionado um desse caso que me apontou?
GOSTEI 0
Henrique Weissmann
30/09/2009
na realidade, 90% dos casos que eu vejo de problemas com PreparedStatements são decorrentes mais da instrução SQL em cima da qual ele é construido.
Porém, estes erros como o que você cometeu também são comuns.
Porém, estes erros como o que você cometeu também são comuns.
GOSTEI 0