DB2多行转一行【XML2CLOB方式】

场景:
table1和table2是一对多关系,想要在同一条SQL中把table1和table2的数据全部查出来

方案:
通过DB2的XML2CLOB将多的表合并成一个column,然后在结果中通过Java代码解析成集合

SELECT T1.ID, T2.NAME, (SELECT XML2CLOB(XMLAGG(XMLELEMENT(NAME \"X\",T2.CARD_ID))) FROM TABLE2 AS T2 WHERE T2.ID = T1.ID) AS CARDS FROM TABLE1 AS T1

解析的时候

public static List<String> parseXmlObject(Object obj) {
		List<String> values = new ArrayList<String>();
		if (obj != null) {
			StringBuilder sb = new StringBuilder();
			sb.append("<root>").append(obj.toString()).append("</root>");
			String xml = sb.toString();
			try {
				DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
				factory.setNamespaceAware(false);
				Document doc = factory.newDocumentBuilder().parse(new ByteArrayInputStream(xml.getBytes("UTF-8")));
				XPathExpression expr = XPathFactory.newInstance().newXPath().compile("//root/X");
				NodeList result = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);
				for (int i = 0; i < result.getLength(); i++) {
					values.add(result.item(i).getTextContent().trim());
				}
			} catch (Exception e) {
				LOGGER.error("The exception occur:", e);
			}
		}
		return values;
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无法无天过路客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值