java - SQL - 在 DAO 中执行时列名无效
问题描述
我正在对我的 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.BadSqlGrammarException: PreparedStatementCallback; 错误的 SQL 语法 [SELECT * FROM( SELECT a.*, rownum r__ FROM ( SELECT * FROM SUBSCRIPTIONS WHERE status = 'active' and is_blocked = 'N' ) a WHERE rownum < ((? * ?) + 1 ))WHERE r__ >= (((?-1) * ?) + 1)]; 嵌套异常是 java.sql.SQLException: Invalid column name
我不明白为什么会返回此错误,因为我的查询在 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);
selectActiveAndUnblockedSubscriptionPaged 变量是:
"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)";
有谁知道为什么这段代码不起作用?谢谢
解决方案
只是一个建议,您在 thr main from () 之后错过了表别名
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)
推荐阅读
- xslt - XSLT 2.0 - xsl:number 数字顺序不一致
- firebase - 使用 Kotlin 从 Firebase 数据库和填充对象类中检索包含子项的数据
- php - 为什么数组中新手动分配的值不能不继承其兄弟的值?
- sql - Hibernate createNativeQuery 返回重复的行
- eclipse - 有没有人成功地让 Eclipse 的“报告错误或增强...”工作?
- java - 调试 MapReduce 代码以查找 NULLPointerException 错误的原因
- html - 每当我将段落放在页面下方时,我都无法让我的图像和“关于我”跨度停留在页面的右侧
- recursion - 动态规划:孩子跑上楼梯
- haskell - 延续的结果必须是最终结果吗?
- node.js - 在 findOneAndUpdate 上生成散列密码