查询中的 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 查询中插入 php 变量?

SQL 编译错误:位置 6 处的语法错误第 2 行意外'R'

SQL日期查询中的VBA变量

SQL 意外选择

SQL 编译错误:位置 157 的语法错误第 5 行意外'<EOF>'

带有子查询的 redshift sql 查询中的语法错误