<分区>
有一个数据库保存着音乐——艺术家、专辑和轨道。每张专辑都有几首轨道,每首轨道在专辑中都有自己的轨道编号。 我尝试执行一个 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这显示了我的表格的外观以及我的请求如何完美运行。理论上。