今天做南大通用到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结构。
- 使用select * from "orl11_gb01"where trim("schar")=?;的形式进行操作。使用trim去掉前后空格。
- 使用select * from "orl11_gb01" where "schar"= rpad(string,类型(length))的形式。rpad函数有3个参数,字符串和填充长度以及填充字符,其中字符串参数是必需的,其他两个参数是可选参数。
- 使用ps.setString(1,cast("schar",char(255))),内置函数cast 是进行类型转换。