java - 查询中的 SQL 变量导致意外的 SQL 语法错误

标签 java mysql sql

<分区>

有一个数据库保存着音乐——艺术家、专辑和轨道。每张专辑都有几首轨道,每首轨道在专辑中都有自己的轨道编号。 我尝试执行一个 SQL 请求,将一个轨道号向上移动(例如,track#4 将变为 track#3),同时将另一个轨道号向下移动(ex-track#3 应变为 track#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);
        }
    }
}

我得到的不是预期的转变: 您的 SQL 语法有误;查看与您的 MySQL 服务器版本对应的手册,了解在第 1 行的“UPDATE audio_tracks SET track_number = IF(track_number = @current_number - 1, @c'”附近使用的正确语法

那么...有什么办法可以解决这个问题吗? 同样,这里是 the sandbox这显示了我的表格的外观以及我的请求如何完美运行。理论上。

最佳答案

尝试打印传递给函数的 SQL 字符串并在执行前检查语法错误。

也可以使用 statement.executeUpdate(sql) 而不是 statement.execute(sql) 函数。

关于java - 查询中的 SQL 变量导致意外的 SQL 语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57906211/

相关文章:

mysql - 显示表中的所有列以及每列中填充记录的计数

java - 在Java中将Dimension转换为int?

java - super() 应该隐式调用还是显式调用?

Java:当使用 Procrun 将应用程序注册为 Windows 服务时,使用 ProcessBuilder 运行批处理文件

java - Hibernate mysql group by day连续结果

sql - 命名SQL表列的最佳实践

sql - MYSQL Create table + Alter table 语法错误?

java - 如何使用ndk在eclipse中导入和编辑C++代码?

jquery - 使 http ://jquery-datatables.meteor.com/... 运行?

mysql - 使用连接更新列