iteye_17135
2009-03-02 16:48 阅读 677
已采纳

奇怪,向mysql插入数据部分会出现Data truncated for column 错误

使用框架:hibernate+spring+webwork+freemark

程序部分:
public String UpInaccExcel() throws Exception
{
message="";
if (!hasPermission(PermConst.INACC_BATCHADD)) {
message = "抱歉,您无该操作的权限!";
return Constant.NOT_AUTHORIZE;
}
if(inaccFile == null)
{
message="请选择要上传的Excel文件";
return INPUT;
}
else
{
try{
Workbook wb = Workbook.getWorkbook(inaccFile);
Sheet sheet = wb.getSheet(0);
//总行数
int count = sheet.getRows();
//取出标题
String a1 = sheet.getCell( 0 , 0 ).getContents().trim();
String a2 = sheet.getCell( 1 , 0 ).getContents().trim();
String a3 = sheet.getCell( 2 , 0 ).getContents().trim();
String a4 = sheet.getCell( 3 , 0 ).getContents().trim();
String a5 = sheet.getCell( 4 , 0 ).getContents().trim();
String a6 = sheet.getCell( 5 , 0 ).getContents().trim();
String a7 = sheet.getCell( 6 , 0 ).getContents().trim();
String a8 = sheet.getCell( 7 , 0 ).getContents().trim();
String a9 = sheet.getCell( 8 , 0 ).getContents().trim();
String a10 = sheet.getCell( 9 , 0 ).getContents().trim();

          if(a1.equals("所在仓库") && a2.equals("品牌")&& a3.equals("产品大类")
                  && a4.equals("配件编号")&& a5.equals("配件名称") && a6.equals("配件规格")&& a7.equals("仓位")
                  && a8.equals("配件数量")&& a9.equals("配件单价")&& a10.equals("配件金额"))
          {
              for ( int  i  =   1 ;i  <  count;i ++ ){

                  try{
                      Cell[] cells  =  sheet.getRow(i);
                      System.out.println(cells[ 0 ].getContents()
                               + cells[ 1 ].getContents() + cells[ 2 ].getContents()
                               + cells[ 3 ].getContents() + cells[ 4 ].getContents()
                               + cells[ 5 ].getContents() + cells[ 6 ].getContents()+ "---"+Double.parseDouble(cells[ 9 ].getContents())+"---

-"+StringUtil.MySubstring(cells[ 5 ].getContents(),100));
String scope = "storageName=?";
Collection paras = new ArrayList();
paras.add(cells[ 0 ].getContents());
Storage tmpstroage = this.storageService.GetInfo(scope, paras);
if(tmpstroage!=null){
Inaccessories tempinacc = new Inaccessories();
tempinacc.setStorage(tmpstroage);
tempinacc.setInBrand(StringUtil.MySubstring(cells[ 1 ].getContents(),50));
tempinacc.setInProducts(StringUtil.MySubstring(cells[ 2 ].getContents(),50));
tempinacc.setInAccNo(StringUtil.MySubstring(cells[ 3 ].getContents(),50));
tempinacc.setInAccName(StringUtil.MySubstring(cells[ 4 ].getContents(),100));
tempinacc.setInAccStandards(StringUtil.MySubstring(cells[ 5 ].getContents(),100));
tempinacc.setInPhysicsSort(StringUtil.MySubstring(cells[ 6 ].getContents(),400));
tempinacc.setInSortNum(Integer.parseInt(cells[ 7 ].getContents().trim()));
tempinacc.setInAccPrice(Double.parseDouble(cells[ 8 ].getContents().trim()));
tempinacc.setInAmount(Double.parseDouble(cells[ 9 ].getContents().trim()));
tempinacc.setInCreateDate(new Date());
tempinacc.setInOperator(getSessionAccount().getName());
tempinacc.setInSatus(0);
this.inaccessoriesService.save(tempinacc);
}
else
{
inaccFile=null;
message="已经成功上传前"+(i-1)+"条数据,第"+i+"的仓库不存在请先添加仓库!";
ToUrlPath="inAccHistory.do";
return SUCCESS;
}
}
catch(Exception ex)
{
inaccFile=null;
System.out.print(ex.getMessage());
message="已经成功上传前"+(i-1)+"条数据,请检查第"+i+"以后的数据是否完整、是否按格式!";
ToUrlPath="inAccHistory.do";

                        return SUCCESS;

                 }
              }
              wb.close();
              inaccFile=null;
              message="成功上传"+(count-1)+"条数据";
              ToUrlPath="inAccHistory.do";
              return SUCCESS;

          }
          else
          {
              wb.close();
              inaccFile=null;
              message="请检查信息是否按格式。";
              return INPUT;             

          }

        }
        catch(Exception ex){
            inaccFile=null;
            message="上传失败!请检查上传的文件是否为excel格式、信息是否完整、是否按格式、且大小是否超过1兆。"+ex.toString();
            return INPUT;               
        }
    }
}

插入的excel数据

所在仓库 品牌 产品大类 配件编号 配件名称 配件规格 仓位 配件数量 配件单价 配件金额
超人产品仓 超人小家电 剃须刀 60004 超人剃须刀SA22 旋转式1刀头 前台 1 16.64 76.18
超人产品仓 超人小家电 剃须刀 60002 超人剃须刀SA96 浮动旋转双刀头 前台 2 38.09 76.18
超人产品仓 超人小家电 剃须刀 60005 超人剃须刀SA90 旋转式2刀头   前台 1 41.34 41.34
超人产品仓 超人小家电 剃须刀 60006 超人剃须刀SA851 旋转式3刀头 前台 1 62.14 62.14
超人产品仓 超人小家电 剃须刀 60007 超人剃须刀SA851 浮动式双头 前台 2 64.74 129.48

第一,二条数就会出错以下错误.其它数据不会出错这样的错误

Hibernate operation: could not insert: [com.equipment.vo.Inaccessories]; uncategorized SQLException for SQL [insert into equipment.inaccessories

(In_SortageID, In_AccNo, In_Brand, In_Products, In_AccName, In_PhysicsSort, In_AccStandards, In_CreateDate, In_SortNum, In_Batch, In_AccPrice, In_Amount,

In_Operator, In_Satus, In_ReviewTime, In_ReviewOperator) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]; SQL state [01004]; error code [0]; Data

truncation: Data truncated for column 'In_Amount' at row 1

我试过把配件金额那列的数据都改成76.18都会有这样的问题.其实数据就不会. 不知道为什么,也很奇怪.请问谁遇到过这样的问题,如何解决的.先在这谢过大家啦!
[b]问题补充:[/b]
是的.我的In_Amount是类型是double的.数据库里的类型是decimal(10,2)

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

3条回答 默认 最新

  • 已采纳
    ych19850810 ych19850810 2009-03-03 09:28

    'In_Amount' 这个字段的设计可有问题。

    点赞 评论 复制链接分享
  • zybzhen zybzhen 2009-03-02 16:52

    你的意思是 76.18 不让存?

    点赞 评论 复制链接分享
  • ych19850810 ych19850810 2009-03-03 09:27

    出现这样的错误原因如下:

    1.数据库中content字段的长度不够,可能太短了,可以加长字段的长度。

    2.乱码问题造成的,想办法解决乱码问题。

    点赞 评论 复制链接分享

相关推荐