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 (?,?,?)

準備済みステートメントを使用する場合、次を使用して値を設定しますs.set...(..)

準備済みステートメントの使用方法については、このチュートリアルをお読みください

于 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 (? , ? , ? )";

これは、パラメータ化されたプリペアド ステートメントを作成する方法です。? パラメータのプレースホルダです。

于 2012-08-23T21:33:53.593 に答える