Sql JDBC从对象更新单个字段
我正在从一个对象对一个表进行jdbc更新。对象有几个属性,我只想用有值的对象更新我的表。问题是,下面的update语句将擦除所有省略的值(如果它们不在对象中) 例如:Sql JDBC从对象更新单个字段,sql,jdbc,sql-update,Sql,Jdbc,Sql Update,我正在从一个对象对一个表进行jdbc更新。对象有几个属性,我只想用有值的对象更新我的表。问题是,下面的update语句将擦除所有省略的值(如果它们不在对象中) 例如: String statementStr = "update users " + "set firstName = ?, lastName = ?, email = ?, birthday = ?, " + "gender = ?
String statementStr = "update users "
+ "set firstName = ?, lastName = ?, email = ?, birthday = ?, "
+ "gender = ?"
+ "where id = ?;";
如何修改此语句以仅更新对象中填充的值?如果我正确理解您的意思,则您可以使用
ISNULL()
仅使用不可为空的权限更新字段,否则保留字段而不更新它:
UPDATE users
SET firstName = ISNULL(@nameParam, firstName),
lastName = ISNULL(@lastNameParam, lastName),
email = ISNULL(@emailParam, email),
...
WHERE id = ?;
我能代替你吗?对于@param值?我正在使用准备好的语句,如:prep.setString(2,user.getFirstName()),我不确定如何用您的示例替换PS。你的例子正是我想做的!您也可以在
的WHERE
中替换?
,但我把它留给您,让您用您想要的条件来填充它。因为它不同于集合
子句中的其他?
。@Atma Yes,用问号代替。根据您的rdbms风格,使用COALESCE而不是ISNULL:String语句str=“更新用户集firstName=COALESCE(?,firstName),lastName=COALESCE(?,lastName),…其中id=?”