Sql JDBC从对象更新单个字段

Sql JDBC从对象更新单个字段,sql,jdbc,sql-update,Sql,Jdbc,Sql Update,我正在从一个对象对一个表进行jdbc更新。对象有几个属性,我只想用有值的对象更新我的表。问题是,下面的update语句将擦除所有省略的值(如果它们不在对象中) 例如: String statementStr = "update users " + "set firstName = ?, lastName = ?, email = ?, birthday = ?, " + "gender = ?

我正在从一个对象对一个表进行jdbc更新。对象有几个属性,我只想用有值的对象更新我的表。问题是,下面的update语句将擦除所有省略的值(如果它们不在对象中)

例如:

 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=?”