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 别名不起作用 的相关文章

  • Flask-login:无法理解它是如何工作的

    我试图理解如何Flask Login https flask login readthedocs org en latest works 我在他们的文档中看到他们使用预先填充的用户列表 我想使用数据库存储的用户列表 但是 我不明白其中的一些
  • 如何将ElasticSearch与MySQL集成?

    在我的一个项目中 我计划将 ElasticSearch 与 MySQL 结合使用 我已经成功安装ElasticSearch 我可以单独管理ES中的索引 但我不知道如何用 MySQL 实现同样的功能 我读过一些文件 但我有点困惑 没有明确的想
  • PDO PHP 连接,致命错误

    我的连接类 firstcode php class DB functions public db function construct try db new PDO mysql localhost dbname xxx charset ut
  • 如何使用 Perl 更改 mysql 密码

    我需要使用 Perl 脚本更改一些 mysql 密码 以下内容在更改数据库条目时有效 但是当我针对 mysql 用户更改修改它时 它将它们重置为空白密码 最后 刷新权限 也很好 但我还没有找到方法 usr bin perl use DBI
  • 如何在 Play java 中创建数据库线程池并使用该池进行数据库查询

    我目前正在使用 play java 并使用默认线程池进行数据库查询 但了解使用数据库线程池进行数据库查询可以使我的系统更加高效 目前我的代码是 import play libs Akka import scala concurrent Ex
  • 如何使用 SparkR 1.6.0 写入 JDBC 源?

    使用 SparkR 1 6 0 我可以使用以下代码从 JDBC 源读取数据 jdbc url lt jdbc mysql localhost 3306 dashboard user
  • INSERT..RETURNING 在 JOOQ 中不起作用

    我有一个 MariaDB 数据库 我正在尝试在表中插入一行users 它有一个生成的id我想在插入后得到它 我见过this http www jooq org doc 3 8 manual sql building sql statemen
  • 映射 mysql 中同一个表的多个值

    您好 我必须使用另一个表中的值 id 获取文本值 表 1 包含值 ID 表 2 包含名称和值 ID 表 1 SEVERITY OCCURENCE DETECTABILITY 2 3 4 表 2 id name value 1 Very Hi
  • 在mysql中的单个查询中更新多个表

    我有三个查询 我想要一个 这是我的查询 UPDATE tab1 SET a WHERE id 3 UPDATE tab2 SET b WHERE id 9 UPDATE tab3 SET c WHERE id 5 您可以尝试下面的代码 UP
  • Galera 集群问题

    我想在我们的生产环境中使用Galera集群 但我有一些顾虑 每个表必须至少定义一个显式主键 每个表必须运行在InnoDB或XtraDB存储引擎下 分批处理您的大额交易 例如 不要让一个事务插入 100 000 行 而是将其分成更小的块 例如
  • 在 C# 中,当有人插入、删除或修改记录时,如何从 MySQL 获取事件?

    我正在 WPF Net 中开发一个程序 我需要知道何时有人对数据库的任何表进行更改 这个想法是在数据库发生更改时从数据库接收一个事件 我读了很多文章 但找不到解决我的问题的方法 亲切的问候 最好的解决方案是使用消息队列 在您的应用程序向数据
  • 使用 Java 处理 HTML(多部分表单数据)文件上传

    我正在为概念验证 Web 应用程序开发多文件上传解决方案 我正在使用 java servlet 来处理 AJAX 文件上传 我的问题是java如何处理从HTML表单上传文件 如果有人可以解释如何处理基本的 HTML 文件上传 那么我可能可以
  • JDBC中的DriverManager概念是基于provider设计模式的吗

    在 JDBC 中我们使用 Class forName com microsoft sqlserver jdbc SQLServerDriver newInstance 方法将对象加载到内存中 然后 当我们使用 DriverManager 类
  • 如果没有找到值,如何让 MySQL 中的 SUM 函数返回“0”?

    假设我在 MySQL 中有一个简单的函数 SELECT SUM Column 1 FROM Table WHERE Column 2 Test 如果没有条目Column 2 包含文本 Test 然后该函数返回NULL 而我希望它返回 0 我
  • 如何优化这个MySQL慢(非常慢)查询?

    我有一个 2 GB 的 mysql 表 包含 500k 行 我在没有负载的系统上运行以下查询 select from mytable where name in n1 n2 n3 n4 bunch more order by salary
  • covertJSONtoSQL 在 NiFi 中返回空值

    我正在设计一项工作 使用以下命令将数据从 MySQL 中的数据库转移到另一个数据库 MySQL 执行SQL处理器随后将Avro转换为Json then 将Json转换为SQL then PutSQL如下流程图所示 将JSON转换为SQL返回
  • Google Cloud SQL 在重新启动时卡住

    我的云 sql 实例长时间处于重新启动状态 在操作窗格中 重新启动的状态显示为待处理 并且还发生了导出 其状态仍为Running 有没有办法可以强制重新启动或取消重新启动或从常规备份中恢复数据 不 没有办法 如果您向 Google 支付高级
  • 只获取倒数第二条记录 - mysql-query

    我有一个如下表记录 my table id rating description 1 0 0 bed 2 1 0 good 3 0 0 bed 4 1 0 good 5 0 0 bed 6 0 0 bed 7 0 0 bed 现在我通过评级
  • MySQL 错误 1172 - 结果包含多行

    在存储过程中运行查询时 我从 MySQL 收到此错误 错误代码 1172 结果包含多行 我理解错误 我正在做一个SELECT INTO var list 因此查询需要返回单行 当我使用LIMIT 1 or SELECT DISTINCT 错
  • 慢速自动增量重置

    我有很多表 由于某些原因 我需要在应用程序启动时调整这些表的自动增量值 我尝试这样做 mysql gt select max id from item max id 97972232 1 row in set 0 05 sec mysql

随机推荐

  • 在 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 时 生成的数据集都