Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SQL JDBC模板参数如果参数值为use null,则使用数据库中的内容_Java_Sql Server_Spring_Spring Jdbc - Fatal编程技术网

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

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[]

我使用spring和JDBC模板来更新一行,我的问题是,我用来更新记录的对象上可能有一些空值,我需要的是,如果该值为空,则使用列上的当前值,而不是在表中将该值设置为空,不确定是否可以使用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。

使用
合并(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)解决了这个问题。谢谢