[b]由于本人表达能力不是很好,如果下面所说不能让你理解,请告之....!谢谢!
问题:
ibatis 使用外部映射,指定了nullValue属性,
向表中插入数据时,如果有参数为null,还是要报错
比如 下面的password未赋值时,会出问题[/b]
insert into user(name,password,age)
values(?,?,?)
javaBean为
public class User{
private String name;
private String password;
private int age;
public void setName(String name){this.name=name;)}
public String getName{return this.name;}
public void setPassword(String password){this.password=password;}
public String getPassword{return this.password;}
public void setAge(int age){this.age=age;}
public int getAge{return this.age;}
}
.....................
//下面的代码访问数据库
SqlMapClient smc=......//构建一个SqlMapClient对象
User user=new User();
user.setName("admin");//只给name赋值,其它两个字段为空
smc.insert("insertUser",user);
//------------谢谢您的观看!
....................
根据哥们的描述感觉似乎哥们把nullValue这个属性的意思理解错了。
nullValue的作用是:当Java Bean 的属性值等于指定值时,相应的表字段将赋值NULL。这个特性 允许在应用中给不支持null 的数据类型(即int,double,float 等)赋值null。哥们的理解可能是当javaBean中的字段为空时用nullValue指定的值替换入库吧。这是我的猜想,理解错了还还请见谅。呵呵。
你这里出错倒不是因为上面的原因。
我先把正确的贴出来:
下面我说下原因:
JavaBean中的password字段为string初始值为null,
传入parameterMap的值也为null,入库时相当于对相应字段插入空值。
而jdbc Driver无法识别该空值的类型。所以必须指定jdbcType的类型。告诉jdbc
Driver 这是个varchar类型的空值。问题应该就出在这。
总之:当往库中插入空值的时候,应该指定jdbcType类型。
完毕,谢谢!