查询中的 SQL 变量导致意外的 SQL 语法错误 [重复]
Posted
技术标签:
【中文标题】查询中的 SQL 变量导致意外的 SQL 语法错误 [重复]【英文标题】:SQL variables in query cause unexpected SQL syntax error [duplicate] 【发布时间】:2020-01-14 07:14:44 【问题描述】:有一个数据库保存音乐 - 艺术家、专辑和曲目。每张专辑都有几首曲目,每首曲目在专辑中都有自己的track_number。 我尝试执行一个 SQL 请求,将一个轨道号向上移动(例如,轨道#4 将是轨道#3),同时将另一个轨道号向下移动(前轨道#3 应该成为轨道#4)。 SQL 代码在 mysql Workbench 或 SQL sandbox 中运行时运行良好,但在通过 JDBC 启动时会导致错误。
用标准的 CASE/WHEN/THEN 替换 IF 并没有一点帮助。 用普通语句替换准备好的语句也没有任何好处。
SELECT @current_number := track_number, @current_album := album FROM audio_tracks WHERE id = 4;
UPDATE audio_tracks
SET track_number = IF(track_number = @current_number - 1, @current_number, @current_number - 1)
WHERE @current_number > 1
AND track_number IN (@current_number - 1, @current_number)
AND album = @current_album;
public void processCustomRequest(String sql) throws DaoException
Statement statement = null;
try
statement = connection.createStatement();
statement.execute(sql);
catch (SQLException ex)
throw new DaoException("Failed to execute custom SQL request", ex);
finally
try
if (statement != null)
statement.close();
catch (SQLException ex)
LOGGER.error("Failed to close statement", ex);
我得到的不是预期的变化:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UPDATE audio_tracks SET track_number = IF(track_number = @current_number - 1, @c' at line 1
所以...任何想法如何解决这个问题? 同样,这里是the sandbox,它显示了我的表格的外观以及我的请求如何完美运行。理论上。
【问题讨论】:
默认情况下,你不能一次执行多个语句。 马克,你是我的救星!非常感谢! 【参考方案1】:尝试打印传递给函数的 SQL 字符串,并在执行前检查语法错误。
也使用语句。executeUpdate(sql) 代替语句。execute(sql) 函数。
【讨论】:
我已经试过了。不幸的是,我所看到的看起来与它应该的完全一样。我什至可以复制粘贴打印的字符串并在沙箱中使用它 - 并获得正确的结果。 使用 statement.executeUpdate(sql) 代替 statement.execute(sql) 函数 不,它也适用于通常的 .execute() 方法。我的问题是我没有正确设置连接属性。这个小字符串properties.put("allowMultiQueries", "true");
让一切都以正确的方式工作。感谢您尝试帮助顺便说一句!以上是关于查询中的 SQL 变量导致意外的 SQL 语法错误 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
SQL 编译错误:位置 6 处的语法错误第 2 行意外'R'