这是我的数据库的代码,它给出了此错误java.sql.SQLException: Parameter index out of range 1 > number of parameters
,即0
我将把我需要保存的代码放在我的数据库中:
PedidoDTO nuevoPedido = new PedidoDTO();
nuevoPedido.setFolio("323423");
nuevoPedido.setFecha(new Date());
nuevoPedido.addDetalle(detalle1);
nuevoPedido.addDetalle(detalle2);
nuevoPedido.addDetalle(detalle3);
long pedidoId =dao.guardar(nuevoPedido);
System.out.println( "ID del nuevo pedido: " + pedidoId );
public long guardar(PedidoDTO obj) throws SQLException {
PedidoDTO dto = new PedidoDTO();
String url="jdbc:mysql://127.0.0.1:3306/capacitacion?user=capacitacion&password=password";
try {
System.out.println("Hola");
Connection con = DriverManager.getConnection(url);
String sentenciaSQL =
"INSERT INTO capacitacion .pedido (fecha, total, folio) VALUES ("
+ obj.getFecha() + ", " + obj.getTotal() + ", " + obj.getFolio() + ")";
PreparedStatement s = con.prepareStatement(sentenciaSQL);
//s.setInt(1, obj.getId());
s.setLong(1, obj.getFecha());
s.setDouble(2, obj.getTotal());
s.setString(3, obj.getFolio());
s.execute();
for(PedidoDetalleDTO detalle:obj.getPedidoDetalle()){
dto.getId();
dto.getFecha();
dto.getTotal();
dto.getFolio();
}con.close();
} catch (SQLException e) {
System.out.println(e);
}
return dto.getId();
}
答案 0 :(得分:2)
VALUES ("
+ obj.getFecha() + ", " + obj.getTotal() + ", " + obj.getFolio() + ")
应该是
VALUES (?,?,?)
使用预备陈述时,您将使用s.set...(..)
阅读本教程,了解如何使用preparedstatements
答案 1 :(得分:1)
替换它:
"INSERT INTO capacitacion .pedido (fecha, total, folio) VALUES ("
+ obj.getFecha() + ", " + obj.getTotal() + ", " + obj.getFolio() + ")";
用这个:
"INSERT INTO capacitacion .pedido (fecha, total, folio) VALUES (? , ? , ? )";
这是构建参数化Prepared语句的方法。 ?是您的参数的占位符。