0

这是我的数据库的代码,它给出了这个错误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();
}
4

2 回答 2

2
VALUES (" 
            + obj.getFecha() + ", " + obj.getTotal() + ", " + obj.getFolio() + ")

应该

VALUES (?,?,?)

当您使用preparedstatement时,您将使用s.set...(..)

阅读本教程,了解如何使用preparedstatements

于 2012-08-23T21:32:47.547 回答
1

替换这个:

 "INSERT INTO capacitacion .pedido (fecha, total, folio) VALUES (" 
        + obj.getFecha() + ", " + obj.getTotal() + ", " + obj.getFolio() + ")";

有了这个:

 "INSERT INTO capacitacion .pedido (fecha, total, folio) VALUES (? , ? , ? )";

这是构建参数化 Prepared 语句的方法。? 是您的参数的占位符。

于 2012-08-23T21:33:53.593 回答