"ora1401,插入的值对于列过大"这个错误怎么解决

deane 2002-09-27 04:40:00


我在oracle 将cardid 设为varchar2(4),
采用preparestatement方法插入,

PreparedStatement prestmt=conn.prepareStatement("insert into bbs(card_id) values(?)");
prestmt.setBytes(1,cardid.getBytes());
这时数据库报错,ora1401,插入的值对于列过大,请问怎么回事?
...全文
206 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
deane 2002-09-28
  • 打赏
  • 举报
回复
发现毛病了
将0055这个字符串通过setBytes("0055".getBytes())
存到数据库中变成了00333535!!
后来改成了setString()好使了,
我不是到各位大哥在使用setXXXX方法的时候是怎么用的,什么时候用setBytes(),什么时候用别的,
qiuyang_wang 2002-09-27
  • 打赏
  • 举报
回复
PreparedStatement prestmt=conn.prepareStatement("insert into bbs(card_id) values(ltrim(rtrim(?)))");
jiezhi 2002-09-27
  • 打赏
  • 举报
回复
对于数值进行trunc或round
对于char进行trim
deane 2002-09-27
  • 打赏
  • 举报
回复
这个0055我是直接付给cardid的,carid="0055";
是sql错误,
实在没办法,我把数据库中的card_id字段改成varchar2(10),
这下又说“违反约束条件“未找到父关键字,可0055的确在另一张表里有阿,
而且用insert into bbs(id,card_id) values('001','0055)可以插进去,
我怀疑prestmt.setBytes(1,cardid.getBytes());这句话的毛病,不知道
除了setBytes(),还有没有别的方法
jlandzpa 2002-09-27
  • 打赏
  • 举报
回复
好象不可能,你确信是这个sql报的?
试试 0 00 005 ?
zhaoyongzhu 2002-09-27
  • 打赏
  • 举报
回复
0055确实是4位,前后不会有空格吧。
jlandzpa 2002-09-27
  • 打赏
  • 举报
回复
值超过了4位了.
deane 2002-09-27
  • 打赏
  • 举报
回复
如果这样的话当我getString取出来的时候,carid还会是我放进去的值么
因为在jsp中我将carid变量设为0055,在数据库中我将card_id长度设为4位,
难道0055在数据库中会变成5位????
zhaoyongzhu 2002-09-27
  • 打赏
  • 举报
回复
增加字段cardid的长度,让他足够长

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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