JDBC SQL 别名不起作用

2024-01-04

我正在尝试在我的 java web 应用程序中运行以下查询:

SELECT platform AS "Platform" FROM edb.cases

该网络应用程序工作正常并且能够执行所有查询,但是每当我使用别名(通过“AS”)时,生成的数据集都会为我提供别名的空值。事实上,尽管在上面的查询中使用了“platform”列的别名,但生成的数据集的“Platform”键为空值,但为我提供了“platform”键的正确值(这是原始数据集)列的名称)。

现在,我需要执行的实际 sql 语句有点复杂,其中包含 select 语句,并使用别名在同一个表上进行两次左连接,如下所示:

 SELECT numOne.platform , numTwo.platform AS 'PlatformTwo' FROM edb.cases LEFT JOIN 
 edb.platform as numOne ON (numOne.rank = cases.platform) LEFT JOIN edb.platform as numTwo ON 
 (numTwo.rank = cases.highestPlatform) WHERE cases.index = 1000

问题在于,生成的数据集包含键“platform”(对于 numOne 表)的正确值,但键“PlatformOne”和“PlatformTwo”不存在。别名不起作用!

我已经在 MySql 工作台中尝试了这两个语句,它们工作得很好。

请随时询问更多信息。

EDIT:

准备查询并将其发送到数据库的代码:

public static List<Map<String, Object>> executeQuery(final String query,
        Map<Integer, Object> data) {
    List<Map<String, Object>> result = null;
    try {
        Connection conn = createConnection();
        PreparedStatement pstmt = null;

        pstmt = conn.prepareStatement(query);
        if(data != null) {
            pstmt = createPreparedStatement(pstmt, data);
        }

        System.out.println(pstmt.toString());
        //The GET_CASE_FOR_INDEX query uses the executequery function in the else block:
        if((pstmt.toString().indexOf("INSERT") >= 0) || (pstmt.toString().indexOf("UPDATE") >= 0)) { 
            pstmt.executeUpdate();
        } else {
            ResultSet rs = pstmt.executeQuery();

            ResultSetMetaData md = rs.getMetaData();
            int columns = md.getColumnCount();
            result = new ArrayList<Map<String, Object>>();
            /*
             * Get the next row of the ResultSet 'rs' and insert a Map of the Column/Value pair
             * into the ArrayList of Maps 'result'
             */
            while(rs.next()) {
                Map<String, Object> row = new HashMap<String, Object>(columns);
                for(int i=1; i <= columns; i++) {
                    try {
                        row.put(md.getColumnName(i), rs.getObject(i));
                    } catch(Exception e) {
                        System.out.println(md.getColumnName(i));
                        System.out.println(row);
                        e.printStackTrace();
                    }
                }
                result.add(row);
            }
        }

        destroyConnection(conn);
        pstmt.close();
    } catch(SQLException e) {
        //TODO
        e.printStackTrace();
    }
    return result;
}

创建准备语句的函数:

//creates a prepared statement by checking the type of the value that needs to be set.
private static PreparedStatement createPreparedStatement(
        PreparedStatement pstmt, Map<Integer, Object> data) {
    try {
        for(Integer key : data.keySet()) {
            Object value = data.get(key);

            System.out.println(key);
            if(data.get(key).equals(Types.NULL)) {
                pstmt.setNull(key, Types.INTEGER);
            } else if(value.getClass().equals(Integer.class)) {
                pstmt.setInt(key, (Integer) value);
            } else if(value.getClass().equals(String.class)) {
                pstmt.setString(key, (String) value);
            } else if(value.getClass().equals(Date.class)) {
                pstmt.setDate(key, (Date) value); 
            } else if(value.getClass().equals(Timestamp.class)) {
                pstmt.setTimestamp(key, (Timestamp) value);
            }
        }
    }catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return pstmt;
}

使用executeQuery函数执行查询并将其发送到Web模板的代码片段:

Map<Integer, Object> data_details = new HashMap<Integer, Object>();
data_details.put(1, parameter_ID);

List<Map<String, Object>> details = DBUtility.executeQuery(DBQuery.GET_CASE_FOR_INDEX, data_details);

