【问题标题】:Renaming a column name in an SQL SELECT statement, using AS, fails when used inside of a sql:query tag; why? JSTL 1.2使用 AS 重命名 SQL SELECT 语句中的列名在 sql:query 标记内使用时失败;为什么? JSTL 1.2
【发布时间】:2011-12-24 18:11:44
【问题描述】:

我整个早上都在用头撞墙,试图弄清楚这一点。

我正在升级一个非常旧的应用程序,但在 JSP 页面中的查询遇到问题。 (我知道,我知道...)

我在 标签中有这个查询:

SELECT t1.item AS i1, t2.item AS i2 FROM table t1, table t2

在 JSP 页面中,我遍历结果集并显示信息。但是,i1i2 在结果集中不存在,但 itemitem 确实存在。使用AS 语法重命名列似乎失败了。有谁知道为什么?

我正在使用 JSTL 1.2。我的库中有apiimpl 罐子。我正在使用 JSP 2.1、Servlet 2.5 servlet 容器(确切地说是 Tomcat 6)。我正在为这个版本的 JSTL 使用(据我所知)正确的命名空间(<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>, <%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>)。

上述查询在 JSP 2.0、Servlet 2.4 servlet 容器 (Tomcat 5) 中使用时可以正常工作。我不确定它使用的 JSTL 版本。

当我在 MySQL Workbench 中运行查询时,它也运行良好。

【问题讨论】:

  • 这是整个查询吗?您真的打算进行交叉连接吗?
  • 我从来没有广泛使用过JSTL SQL taglib,所以我无法从经验中判断。我只能建议尝试降级到JSTL 1.1,因为它似乎在您以前的 Servlet 2.4 容器上运行良好。 JSTL 1.1 应该在 Servlet 2.5 上运行良好。
  • @Icarus,这只是一个例子。甚至“SELECT item AS i FROM table”也失败了。
  • @BalusC 我会试试的。谢谢大佬。
  • 我从 Tomcat 5 中获取了 jstl 和标准 jar,并在 Tomcat 6 中使用它们。仍然不行! :(

标签: sql jsp tomcat servlets jstl


【解决方案1】:

根据@r0ast3d 的建议:

“[2007 年 12 月 29 日 0:16] 马克·马修斯

出于许多理智的原因,JDBC 专家组将“列名”的含义澄清为 表示原始列名,而不是别名(可以通过 getColumnLabel() ResultSetMetaData 方法),因此我们的 JDBC 驱动程序在映射时使用此定义 从“名称”到 ResultSet.get*(String) 中的列序号。

您可以通过设置配置属性恢复到旧的行为 使用我们的 JDBC 驱动程序将“useOldAliasMetadataBehavior”设置为“true”,但应用程序(和 框架)确实应该更改以支持该行为。”

罪魁祸首是 JDBC 驱动程序。

【讨论】:

    猜你喜欢
    • 2013-01-04
    • 2022-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 1970-01-01
    相关资源
    最近更新 更多