如何使用Java 8 FlatMap JDBC ResultSet?

您还不喜欢机能吗? 这样标题可能不会引起您的共鸣-但文章会! 相信我。

本质上,我们想要这样:

+------+------+------+
| col1 | col2 | col3 |
+------+------+------+
| A    | B    | C    | row 1
| D    | E    | F    | row 2
| G    | H    | I    | row 3
+------+------+------+

被“平面映射”到:

+------+
| cols |
+------+
| A    |\ 
| B    | | row 1
| C    |/
| D    |\
| E    | | row 2
| F    |/
| G    |\
| H    | | row 3
| I    |/
+------+

如何使用Java 8?

使用jOOQ时很容易 。 让我们首先创建数据库:

CREATE TABLE t (col1 VARCHAR2(1),col2 VARCHAR2(1),col3 VARCHAR2(1)
);INSERT INTO t VALUES ('A', 'B', 'C');
INSERT INTO t VALUES ('D', 'E', 'F');
INSERT INTO t VALUES ('G', 'H', 'I');

现在让我们添加一些jOOQ和Java 8!

List<String> list =
DSL.using(connection).fetch("SELECT col1, col2, col3 FROM t").stream().flatMap(r -> Arrays.stream(r.into(String[].class))).collect(Collectors.toList());System.out.println(list);

…就是这样! 输出为:

[A, B, C, D, E, F, G, H, I]

( 我也为这个堆栈溢出问题提供了此解决方案 )

您如何阅读以上内容? 就像这样:

List<String> list =// Get a Result<Record>, which is essentially a List
// from the database query
DSL.using(connection).fetch("SELECT col1, col2, col3 FROM t")// Stream its records.stream()// And generate a new stream of each record's String[]
// representation, "flat mapping" that again into a
// single stream.flatMap(r -> Arrays.stream(r.into(String[].class))).collect(Collectors.toList());

请注意,如果您不使用jOOQ来呈现和执行查询,则仍然可以使用jOOQ将JDBC ResultSet转换为jOOQ Result来产生相同的输出:

try (ResultSet rs = ...) {List<String> list =DSL.using(connection).fetch(rs) // unwind the ResultSet here.stream().flatMap(r -> Arrays.stream(r.into(String[].class))).collect(Collectors.toList());System.out.println(list);
}

奖励:SQL方式

产生相同结果的SQL方法很简单:

SELECT col1 FROM t UNION ALL
SELECT col2 FROM t UNION ALL
SELECT col3 FROM t
ORDER BY 1

或者,当然,如果您使用的是Oracle或SQL Server,则可以使用神奇的UNPIVOT子句( 与PIVOT子句相反 ):

SELECT c
FROM t
UNPIVOT (c FOR col in (col1, col2, col3)
)

翻译自: https://www.javacodegeeks.com/2015/04/how-to-flatmap-a-jdbc-resultset-with-java-8.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/359935.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 获取mysql链接_Java中如何获取mysql连接的3种方法总结

前言本文主要来说说三种 Java 中获取 mysql 连接的方式&#xff0c;分享出来供大家参考学习&#xff0c;下面话不多说了&#xff0c;来一起看看详细的介绍&#xff1a;第一种&#xff1a;传统的连接方式&#xff1b;第二种&#xff1a;读取配置文件方式&#xff1b;第三种&…

Netty writeAndFlush() 流程与异步