webContext.setVariable("details", details);//This is where the template variable is being set

System.out.println(details);

GET_CASE_FOR_INDEX 查询是:

SELECT numOne.platform , numTwo.platform AS 'PlatformTwo' FROM edb.cases LEFT JOIN 
edb.platform as numOne ON (numOne.rank = cases.platform) LEFT JOIN edb.platform as numTwo ON 
(numTwo.rank = cases.highestPlatform) WHERE cases.index = ?

当我打印详细信息哈希图(即结果数据集)时,关键 PlatformTwo 完全不存在!


您正在使用.getColumnName的方法ResultSetMetaData,它返回基础列的名称(如果可用)。.getColumnLabel将返回定义为的列别名SELECT ... AS ....

为了说明这一点,下面的 Java 代码

PreparedStatement ps = conn.prepareStatement(
    "SELECT platform AS Platypus FROM cases");
ResultSet rs = ps.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
System.out.println(String.format(
    ".getColumnName returns \"%s\"", 
    rsmd.getColumnName(1)));
System.out.println(String.format(
    ".getColumnLabel returns \"%s\"", 
    rsmd.getColumnLabel(1)));

returns

.getColumnName returns "platform"
.getColumnLabel returns "Platypus"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JDBC SQL 别名不起作用 的相关文章

  • MySQL 可以存储多少行?

    所以我是一个初学者 刚刚自学了几个月的MySQL 我在工作中总是使用 phpMyAdmin 我过去的工作只涉及大约 100k 行的表 所以没有什么大问题 然而 我的客户现在想要在表中存储大约 800 万行 MySQL phpMyAdmin
  • 多人/单人测验游戏的数据库设计

    我在这里看到了很多问题 但没有人适合我的问题 我正在尝试创建一个可扩展的 ER 模型 如果我想添加更多数据 则不会破坏几乎任何东西 所以我尝试创建的是 有两种类型的用户 比如说管理员和工作人员 他们有不同的角色 管理员可以对问题进行 CRU
  • MySQL 将日期时间转换为unix时间?

    我有一个 DATETIME 格式的列 我想将其转换为数据库中的 UNIXTIME 那会是什么样的查询 我知道如何从 UNIXTIME 转换为 DATETIME 但我从未做过相反的操作 我用过FROM UNIXTIME 没有TO UNIXTI
  • 动态表单字段验证的数据库设计

    在我的应用程序中 我允许用户创建一个包含他们想要的任何 HTML 表单字段 例如文本输入 文本区域 选择等 的表单 我想让用户能够为每个字段定义 0 个或多个累积验证规则 最多可能有 25 个不同的验证规则 我应该如何建模 这是一个潜在的解
  • UTF-8、PHP 和 XML Mysql

    我在解决这个问题时遇到了很大的问题 我有一个编码 latin1 swedish ci 的 mysql 数据库和一个存储名称和地址的表 我正在尝试输出 UTF 8 XML 文件 但在使用以下字符串时遇到问题 Otiv gen它被输出为Otiv
  • PersistenceUnit 与 PersistenceContext

    在我已经成功使用的几个项目中 PersistenceUnit unitName MiddlewareJPA EntityManagerFactory emf EntityManager entityManager emf createEnt
  • 在关系数据库中存储 1:1 用户关系的最佳方式

    存储用户关系的最佳方式是什么 例如友谊 在关系中必须是双向的 你是我的朋友 因此我是你的朋友 数据库 例如MYSql 我可以想到两种方法 每当一个用户与另一个用户成为好友时 我都会向数据库添加两行 其中 A 行由发起用户的用户 ID 和下一
  • Node.js 将 async/await 与 mysql 一起使用

    我一直在尝试在节点中将 async await 与 MySQL 一起使用 但它每次都会返回一个未定义的值 有理由吗 请在下面找到我的代码 const mysql require promise mysql var connection co
  • 如何在同一列中选择多个值?

    我正在尝试在单个列中选择多个值 基本上我希望查询选择列下的所有内容family有价值观Software 1Y XI 1Y and P1 1Y 我正在运行这个查询 SELECT salesorder masterproduct family
  • Mysql使用触发器建表

    我尝试在 Mysql 触发器内创建表 但没有创建 如何使用触发器创建表 这里传递的表的名称是动态的 据我所知 在触发器内创建表是不可能的 看这里 http forums mysql com read php 99 121849 122609
  • Java 日期和 MySQL 时间戳时区

    我正在编辑一段代码 其基本功能是 timestamp new Date 然后坚持下去timestamp中的变量TIMESTAMPMySQL 表列 然而 通过调试我看到Date显示在正确时区的对象 GMT 1 当持久化在数据库上时 它是GMT
  • mysql 准备好的语句错误:MySQLSyntaxErrorException

    我使用准备好的语句编写了选择语句 每次尝试运行都会出现此错误 我如何克服这个错误 我的jdbc连接器是mysql connector java 5 1 13 bin jar 我的代码 public Main add ad to getAdD
  • 如何在 laravel 中查询 json 列?

    我用的是 Laravel 5 6 我有一块田地 字段的数据类型为json 字段 desc 字段 的值如下所示 code 1 club CHE country ENGLAND code 2 club BAY country GERMANY c
  • 需要在 select 语句中连接子查询的结果

    我有三张桌子 Table1 Users Columns User ID int FirstName LastName Values 1 Jane Doe 2 John Doe 3 Mike Smith Table2 User Groups
  • MySQL 更新具有多个值的查询

    我在数据库中有一个表 其记录如下 match id guess result 125 1 0 130 5 0 233 11 0 125 2 0 我的用户为每场比赛选择一个猜测 我有一个函数可以根据比赛的结果计算猜测的结果 如果猜测正确 结果
  • 如何在我的查询中使用日期格式?

    这适用于 phpmyadmin 但是当我在代码上使用时给我一个错误 错误说 解析错误 语法错误 意外的 我的语法有什么问题 gt
  • 什么可能导致输出参数访问时出现 SQL Server JDBC 错误“未为参数号 0 设置值”?

    我有一些访问 SQL Server 2005 的 Java 代码 如下所示 CallableStatement cstmt Set input parameters cstmt registerOutParameter 11 Types I
  • 复制具有不同列名的 MySQL 表

    我需要将 table1 中与特定列匹配的所有行复制到具有不同列名称的 table2 中 例如 table1 name oldAddressBook table1 的列 name Name Surname Number table2 name
  • Join 表(关联表)有主键吗?多对多关系

    Join 表 关联表 有主键吗 多对多的关系 我见过一些带有主键的连接表 一些没有 有人可以解释一下连接表中何时会有主键吗 为什么 先感谢您 在纯 联接 或联结表中 所有字段都将成为主键的一部分 例如 让我们考虑下表 CREATE TABL
  • 选择具有按两列分组的最大值的行

    我见过很多关于此类问题的解决方案 尤其是这个SQL 仅选择列上具有最大值的行 https stackoverflow com questions 7745609 sql select only rows with max value on

