SQL JDBC 模板参数如果参数值为空则使用数据库中的值
SQL JDBC Template Arguments if parameter value is use null then use what is in the database
我正在使用 spring 和 JDBC 模板来更新一行,我的问题是我用来更新记录的对象可能有一些空值和我需要的如果值为 null,则使用列上的当前值,而不是在 table 中将值设置为 null,不确定是否可以使用准备语句?
查询如下:
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 为空,那么我想使用数据库中的当前值,而不是将它们设置为空。
使用coalesce(param1,param2)
,如果param1为null,则returnsparam2。它在 oracle 和 sql 服务器中受支持。
UPDATE CUSTOMER T SET
T.activeType = ?,
T.readsBooks = coalesce(?,T.readsBooks ),
T.readsKindle = coalesce(?,T.readsKindle )
WHERE T.custID = ?
COALESCE returns 表达式列表中的第一个非空表达式。您必须至少指定两个表达式。如果所有出现的 expr 的计算结果都为空,则函数 returns 为空。
合并 (expr1, expr2, ..., exprn)
我不熟悉Java。但是,我认为您的语法需要看起来像这样才能传递对象值(如果不为空),否则只是 table 本身的值。
UPDATE CUSTOMER SET
activeType = ?,
readsBooks = coalesce(@readsBooks,readsBooks),
readsKindle = coalesce(@readsKindle,readsKindle)
WHERE custID = ?
我正在使用 spring 和 JDBC 模板来更新一行,我的问题是我用来更新记录的对象可能有一些空值和我需要的如果值为 null,则使用列上的当前值,而不是在 table 中将值设置为 null,不确定是否可以使用准备语句?
查询如下:
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 为空,那么我想使用数据库中的当前值,而不是将它们设置为空。
使用coalesce(param1,param2)
,如果param1为null,则returnsparam2。它在 oracle 和 sql 服务器中受支持。
UPDATE CUSTOMER T SET
T.activeType = ?,
T.readsBooks = coalesce(?,T.readsBooks ),
T.readsKindle = coalesce(?,T.readsKindle )
WHERE T.custID = ?
COALESCE returns 表达式列表中的第一个非空表达式。您必须至少指定两个表达式。如果所有出现的 expr 的计算结果都为空,则函数 returns 为空。 合并 (expr1, expr2, ..., exprn)
我不熟悉Java。但是,我认为您的语法需要看起来像这样才能传递对象值(如果不为空),否则只是 table 本身的值。
UPDATE CUSTOMER SET
activeType = ?,
readsBooks = coalesce(@readsBooks,readsBooks),
readsKindle = coalesce(@readsKindle,readsKindle)
WHERE custID = ?