Netty writeAndFlush()方法分为两步, 先 write 再 flush Overridepublic ChannelFuture writeAndFlush(Object msg, ChannelPromise promise) {DefaultChannelHandlerContext next;next findContextOutbound(MASK_WRITE);ReferenceCountUtil.touch(msg, next);next.invoker.in…

JavaScript学习总结(六)——JavaScript判断数据类型总结

最近做项目中遇到了一些关于javascript数据类型的判断处理&#xff0c;上网找了一下资料&#xff0c;并且亲自验证了各种数据类型的判断&#xff0c;在此做一个总结吧&#xff01; 一、JS中的数据类型 1.数值型&#xff08;Number&#xff09;&#xff1a;包括整数、浮点数。 2…

material 项目_Web开发必备的 10 个开源项目,不用自己亲自造轮子!

来自&#xff1a;Java and Python君Web 开发中几乎的平台都需要一个后台管理&#xff0c;但是从零开发一套后台控制面板并不容易&#xff0c;幸运的是有很多开源免费的后台控制面板可以给开发者使用&#xff0c;那么有哪些优秀的开源免费的控制面板呢&#xff1f;我在 Github 上…

香辣弹簧:自动接线的不同方法

我想展示使用Spring的Autowired批注的不同方式&#xff1a; Constructor &#xff0c; Method和Field自动装配。 我展示的示例都是byType自动装配模式的一种形式&#xff08; constructor自动装配模式类似于byType &#xff09;。 请参阅Spring Reference指南 &#xff0c;以获…

SVN部署(本地)

1.安装TortoiseSVN 2.建立Repository。在F:/下建立文件夹SVN_NATIVE_REPOSITORY&#xff0c; —— 》 3.在其他任意路径建立任意名称的路径&#xff0c;这里为D:\MSVC Project\SVN_WORK&#xff0c;确保该文件夹为空 右键单击&#xff0c;点击SVN Checkout&#xff0c; 第一行 …

InetAddressImpl#lookupAllHostAddr慢/挂起

自从我升级到优胜美地以来&#xff0c;我已经注意到尝试解析我的家庭网络上的本地主机已经花费了很多时间&#xff08;有时超过一分钟&#xff09;&#xff0c;所以我想我会尝试找出原因。 这是我的初始/ etc / hosts文件的外观&#xff0c;它基于我的机器的主机名是teetotal的…

mysql sqlserver schema_MySQL数据库数据迁移到SQLserver

最近因工作需要&#xff0c;需要将mysql数据库迁移到sqlserver&#xff0c;仅仅是数据迁移&#xff0c;因此相对比较简单。对于mysql迁移到sqlserver&#xff0c;我们需要使用到mysql odbc驱动&#xff0c;然后透过sqlserver链接服务器的方式来访问mysql。具体见下文描述。一、…

mysql客户端安装错误_windows下mysql 5.7以上版本安装及遇到的问题

(原)早些前用window安装mysql挺简单的&#xff0c;一个安装程序&#xff0c;一路下一步。2006的5.0版本&#xff0c;确实太早了点。于是官网上又下了一个版本&#xff0c;windows也是提供了二个版本Installer(安装)版和Archive(文档)版。Installer版本的后缀是.msi&#xff0c;…

SP2010开发和VS2010专家食谱--第二章节--工作流

本章内容&#xff1a; 1. 创建顺序工作流。 2. 创建带有初始表单的网站工作流。 3. 从工作流创建任务。 4. 创建自定义任务表单。 Introduction 根据国际工作流联盟&#xff08;http://www.WFMC.org&#xff09;标准组织&#xff0c;完全致力于流程&#xff0c;这样定义工作流&…

sklearn中eof报错_sklearn中的数据预处理和特征工程

小伙伴们大家好~o(&#xffe3;▽&#xffe3;)ブ&#xff0c;今天我们看一下Sklearn中的数据预处理和特征工程&#xff0c;老规矩还是先强调一下&#xff0c;我的开发环境是Jupyter lab&#xff0c;所用的库和版本大家参考&#xff1a;Python 3.7.1&#xff08;你的版本至少要…

sql显示前10行数据_SPL 简化 SQL 案例详解:计算各组前 N 行

取出各组的前N行数据是较常见的运算&#xff0c;比如&#xff1a;每个月每种产品销量最高的五天是哪五天&#xff0c;每位员工涨薪最多的一次是哪次&#xff0c;高尔夫会员成绩最差的三次是哪三次&#xff0c;等等。在SQL中&#xff0c;这类运算要用窗口函数以及keep/top/rownu…

jquery 与其他库冲突解决方案

var j jQuery.noConflict();j("div p").hide(); // 基于 jQuery 的代码$("content").style.display "none"; // 基于其他库的 $() 代码转载于:https://www.cnblogs.com/timelesszhuang/p/3677845.html

11. mysql锁机制_深入探讨MySQL锁机制

MySQL锁机制究竟是怎样的呢&#xff1f;这是很多人都提到过的问题&#xff0c;下面就为您详细介绍MySQL锁机制方面的知识&#xff0c;希望可以让您MySQL锁机制有更多的了解。当前MySQL已经支持 ISAM, MyISAM, MEMORY (HEAP) 类型表的表级锁了&#xff0c;BDB 表支持页级锁&…

4月21日会议总结(整理—祁子梁)

会议成果&#xff1a; 1.今天我们确定了软件版本的时间alphe版在12周做出来&#xff0c;在我们内部测试基本通过。 bate版在13周发布和其他组作交换测试&#xff0c;在14周release版发布并给其他人使用体验准备15周的演讲。 2.同时确定了部分功能实现顺序&#xff0c;”谁是卧底…

通达信金融终端_尘缘整合_V7.12

http://pan.baidu.com/s/1gvtPO http://pan.baidu.com/s/1xqrk6 通达信金融终端_尘缘整合_V7.12转载于:https://www.cnblogs.com/mier001/p/3679701.html

5天玩转mysql视频教程_六天带你玩转MySQL

教程列表&#xff1a;01数据库课程介绍02数据库(基础知识)03数据库(关系型数据库)04数据库(关系型数据库关键字说明)05数据库(SQL)06数据库(mysql数据库)07数据库(mysql服务器数据对象)08SQL基本操作(新增数据库)09SQL基本操作(查看数据库)10SQL基本操作(更新数据库)12SQL基本操…

winxp精简版没有IIS的解决办法

首先在“开始”菜单的“运行”中输入“c:\Windows\inf\sysoc.inf”&#xff0c;系统会自动使用记事本打开sysoc.inf这个文件。在sysoc.inf中找到“[Components]”这一段&#xff0c;因为是XP简化版&#xff0c;所以里面东西很少&#xff0c;在里面加上这段&#xff1a;“iisiis…

ant vue 兼容性问题_ant design for vue 关于table的一些问题

1、为table添加分页&#xff1a; :pagination"pagination"pagination: {defaultPageSize: 10,showTotal: (total) > 共${total} 条数据,total: 0,showSizeChanger: true,pageSizeOptions: [10, 20, 50],onShowSizeChange: (current, pageSize) > {this.pageSiz…

Coder-Strike 2014 - Finals (online edition, Div. 2) A. Pasha and Hamsters

水题 #include <iostream> #include <vector> #include <algorithm>using namespace std;int main(){int n,a,b;cin >> n >>a >> b;vector<int> apple(n1,0);int k;for(int i 0 ; i < a; i) {cin>>k;apple[k] 1;}for(…