sql - 在 SQL :query tag; why? JSTL 1.2 内部使用时,使用 AS 重命名 SQL SELECT 语句中的列名称失败

标签 sql jsp tomcat servlets jstl

我整个早上都在用头撞墙试图弄清楚这个问题。

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

我在 标签中有这个查询:

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

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

我正在使用 JSTL 1.2。我同时拥有 apiimpl我图书馆里的 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/

相关文章:

java - 如何解决我的 Jsp 程序中的错误?

java - 为服务类创建对象不起作用

tomcat - 什么意义上的Tomcat JULI?

java - 如何拒绝访问 Tomcat 中的页面

带有 LIMIT 的 MySQL MIN() 和 MAX()

mysql - 是否需要主键?

mysql - 将 Count 与 Group Concat 结合使用

php - 在 php 中创建一个 .sql 文件

javascript - 如何减少jsp中隐藏字段的空白

java - 运行 servlet 时出错(apache tomcat 找不到 .properties 文件)