Java SQL JDBC模板参数如果参数值为use null,则使用数据库中的内容
我使用spring和JDBC模板来更新一行,我的问题是,我用来更新记录的对象上可能有一些空值,我需要的是,如果该值为空,则使用列上的当前值,而不是在表中将该值设置为空,不确定是否可以使用preparestatement 查询如下所示:Java SQL JDBC模板参数如果参数值为use null,则使用数据库中的内容,java,sql-server,spring,spring-jdbc,Java,Sql Server,Spring,Spring Jdbc,我使用spring和JDBC模板来更新一行,我的问题是,我用来更新记录的对象上可能有一些空值,我需要的是,如果该值为空,则使用列上的当前值,而不是在表中将该值设置为空,不确定是否可以使用preparestatement 查询如下所示: UPDATE CUSTOMER SET activeType = ?, readsBooks = ?, readsKindle = ? WHERE custID = ? 因此,在我的报告中: Object[] parameters = new Object[]
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。使用合并(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返回表达式列表中的第一个非空表达式。必须至少指定两个表达式。如果expr的所有出现值都计算为null,则函数返回null。
聚合(expr1,expr2,…,exprn)我对Java不熟悉。但是,我认为您的语法需要像这样来传递对象值(如果不是null),否则只传递表本身的值
UPDATE CUSTOMER SET
activeType = ?,
readsBooks = coalesce(@readsBooks,readsBooks),
readsKindle = coalesce(@readsKindle,readsKindle)
WHERE custID = ?
数据库中的当前值是什么意思?在查询中使用
where
子句。这正是我需要的。谢谢!我使用的是SQL server,所以SQL略有不同,但使用coalesce(?,T.x)解决了这个问题。谢谢