从参数中连接到数据库的Java列表?

时间:2012-08-23 21:28:49

标签: java mysql database jdbc

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

2 个答案:

答案 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语句的方法。 ?是您的参数的占位符。