[英]Retrive data from XML in Java and insert data in Oracle
我已經在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)
);
使用XMLTABLE
。 就像是:
INSERT INTO import_xml (
EXCHNAM,
ENVTEXT,
RPTCOD,
RPTNAM,
RPTFLEXKEY,
MEMBID,
MEMBLGLNAM,
RPTPRNTEFFDAT,
RPTPRNTRUNDAT,
PARTICIPANT
)
SELECT EXCHNAM,
ENVTEXT,
RPTCOD,
RPTNAM,
RPTFLEXKEY,
MEMBID,
MEMBLGLNAM,
RPTPRNTEFFDAT + ( TO_TIMESTAMP( RPTPRNTEFFTIM, 'HH24:MI:SS.FF2' )
- TO_TIMESTAMP( '00:00:00.00', 'HH24:MI:SS.FF2' ) ),
RPTPRNTRUNDAT,
PARTICIPANT
FROM XMLTABLE(
XMLNAMESPACES( DEFAULT 'http://www.eu.com/technology' ),
'//fd115'
PASSING XMLType( your_xml )
COLUMNS
EXCHNAM VARCHAR2(50) PATH './rptHdr/exchNam',
ENVTEXT VARCHAR2(20) PATH './rptHdr/envText',
RPTCOD VARCHAR2(20) PATH './rptHdr/rptCod',
RPTNAM VARCHAR2(180) PATH './rptHdr/rptNam',
RPTFLEXKEY VARCHAR2(180) PATH './rptHdr/rptFlexKey',
MEMBID VARCHAR2(50) PATH './rptHdr/membId',
MEMBLGLNAM VARCHAR2(80) PATH './rptHdr/membLglNam',
RPTPRNTEFFDAT TIMESTAMP PATH './rptHdr/rptPrntEffDat',
RPTPRNTEFFTIM VARCHAR2(50) PATH './rptHdr/rptPrntEffTim',
RPTPRNTRUNDAT DATE PATH './rptHdr/rptPrntRunDat',
PARTICIPANT VARCHAR2(50) PATH './fd115Grp/fd115KeyGrp/participantGrp/participant'
);
(您需要檢查XQuery路徑並添加所有額外的列,但這應該為您提供可以使用的語法的示例。)
同樣, RPTPRNTEFFDAT
可以具有TIMESTAMP
數據類型,並存儲RPTPRNTEFFDAT
和RPTPRNTEFFTIM
xml數據。 (您可以使用DATE
列,但是RPTPRNTEFFTIM
數據似乎只有幾分之一秒,您將失去該精度。)
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 TIMESTAMP, -- TIMESTAMP and remove the RPTPRNTEFFTIM column
RPTPRNTRUNDAT DATE,
fd115GRP VARCHAR2(180),
fd115KEYGRP VARCHAR2(180),
PARTICIPANTGRP VARCHAR2(180),
PARTICIPANT VARCHAR2(50),
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.