![](/img/trans.png)
[英]how to create a general java program to update only the fields that is changed in mysql
[英]How can I update only changed fields in my @Transactional method in Java?
美好的一天 親愛的開發人員! 我需要解決一些與我的方法相關的問題。 我需要創建一個允許我更改對象的編輯/更新方法。
條件之一是只有用戶更改的字段才應在數據庫中更改。 不應覆蓋所有字段。 示例:舊值名稱->“Jack”,新值名稱->“Bob”,應更改 . 但是,如果舊值是 name -> " Jack " 而新值是 name -> "Jack",則不應覆蓋該字段,因為值相等。
我需要我的方法來檢查和更改已更改的字段並在數據庫中插入更改。
我嘗試使用 sql 完成任務,但不幸的是我不知道如何設置這些值(如果新值與現在 DB 中的值相同,則不執行任何更新):
@Transactional(transactionManager = TransactionManagerConfig.TX_MANAGER_MAIN)
public void editUserContacts(User user) {
Connection connection = DataSourceUtils.getConnection(mainDataSource);
String sql = "UPDATE `" + userSchema + "`.l_user " +
" SET user_phone_number = @phoneNumber," +
"firstname = @fullName," +
"user_country = @userCountry," +
"house_phone_number = @phoneAlternative," +
" WHERE l_user_id=? , " +
"user_phone_number != @phoneNumber OR IS NULL," +
"firstName != @fullName OR IS NULL," +
"user_country != @userCountry OR IS NULL," +
"house_phone_number != @phoneAlternative OR IS NULL,;
try (
PreparedStatement statement = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)
) {
statement.executeUpdate();
statement.getUpdateCount();
} catch (SQLException e) {
throw new DAOException(e);
}
}
也許我需要先做 SELECT ,或者使用 equals 比較每個字段? 請告訴我至少一個值的示例,我如何正確執行我的任務?
PS 如果新值不等於舊值,我想更新我的值。 但如果舊值和新值相等,則不應發生任何事情
我將非常感謝您的幫助!
如果我理解正確,您只會在新值不是NULL
時才更新表中的值。 但是,只有部分列可能會受到影響。 為此,請使用COALESCE()
:
UPDATE " + userSchema + ".l_user
SET user_phone_number = COALESCE(@phoneNumber, user_phone_number),
firstname = COALESCE(@fullName, firstname),
user_country = COALESCE(@userCountry, user_country),
house_phone_number = COALESCE(@phoneAlternative, house_phone_number),
WHERE l_user_id = ? AND
not (user_phone_number <=> @phoneNumber and
firstName <=> @fullName and
user_country <=> @userCountry and
house_phone_number <=> @phoneAlternative
);
這將嘗試僅更新四個值之一已更改的行。 <=>
是NULL
比較運算符。
您的查詢嘗試有多個錯誤。
WHERE
子句不識別,
。 那只是一個語法錯誤OR IS NULL
不是有效的 SQL。 那是語法錯誤。WHERE
子句前還有一個逗號,這是另一個語法錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.