public void updatemnum(BigDecimal consignment_product_num , Integer salesorder_product_id) throws SQLException
{
System.out.println(consignment_product_num);
String sql = "Update DPC_SalesOrder_Product set SALESORDER_PRODUCT_MNUM=(select SALESORDER_PRODUCT_MNUM - ? from DPC_SalesOrder_Product where SALESORDER_PRODUCT_ID=? )  where SALESORDER_PRODUCT_ID=?";


// 设置参数值
ps = conn.prepareStatement(sql);
ps.setBigDecimal(1, consignment_product_num);
ps.setInt(2, salesorder_product_id);
ps.setInt(3, salesorder_product_id);


// 执行
ps.executeUpdate();
System.out.println(sql);
}参数BigDecimal consignment_product_num 传进来的值是1,数据库SALESORDER_PRODUCT_MNUM是12.1,这么一减之后应该是11.1,为什么SALESORDER_PRODUCT_MNUM变成了11啊,sql2000数据库,SALESORDER_PRODUCT_MNUM数据类型decimal(18,2)

解决方案 »

  1.   

    我单独在查询分析器里面
    Update DPC_SalesOrder_Product set SALESORDER_PRODUCT_MNUM=(select SALESORDER_PRODUCT_MNUM - 1  from DPC_SalesOrder_Product where SALESORDER_PRODUCT_ID=46 )  where SALESORDER_PRODUCT_ID=46可以得出12.1 - 1 = 11.1 ,为什么从写的那个方法里传参数就不行呢
      

  2.   

    System.out.println(consignment_product_num);//看看值到底是多少?
    ps.setString(1, consignment_product_num.toString());
      

  3.   


    System.out.println(consignment_product_num); 值是1
    ps.setString(1, consignment_product_num.toString());
    不能这么写 consignment_product_num在model里是bigdecimal类型的 不是String 数据库里它是decimal(18,2)
      

  4.   

    数据库实体类 model如下import java.math.BigDecimal;/**
     * 销售订单产品数据库实体类
     * 
     */
    public class SalesOrderProductModel
    {
    private Integer  salesorder_product_id;
    private BigDecimal salesorder_product_mnum;

    public Integer getSalesorder_product_id()
    {
    return salesorder_product_id;
    }
    public void setSalesorder_product_id(Integer salesorder_product_id)
    {
    this.salesorder_product_id = salesorder_product_id;
    }

    public BigDecimal getSalesorder_product_mnum()
    {
    return salesorder_product_mnum;
    }
    public void setSalesorder_product_mnum(BigDecimal salesorder_product_mnum)
    {
    this.salesorder_product_mnum = salesorder_product_mnum;
    }
    }数据库操作类DAO如下
    public void updatemnum(BigDecimal consignment_product_num , Integer salesorder_product_id) throws SQLException
    {
    String sql = " update DPC_SalesOrder_Product  set SALESORDER_PRODUCT_MNUM = SALESORDER_PRODUCT_MNUM - ? where SALESORDER_PRODUCT_ID = ?";
    ps = conn.prepareStatement(sql);
    ps.setBigDecimal(1, consignment_product_num);
    ps.setInt(2, salesorder_product_id);
    ps.executeUpdate();

    }
    action动作类如下
    spdao.updatemnum(new BigDecimal(request.getParameter("consignment_product_num" + tokens[z]).toString()), Integer.parseInt(request.getParameter("salesorder_product_id" + tokens[z])));数据库结构如下
    DPC_SalesOrder_Product表SALESORDER_PRODUCT_MNUM decimal(18,2)
    SALESORDER_PRODUCT_ID int
      

  5.   

    最烦的数据库查询出来的时候,有时是bigdecimal有时是string