【问题标题】:Concatenating strings using plus signs in a parameterized query在参数化查询中使用加号连接字符串
【发布时间】:2018-03-10 21:33:05
【问题描述】:

我想问一下如何在SQL中实现这样的东西

String updateUserDocs1 = "UPDATE USERDOCS SET VIEW_DOCS = VIEW_DOCS + ' ' + ? WHERE USER_ID = ?";

它返回一个 java sql 语法错误。遇到:第 1 行的“WHERE”

该语句在语法上似乎是正确的。可能是什么问题?

【问题讨论】:

  • 请澄清您的期望?我看到两个绑定参数;第一个真的很奇怪。 SET VIEW_DOCS = VIEW_DOCS + ' ' + ? 应该做什么?向VIEW_DOCS 追加内容?
  • 是的,我想添加到 VIEW_DOCS 列中的现有记录中,抱歉我的意图不是很清楚。 @ElliottFrisch
  • 尝试使用|| 而不是+ 作为您的字符串连接运算符。它似乎对我有用。
  • UPDATE USERDOCS SET VIEW_DOCS = VIEW_DOCS || ' ' || ? WHERE id = ? 适用于“derby-10.14.1.0.jar”。您使用的是哪个版本的 Derby?
  • 10.11.1.2 不适用于 Maven Central,但我的 test code 也适用于 10.11.1.1。

标签: java sql jdbc derby


【解决方案1】:

许多 SQL 方言支持重载 + 运算符以进行字符串连接,但 ANSI SQL 标准字符串连接运算符是 ||

使用 Derby,代码

sql = "UPDATE USERDOCS SET VIEW_DOCS = VIEW_DOCS + ' ' + ? WHERE USER_ID = ?";
PreparedStatement ps = conn.prepareStatement(sql);

导致以下错误

java.sql.SQLSyntaxErrorException:不支持左操作数类型为“VARCHAR”且右操作数类型为“CHAR”的“+”运算符。

然而,

sql = "UPDATE USERDOCS SET VIEW_DOCS = VIEW_DOCS || ' ' || ? WHERE USER_ID = ?";
PreparedStatement ps = conn.prepareStatement(sql);

工作正常。

【讨论】:

  • 这解释了为什么 ||有效,但 + 无效。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-23
  • 2020-11-09
  • 1970-01-01
相关资源
最近更新 更多