该程序后台数据库是Access
我用的是sun.jdbc.odbc.JdbcOdbcDriver驱动,
       String sqlstr = "INSERT INTO mp_report_volume (ipcc_code, volume_name,"+
                       "start_date, end_date, mpflow_code) VALUES ('"+pContractNumber+"', ?, ?, ?, ?)";       con.setAutoCommit(false);//关闭自动提交
       pre = con.prepareStatement(sqlstr);//声明执行
       //设置参数
       pre.setString(1,hashtable.get(KEYDefine.VOLUME_NAME).toString());
       pre.setDate(2,Date.valueOf(hashtable.get(KEYDefine.START_DATE).toString()));
       pre.setDate(3,Date.valueOf(hashtable.get(KEYDefine.END_DATE).toString()));
       pre.setString(4,hashtable.get(KEYDefine.FLOW_NUMBER).toString());
       pre.executeUpdate();
由于字段ipcc_code 内容比较多,我把它的数据类型由文本 250改为备注类型。
Access帮助上查找的内容如下:
文本类型最多为 255 个字符或长度小于 FieldSize 属性的设置值。
备注类型 最多为 65,535 个字符(如果 Memo 字段是通过 DAO 来操作并且只有文本和数字 [非二进制数据] 保存在其中,则 Memo 字段的大小受数据库大小的限制)。
      但是插入到数据库的内容还是做了截取。
如 当ipcc_code对应的参数pContractNumber内容为:500个字符的内容
执行完这段sql后存到数据库却为352个字符
,后面的148个字符全部截取掉了。当pContractNumber为391个字符时,数据库只保存了348个字符。
不知道为什么?请您不吝赐教

解决方案 »

  1.   

    ipcc_code,这个字符是不是有空格,是全角还是半角,还有,,你再取出的时候,,内容变了吗,
    是少了后边的还是?
    如果你存在有特殊的字符是不行了,你要转换的
      

  2.   

    全部是半角字符(中间没有空格),再取出来就少了很多字符。而且存到数据库就少了右边的内容。
    原来ipcc_code内容少于256字符时,我用文本类型的字段时,没有这个现象。后来
    由于ipcc_code内容超过256个字符时,存储的内容就少了右边的内容,即使更改数据
    类型为备注的,也是一样。真是很疑惑!!!
      

  3.   

    如果全是半角的字符,我想你写的SQL语句可能有点问题,不会使用"+"的形式来组成SQL语句吧,呵,如果是这样的话,那么只要有半角的引号,你是铁定要出错的,并且只插入引号前的部分,
    如果不是的话,我只能说抱歉了,因为SQL的备注类,基本上是不会出界的,我有三页的东东插入里边也没有问题,,何况是你那点东东