Java SQL-在DAO中执行时列名无效
我正在对我的Spring应用程序执行查询,该应用程序将根据此查询选择数据库中的数据: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) +
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列