万恶的BigDecimal

summily 2010-12-03 05:18:48
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)
...全文
156 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
djvfe 2010-12-04
  • 打赏
  • 举报
回复
最烦的数据库查询出来的时候,有时是bigdecimal有时是string
summily 2010-12-03
  • 打赏
  • 举报
回复
数据库实体类 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
summily 2010-12-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 caofaping 的回复:]
SQL code

update DPC_SalesOrder_Product t set t.SALESORDER_PRODUCT_MNUM = t.SALESORDER_PRODUCT_MNUM - ? where SALESORDER_PRODUCT_ID = ?


呵呵,看到你sql帮你改了下。随便帮顶下!
[/Quote]
谢谢 还有没有知道的 麻烦帮帮忙
ETCentury 2010-12-03
  • 打赏
  • 举报
回复
还是打印出来看看!

不过这个问题真有意思,如果实在不行,拆开做
caofaping 2010-12-03
  • 打赏
  • 举报
回复

update DPC_SalesOrder_Product t set t.SALESORDER_PRODUCT_MNUM = t.SALESORDER_PRODUCT_MNUM - ? where SALESORDER_PRODUCT_ID = ?

呵呵,看到你sql帮你改了下。随便帮顶下!
summily 2010-12-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 blazingfire 的回复:]
System.out.println(consignment_product_num);//看看值到底是多少?
ps.setString(1, consignment_product_num.toString());
[/Quote]

System.out.println(consignment_product_num); 值是1
ps.setString(1, consignment_product_num.toString());
不能这么写 consignment_product_num在model里是bigdecimal类型的 不是String 数据库里它是decimal(18,2)
blazingfire 2010-12-03
  • 打赏
  • 举报
回复
System.out.println(consignment_product_num);//看看值到底是多少?
ps.setString(1, consignment_product_num.toString());
summily 2010-12-03
  • 打赏
  • 举报
回复
我单独在查询分析器里面
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 ,为什么从写的那个方法里传参数就不行呢

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