我整个早上都在用头撞墙试图弄清楚这个问题。
我正在升级一个非常旧的应用程序,我在处理 JSP 页面中的查询时遇到了问题。 (我知道,我知道……)
我在
SELECT t1.item AS i1, t2.item AS i2 FROM table t1, table t2
在 JSP 页面中,我遍历结果集并显示信息。然而,i1
和 i2
结果集中不存在,但 item
和 item
确实存在。看来列的重命名,使用 AS
语法,失败。有谁知道为什么吗?
我正在使用 JSTL 1.2。我同时拥有 api
和 impl
我图书馆里的 jar 。我正在使用 JSP 2.1、Servlet 2.5 servlet 容器(确切地说是 Tomcat 6)。我正在为这个版本的 JSTL 使用(据我所知)正确的 namespace ( <%@ 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 中运行查询时,它也运行良好。
最佳答案
根据@r0ast3d 的建议:
[2007 年 12 月 29 日 0:16] 马克·马修斯
出于许多理智的原因,JDBC 专家组澄清了“列名”的含义 表示原始列名,而不是别名(可以通过 getColumnLabel() 检索 ResultSetMetaData 的方法),因此我们的 JDBC 驱动程序在映射时使用此定义 从“名称”到 ResultSet.get*(String) 中的列序号。
您可以通过设置配置属性恢复到旧行为 “useOldAliasMetadataBehavior”对于我们的 JDBC 驱动程序为“true”,但是应用程序(和 框架)真的应该改变以支持这种行为。”
罪魁祸首是 JDBC 驱动程序。
关于sql - 在 SQL :query tag; why? JSTL 1.2 内部使用时,使用 AS 重命名 SQL SELECT 语句中的列名称失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8056058/