Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SQL-在DAO中执行时列名无效_Java_Spring_Oracle_Plsql_Spring Jdbc - Fatal编程技术网

Java SQL-在DAO中执行时列名无效

Java SQL-在DAO中执行时列名无效,java,spring,oracle,plsql,spring-jdbc,Java,Spring,Oracle,Plsql,Spring Jdbc,我正在对我的Spring应用程序执行查询,该应用程序将根据此查询选择数据库中的数据: SELECT * FROM ( SELECT a.*, rownum r__ FROM ( SELECT * FROM SUBSCRIPTIONS WHERE status = 'active' and is_blocked = 'N' ) a WHERE rownum < ((1 * 3) +

我正在对我的Spring应用程序执行查询,该应用程序将根据此查询选择数据库中的数据:

SELECT * FROM
    (
        SELECT a.*, rownum r__
        FROM
        (
            SELECT * FROM SUBSCRIPTIONS WHERE status = 'active' and is_blocked = 'N'
        ) a
        WHERE rownum < ((1 * 3) + 1 )
    )
WHERE r__ >= (((1-1) * pageSize) + 1)
我们的目标是简单地浏览结果

在数据库查询窗口上执行代码时,我得到了预期的结果,但在java代码中直接执行时,通常会出现以下错误:

原因:org.springframework.jdbc.badsqlgramarException: PreparedStatementCallback;错误的SQL语法[从选择中选择* a、 *,rownum r\uuuuuu从订阅中选择* 其中status='active'和is_blocked='N'a WHERE rownum< ?*?+1,其中r_>=?-1*?+1];嵌套异常是 java.sql.SQLException:列名无效

我不明白为什么会返回此错误,因为我的查询在Oracle SQL客户端上执行时有效

要执行查询,请执行以下操作:

MapSqlParameterSource params = new MapSqlParameterSource();
        params.addValue("pageSize", paging.getItemsPerPage());
        params.addValue("pageNumber", paging.getPageToFetch());
        SqlQueryLogger.logDebugSqlQuery(selectActiveAndUnblockedSubscriptionPaged, params, log);

        List<Subscription> subscriptions = getNamedParameterJdbcTemplate().query(selectActiveAndUnblockedSubscriptionPaged, params, new SubscriptionRowMapper());
        SubscriptionPagingResult subscriptionPagingResult = new SubscriptionPagingResult();
        subscriptionPagingResult.setResult(subscriptions);
SelectActiveAndUnbuckedSubscriptionPaged变量为:

"SELECT * FROM" +
            "(" +
            "    SELECT a.*, rownum r__" +
            "    FROM" +
            "    (" +
            "        SELECT * FROM SUBSCRIPTIONS WHERE status = 'active' and is_blocked = 'N'" +
            "    ) a" +
            "    WHERE rownum < ((:pageNumber * :pageSize) + 1 )" +
            ")" +
            "WHERE r__ >= (((:pageNumber-1) * :pageSize) + 1)";
有人知道为什么这个代码不起作用吗?
谢谢你

只是一个建议,你错过了主菜单后面的表格别名

SELECT t.* FROM
(
    SELECT a.*, a.rownum r__
    FROM
    (
        SELECT * 
        FROM SUBSCRIPTIONS 
        WHERE status = 'active' 
        and is_blocked = 'N'
    ) a
    WHERE a.rownum < ((1 * 3) + 1 )
) t 
WHERE t.r__ >= (((1-1) * t.pageSize) + 1)

错误消息非常简单,因此可以通过将*替换为订阅中的实际列名来查找无效列名,一次可以替换几个。当然,检查r\uuuuu,也许这就是开始的地方。当我在查询中将*替换为列名时,我遇到了一个新的错误:不明确的列定义突出显示了第二个select上的a*。你有什么想法吗?非常感谢。确切的错误是:ORA-00918:列定义含糊不清。我本来打算写下下面答案中提到的缺少的别名,但忘了。也许从这里开始看看它是否有用什么是PL/SQL客户机?我没有看到任何PL/SQL,只有SQL。谢谢。不幸的是,这不是错误,但我添加了忘记的别名,这样更好:-@dupusdavid answer更新了所有相关列的添加表别名。但请确保subscribtions表中也没有rownum列