当前位置: 首页 > 知识库问答 >
问题:

查询中的SQL变量导致意外的SQL语法错误[重复]

百里芷阳
2023-03-14

有一个数据库保存音乐-艺术家,专辑和曲目。每个专辑都有几首曲目,每首曲目在专辑中都有自己的track_number。我尝试执行一个SQL请求,将一个曲目号向上移动(例如,曲目#4将成为曲目#3),同时将另一个曲目号向下移动(前曲目#3应该成为曲目#4)。SQL代码在MySQL Workbench或SQL sandbox中运行时工作良好,但在通过JDBC启动时会导致错误。

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 server版本相对应的手册,以获得使用“update audio_tracks SET track_number=IF(track_number=@current_number-1,@c'at line 1”附近的正确语法

所以...有什么办法解决这个问题吗?再一次,这是一个沙箱,它显示了我的表的外观以及我的请求是如何完美地工作的。理论上。

共有1个答案

楚举
2023-03-14

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

还要使用Statement.ExecuteUpdate(sql)而不是Statement.Execute(sql)函数。

 类似资料:
  • 我在寻找一个特定点周围的距离。 我在我的数据库中有这些项目,带有lat和long。 我想得到指定半径范围内的所有结果。 我就是这样得到的: 现在它给了我一个错误: SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;查看与MySQL服务器版本对应的手册,以了解第4行(SQL:select*,(6371*acos(cos(radians(51,3))*cos(radia

  • 问题内容: 在Python的psycopg2中将参数指定为execute()时,如下所示: 我收到此错误: 我究竟做错了什么?看起来psycopg2在查询中添加了单引号,而这些单引号导致了语法错误。 如果我不使用参数,它将正常工作: 问题答案: 我相信这样的参数化语句应与 值 一起使用,而不是与表名(或SQL关键字等)一起使用。因此,您基本上对此感到不走运。 但是,请不要担心,因为该机制旨在防止S

  • 请查看与您的MySQL server版本相对应的手册,以便在

  • 我遇到了这个错误。 com.mysql.jdbc.exceptions.jdbc4。您有一个错误,在您的SQL语法;检查手册,对应于您的MySQL服务器版本的正确的语法使用附近'like='1',不喜欢='0',mealID='17'WHERE mealID='17"在第1行在sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)在

  • 问题内容: 为SQL Server编写查询时,可以声明和使用如下变量: 在编写用于MS Access的查询时,是否有一种方法可以类似地声明和使用变量? 我需要用另一个查询的结果填充变量,然后使用该值执行插入/更新操作。该查询将从.NET应用程序运行。 问题答案: 在某种方式 但是,您不能使用,在运行查询或在VBA中设置查询时可以手动输入参数。 您可以使用System.Data.OleDb命名空间中

  • 问题内容: 我有一个带下表的sqlite数据库: 两个示例记录如下所示: (大麦的球队输了,安娜的赢了。每场比赛每队都有几名球员。)我想创建一个查询,该查询将返回所有有x个玩家在一个团队而y个玩家在另一个团队的游戏,以及这些游戏的累积结果。游戏。 我知道如何使用perl和csv文件来执行此操作,并且我相信我可以对dbi接口使用相同的方法。但是,我想学习如何仅使用SQL查询来创建此报告。我是SQL的