如果输入值不为null,则更新列,否则将忽略并保留该列的现有值在数据库中

如果输入值不为null,则更新列,否则将忽略并保留该列的现有值在数据库中,第1张

如果输入值不为null,则更新列,否则将忽略并保留该列的现有值在数据库中

您正在将用户名直接插入SQL中,而没有转义,甚至不加引号。我认为您只是错过了撇号。

为了防止SQL注入问题,切勿从动态数据中插入SQL字符串常量,始终使用PreparedStatement并插入标记

另外,可以转义值,但是使用标记要安全得多,并且可以通过允许数据库缓存已编译的SQL语句来提高SQL性能。

String updateQuery = "UPDATE " + USER_TABLE + " SET " + USER_TABLE_FIRST_NAME + "=IFNULL(? ," + USER_TABLE_FIRST_NAME + ")," +USER_TABLE_LAST_NAME + "=?," +USER_TABLE_about_ME + "=?," +USER_TABLE_CITY + "=?," +USER_TABLE_DOB + "=?" +          " WHERe " + USER_TABLE_ID + "=?";PreparedStatement stmt = conn.prepareStatement(updateQuery);stmt.setString(1, user.getFirstName());stmt.setString(2, user.getLastName());stmt.setString(3, user.getaboutMe());stmt.setString(4, user.getCity());stmt.setString(5, user.getDateOfBirth());stmt.setString(6, user.getUserId());

注意: 答案已扩展至涵盖空检查问题。

当您使用简单的字符串注入时,

"A='" + name + "'"
将变为
A='Joe'
非空值,但变为
A='null'
空值,这绝对不是您想要的。

通过使用参数标记,

?
can的值可以为
null
,这意味着
IFNULL(?,Name)
将给出所需的确切行为,即使用
?
when的值不为null以及
NAME
when的
?
值为null。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5673897.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存