随机推荐

  • 在 Android SDK 文件夹中找不到 SDK Manager.exe

    我需要安装一些软件包Android SDK Manager 但在我的SDK文件夹里没有 exe文件 只有AVD Manager和文件夹 我怎样才能找到它 我的SDK正常工作Android Studio 没有问题 奇怪的是SDK管理器 exe
  • 在另一个类中定义一个类并调用父方法

    我有 c 类定义和该类的一些内部类定义 class DoXJob def init self param1 param2
  • 更改 Holoviews 直方图上的 x 轴 (xlim)

    在 matplotlib 中 我们可以使用 xlim 方法更改 x 轴的限制 HoloViews中有等效的方法吗 我搜索了高压选项页面 http ioam github io holoviews Tutorials Options 但没有找
  • 如何在Python中对维基百科类别进行分组?

    对于我的数据集的每个概念 我都存储了相应的维基百科类别 例如 考虑以下 5 个概念及其相应的维基百科类别 高甘油三酯血症 Category Lipid metabolism disorders Category Medical condit
  • 使用自定义 WCF 正文反序列化而不更改 URI 模板反序列化

    From 这篇博文 http blogs msdn com b carlosfigueira archive 2011 05 03 wcf extensibility message formatters aspx 我能够创建自定义 WCF
  • Healpy map2alm 和 alm2map 不一致?

    我刚刚开始使用Healpy 并注意到如果我使用地图来获取alm 然后使用这些alm来生成新地图 我不会得到我开始时使用的地图 这是我正在看的内容 import numpy as np import healpy as hp nside 2
  • 使用 AJAX 将值从普通 JavaScript 转换为 PHP

    我想知道如何使用 ajax 和 vanilla javascript 向 php 发送内容 我问你是因为我刚刚找到了 jQuery 解决方案 我知道如果我想收到一些东西 它应该是这样的 var xhttp new XMLHttpReques
  • 通过 CodeIgniter 连接到 SQL Server

    我正在尝试设置 Windows 开发环境 Windows 8 1 with IIS 8 5 running SQL Server 2008RC2 and PHP 5 3 24 代码点火器 2 1 4 我可以通过普通 PHP 脚本中的 PDO
  • Android SetNestedScrollingEnabled 未调用?

    我有一个嵌套的子滚动视图 它设置为禁用滚动 直到父滚动视图完成向上滚动 设置childScrollView setNestedScrollingEnabled false 最初工作 然后重新启用childScrollView setNest
  • HTML5 是否支持点对点(而不仅仅是 WebSocket)

    我使用的语言是 HTML5 兼容浏览器上的 Javascript 我的理解是 WebSockets 需要一个套接字服务器在客户端之间来回传输推送通知和消息 HTML5 是否有不需要套接字服务器的实际点对点功能 有谁见过 Javascript
  • sonarqube 中的 C# 项目

    当我运行 sonar runner 来分析我的简单 C 项目时 分析因 SonarLint Runner exe 权限被拒绝错误而终止 ERROR Error during SonarQube Scanner execution ERROR
  • 开玩笑设置“语法错误:意外的令牌导出”

    我正在对当前没有测试的现有项目实施测试 我的测试无法编译node modules 进口 Users me myproject node modules lodash es lodash js 10 export default as add
  • Azure 搜索服务中的点击突出显示

    我是 Azure 搜索服务的新手 我想使用 Azure 搜索服务的命中突出显示功能 我正在使用 NET SDK NuGet 包进行 azure 搜索 我使用 SearchParameter 对象来提及命中突出显示字段以及我需要的前标签和后
  • 在 Firebase Cloud Functions 项目中生成 Swagger 文档

    是否可以从 firebase 云函数中的函数注释生成 Swagger Spec 文件 如果是的话 我们该怎么做呢 我看到云函数代码更像是无服务器 所以想知道这是否可能 我还没有找到自动的方法 但是有很多库可供选择 我在 Firebase F
  • Swinject - 对成员的模糊引用

    我在用Swinject https github com Swinject Swinject in my Swift 3应用程序 当我尝试时 let container Container container register Networ
  • 什么时候适合使用UDP而不是TCP? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 由于 TCP 保证数据包传送 因此可以被认为是 可靠的 而 UDP 不保证任何东西 并且数据包可能会丢失 在应用程序中使用 UDP 传输数
  • Swift Firebase 检查用户是否存在

    What am i doing wrong I have a database structure like the one shown in this image In appleDelegate swift i just want to
  • Apache Tiles 和 Spring MVC 中的全局异常页面

    当抛出未处理的异常时 例如RuntimeException 然后我想显示一个常见的错误页面 我想实现一些目标 重用 HTML 模板 使用带有标头等的通用 框架 并将异常信息放入正文中 在正文文档中提供有关异常的一些基本信息 我正在使用 Ap
  • 使用 LINQ 证明一组要求可以通过一组值来满足

    这是发布的问题的子集here https stackoverflow com questions 16703082 crafting a linq based solution to determine if a set of predic
  • JDBC SQL 别名不起作用

    我正在尝试在我的 java web 应用程序中运行以下查询 SELECT platform AS Platform FROM edb cases 该网络应用程序工作正常并且能够执行所有查询 但是每当我使用别名 通过 AS 时 生成的数据集都