如果参数值为null,则使用数据库中的内容的SQL JDBC模板参数

3
我正在使用Spring和JDBC模板来更新一行记录,我的问题是我用于更新记录的对象可能具有一些空值,在这种情况下,我需要的是如果值为空,则使用列上的当前值而不是将该值设置为null在表中。不确定是否可以使用preparestatement实现此目的?
查询应该类似于:
UPDATE CUSTOMER SET
activeType = ?,
readsBooks = ?,
readsKindle = ?
WHERE custID = ?

因此,在我的存储库中:

Object[] parameters = new Object[] { 

customer.getActiveType,
customer.readsBooks,
customer.readsKindle 
    };
memberIterestsRowUpdated = jdbcTemplate.update(query, parameters);

所以,如果readsBook或readKindle为null,则我希望使用数据库中的当前值,而不是将它们设置为null。

“当前数据库中的值”是什么意思? - Shreyas Chavan
在你的查询中使用where子句。 - Vamsi Prabhala
2个回答

4

使用coalesce(param1,param2)函数,如果param1为null,则返回param2。此函数支持oracle和sql server。

UPDATE CUSTOMER T SET
T.activeType = ?,
T.readsBooks = coalesce(?,T.readsBooks ),
T.readsKindle = coalesce(?,T.readsKindle )
WHERE T.custID = ?

COALESCE函数返回表达式列表中第一个非空值。您必须指定至少两个表达式。如果所有的表达式都为null,则该函数返回null。

COALESCE (expr1, expr2, ..., exprn)


这正是我所需要的,谢谢!我正在使用SQL Server,因此SQL略有不同,但使用coalesce(?,T.x)解决了它。谢谢。 - emad885

4

我对Java不是很熟悉。但是,我认为您的语法应该像这样,以传递对象值(如果不为空),否则就使用表格本身的值。

UPDATE CUSTOMER SET
activeType = ?,
readsBooks = coalesce(@readsBooks,readsBooks),
readsKindle = coalesce(@readsKindle,readsKindle)
WHERE custID = ?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接