【问题标题】:activejdbc update in clause is not workingactivejdbc update in 子句不起作用
【发布时间】:2019-06-05 20:13:16
【问题描述】:

我想使用activejdbc更新多条记录

Person.update("name = ?, last_name = ?", "name in ?", "Steve", "Johnson", "jagadeesh,varma,jampana,vikash");

没有错误,但 db 中没有任何更新

【问题讨论】:

  • update 方法返回更新的行数,能否请您告诉我们您的调用返回。
  • 您使用的是哪个数据库?我认为问题与in 子句有关,看看这个:javalite.io/in_clause

标签: java activejdbc


【解决方案1】:

问题与in 子句有关。 根据in 子句的要求,您传递的是“jagadeesh,varma,jampana,vikash”而不是“('jagadeesh','varma','jampana','vikash')”

这个解决方案应该可以解决您的问题:

Person.update("name = ?, last_name = ?", "name in ('jagadeesh','varma','jampana','vikash')", "Steve", "Johnson");

More details

【讨论】:

  • 我检查了这里没问题。我相信你的记录是“Jagadeesh”而不是“jagadeesh”,所以应该是Person.update("name = ?, last_name = ?", "name in ('Jagadeesh','Varma','Jampana','Vikash')", "Steve", "Johnson");
【解决方案2】:

这不是 ActiveJDBC 框架的问题,而是 JDBC 标准不支持的问题。请参阅此页面了解更多信息: http://javalite.io/in_clause

你需要连接字符串:

List names = Util.list("jagadeesh","varma","jampana","vikash");
List<Person> people = Person.update(name = ?, last_name = ?", "name IN ('" + Util.join(names, "', '") + "')", "John", "Doe");

不幸的是,如果您正在构建 Web 应用程序,这可能会引发 SQL 注入攻击 - 所以要小心。

【讨论】:

  • 感谢 ipolevoy,我没有得到你的答案,在上面的代码中你没有更新任何东西。有没有其他方法可以使用 in 子句更新特定字段
  • 基本上,@vladwoguer 给出了相同的答案,我也赞成
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-23
  • 2013-01-26
  • 1970-01-01
  • 2021-02-14
  • 2015-07-24
  • 1970-01-01
相关资源
最近更新 更多