【发布时间】:2019-09-13 16:27:14
【问题描述】:
我在 Java 中使用 JAXB Unmarshaler 将数据从 XML 检索到 Java 对象中,效果很好。
下面是我的代码:
import java.io.File;
import java.io.FileNotFoundException;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import javax.xml.transform.stream.StreamSource;
public class FRDDbImportWorkflow {
public static void main(String...args) throws FileNotFoundException {
File xmlFile = new File("//home/tr.xml");
try {
JAXBContext jaxbContext = JAXBContext.newInstance(FRD115Type.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
JAXBElement<FRD115Type> jaxbElement = (JAXBElement<Fd115Type>) jaxbUnmarshaller
.unmarshal(new StreamSource(xmlFile), Fd115Type.class);
FRD115Type obj = jaxbElement.getValue();
System.out.println(obj.getRptHdr().getEnvText());
} catch (JAXBException e) {
e.printStackTrace();
}
}
}
现在我想创建另一个 java 类,它将这些数据插入到 Oracle 表中。由于我在 xml 文件中有许多 xml 元素,那么我是否需要为所有这些元素创建 get method 以从 xml 中检索数据然后插入到 Oracle 中?
除了为所有这些 xml 元素创建 get method 之外,还有其他解析器技术吗?
我也不确定如何将此 xml 数据插入 Oracle。我在 Oracle 中创建了下表:
CREATE TABLE
IMPORT_XML
(
fd115 VARCHAR2(180),
RPTHDR VARCHAR2(180),
EXCHNAM VARCHAR2(50),
ENVTEXT VARCHAR2(20),
RPTCOD VARCHAR2(20),
RPTNAM VARCHAR2(180),
RPTFLEXKEY VARCHAR2(180),
MEMBID VARCHAR2(50),
MEMBLGLNAM VARCHAR2(80),
RPTPRNTEFFDAT DATE,
RPTPRNTEFFTIM VARCHAR2(50),
RPTPRNTRUNDAT DATE,
fd115GRP VARCHAR2(180),
fd115KEYGRP VARCHAR2(180),
PARTICIPANTGRP VARCHAR2(180),
PARTICIPANT VARCHAR2(50),
PARTLNGNAME VARCHAR2(50),
fd115GRP1 VARCHAR2(180),
fd115KEYGRP1 VARCHAR2(180),
BUSINESSUNITGRP VARCHAR2(180),
BUSINESSUNIT VARCHAR2(180),
BUSUNTLNGNAME VARCHAR2(50),
BUSINESSUNITID NUMBER(30,9),
fd115GRP2 VARCHAR2(180),
fd115KEYGRP2 VARCHAR2(180),
USER_NAME VARCHAR2(50),
USERNUMERICID NUMBER(30,9),
fd115REC1 VARCHAR2(180),
USRGROUP VARCHAR2(50),
USER_LEVEL VARCHAR2(10),
LOGNAM VARCHAR2(50),
ISUSFLG NUMBER(30,9),
EFFSTATUS NUMBER(30,9),
DELPROTECTED VARCHAR2(10),
ENABLEPROPRIETARYACCT VARCHAR2(10),
ENABLEAGENCYACCT VARCHAR2(10),
ENABLEMARKETMAKINGACCT VARCHAR2(10),
ENABLEBESTACCT VARCHAR2(10),
ENABLERISKLESSPRINCIPALACCT VARCHAR2(10),
MAXORDERVALUE VARCHAR2(100),
MAXORDRQTY VARCHAR2(100),
SETTLACCT NUMBER(30,9),
SETTLLOCAT VARCHAR2(50),
fd115GRP3 VARCHAR2(180),
fd115KEYGRP3 VARCHAR2(180),
MKTGRPNAM VARCHAR2(50),
fd115REC2 VARCHAR2(180),
ENTROLE VARCHAR2(50),
fd115GRP4 VARCHAR2(180),
TESTYPE NUMBER(30,9),
TESELIGIBILITY NUMBER(30,9)
);
【问题讨论】:
-
您的 XML 似乎无效,因为它缺少
</fd115Grp>和</fd115Grp1>结束标记。 -
抱歉,我没有将完整的 xml 放置为它有点大..你想要完整的 xml 文件吗?
-
不,最好是 minimal reproducible example,它只有 10-20 个数据点,但代表您的数据(并且是有效的 XML),这样我们就不必处理巨大的文档(但您的数据大于 4000 字节,因此需要作为 CLOB 传递)但您可以在其中推断答案中使用的技术并将其应用于您的(更大的)数据集。
-
也不清楚表中的某些列(例如第一个
fd115列)与XML 文档的关系。 -
我已经编辑了我刚刚添加的 xml 和 fd115 列..我认为它没有用,所以我将删除此列以及其他不需要的标题列...xml 不是那个large 它的大小只有 1.5MB,所以我认为我们不需要在这里使用 CLOB
标签: java xml oracle insert unmarshalling