[IBM][CLI Driver][DB2/NT] SQL0302N  在 EXECUTE 或 OPEN 语句中的主机变量值对于其相应的使用来说过大。  SQLSTATE=22001
有时会有这样的错误,不知道是什么意思

解决方案 »

  1.   

    这是修改数据库记录的方法,STRINGUPDATE是sql语句,应该没有问题;tecdef是个对象,用这个对象获取要修改的值
     public void executeUpdate(){    try {
                conn= connmgr.getDB2Connection();
              }
              catch (Exception ex) {
             //connmgr.dropDB2Connection();//释放连接
             System.out.println( ex.toString());
             //throw ex;
            }
            try{
            PreparedStatement pstmt = conn.prepareStatement(STRINGUPDATE);
            //
           pstmt.setString(1,tecdef.getIncode());
           pstmt.setString(2, tecdef.getInname());
           pstmt.setString(3,tecdef.getTeacherid());
           pstmt.setString(4,tecdef.getTeachername());
           pstmt.setDate(5,tecdef.getBirthday());
           pstmt.setString(6, tecdef.getGender());
           pstmt.setString(7, tecdef.getPoly());
           pstmt.setString(8, tecdef.getNation());
           pstmt.setString(9, tecdef.getEducation());
           pstmt.setString(10, tecdef.getLevel());
           pstmt.setString(11, tecdef.getBianzhi());
           pstmt.setString(12, tecdef.getInschool());
           pstmt.setString(13, tecdef.getDepartment());
           pstmt.setString(14, tecdef.getHealth());
           pstmt.setString(15, tecdef.getIdentity());
           pstmt.setString(16, tecdef.getMarry());
           pstmt.setString(17, tecdef.getNativeplace());
           pstmt.setDate(18,tecdef.getWorktime());
           pstmt.setDate( 19, tecdef.getCometime());
           pstmt.setString(20, tecdef.getHomephone());
           pstmt.setString(21, tecdef.getPostaddress());
           pstmt.setString(22, tecdef.getPostcode());
           pstmt.setString(23,tecdef.getEmail());
           pstmt.setString(24, tecdef.getRe());
           pstmt.setString(25, tecdef.getTeacherid());        pstmt.executeUpdate();
            pstmt.close();
            connmgr.dropDB2Connection();
            conn.close();
             }catch(Exception e){
                               System.out.print("There is wrong with update:"+e.getMessage());
                                  }
    }
      

  2.   

    有些字符串的长度超过你在sql里定义的长度
    仔细检查一下吧,注意空格!
      

  3.   

    有些字符串的长度超过你在sql里定义的长度
    仔细检查一下吧,注意空格!
      

  4.   

    谢谢 sgdb(神天月晓) 你说的是EXECUTE 或 OPEN 那个错误产生的原因
    但为什么没修改成功还是不知道
      

  5.   

    22001  值需要截断。  值需要被系统强制转换或调整函数截断。 http://www-3.ibm.com/software/data/db2/everyplace/doc/chs/html/adg/dsyadgtfrm.htm?sqlstate.htm
    这个是IBM官方网站,给你的连接是DB2出错代码的集合,收藏一下吧~偶用的也是DB2~
      

  6.   

    有可能你的pstmt太长了~超出规定范围,所以被截断,也就不能正常运行了~
      

  7.   

    Geranium(魂归阿寒) 
    赫赫:不是太长了是输入的信息超出了字段定义的长度
      

  8.   

    pstmt.executeUpdate();
    变成
    int[] updateCounts=pstmt.executeBatch();