【发布时间】: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,它显示了我的表格的外观以及我的请求如何完美运行。理论上。
【问题讨论】:
-
默认情况下,你不能一次执行多个语句。
-
马克,你是我的救星!非常感谢!