oracle的CHAR类型踩坑

7 篇文章 0 订阅
2 篇文章 0 订阅

今天做南大通用到Oracle的同步时发现一个问题:

        带有char类型的主键,更新不报错,但是更新失效,更了个寂寞;

sql如下:

update "orl11_gb01" set "svarchar"=? where 2>1  and "schar"=? and "stimestamp"=?

更新失败的原因是:

在oracle中,char表示定长的字符串,当字符串长度不够时,数据库会自动用空格补全到指定长度从而造成错误。

解决方案:

如果char是存整形的数据,在不改sql的情况下,可以直接做转化就行。

ps.setObject(i+1, Integer.valueOf((String) obj));

如果char存放字符‘a’等String数据,则考虑修改sql结构。

  1.  使用select * from "orl11_gb01"where trim("schar")=?;的形式进行操作。使用trim去掉前后空格。
  2. 使用select * from "orl11_gb01" where "schar"= rpad(string,类型(length))的形式。rpad函数有3个参数,字符串和填充长度以及填充字符,其中字符串参数是必需的,其他两个参数是可选参数。
  3. 使用ps.setString(1,cast("schar",char(255))),内置函数cast 是进行类型转换。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值