我抓取了一个网站并将数据提取到.CSV
文件中。此过程已成功执行并正常运行。但是,当我尝试获取Oracle Sql Database表中的数据时,它只会带来.CSV
文件的第一行,而不会检索其他数据行。我试图通过在create script中编写的SQLLoader
来检索CSV文件的数据。当我通过该脚本调用任何其他CSV时,它工作正常并带来所有数据。但是,这个问题只出现在通过java程序创建的文件中
Java代码如下。
public static void parsingHTML() throws Exception {
for (int i = 1; i <= 1; i++) {
tbodyElements = doc.getElementsByTag("tbody");
if (tbodyElements.isEmpty()) {
throw new Exception("Table is not found");
}
elements = tbodyElements.get(0).getElementsByTag("tr");
for (Element trElement : elements) {
trElement2 = trElement.getElementsByTag("tr");
tdElements = trElement.getElementsByTag("td");
File fold = new File("C:\\convertedCSV9.csv");
fold.delete();
File fnew = new File("C:\\convertedCSV9.csv");
FileWriter sb = new FileWriter(fnew, true);
for (Iterator<Element> it = tdElements.iterator(); it.hasNext();) {
Element tdElement1 = it.next();
final String content2 = tdElement1.text();
if (it.hasNext()) {
sb.append("\n");
}
for (Iterator<Element> it2 = trElement2.iterator(); it.hasNext();) {
Element tdElement2 = it.next();
final String content = tdElement2.text();
if (it2.hasNext()) {
sb.append(formatData(content));
sb.append(" , ");
}
if (!it.hasNext()) {
String content1 = content.replaceAll(",$", " ");
sb.append(formatData(content1));
it2.next();
}
}
System.out.println(sb.toString());
sb.flush();
sb.close();
}
System.out.println(sampleList.add(tdElements));
}
}
}
创建脚本
-- Create table
create table TEST_EXCEL_OPEN_END_SMRY
(
fund_name VARCHAR2(150),
rating VARCHAR2(50),
validity_date VARCHAR2(50),
fund_nav VARCHAR2(50),
ytd VARCHAR2(50),
mtd VARCHAR2(50),
day_1 VARCHAR2(50),
days_15 VARCHAR2(50),
days_30 VARCHAR2(50),
days_90 VARCHAR2(50),
days_180 VARCHAR2(50),
days_270 VARCHAR2(50),
days_365 VARCHAR2(50)
)
organization external
(
type ORACLE_LOADER
default directory DIR_KSE
access parameters
(
RECORDS DELIMITED BY NEWLINE
badfile bad_dir:'revext%a_%p.bad'
logfile log_dir:'revext%a_%p.log'
FIELDS TERMINATED BY ','
MISSING FIELD VALUES ARE NULL
(
FUND_NAME,
RATING ,
VALIDITY_DATE ,
FUND_NAV ,
YTD ,
MTD ,
DAY_1 ,
DAYS_15 ,
DAYS_30 ,
DAYS_90 ,
DAYS_180,
DAYS_270,
DAYS_365
)
)
location (DIR_KSE:'convertedCSV9.csv')
)
reject limit UNLIMITED;
P.S:DIR_KSE
的路径是正确的。我还附上了CSV和数据库结果的快照。
答案 0 :(得分:3)
您的Java代码使用换行符(LF)作为行分隔符:
sb.append("\n");
在Linux / UNIX世界中这很好,但看起来你的Oracle实例在Windows上运行,并且默认情况下需要Windows样式的行分隔符,包括回车符和换行符(CRLF)。
当它读取文件时,它会将LF视为行中的一个字符,因此它基本上将整个文件看作一行,如J.Chomel先前所建议的那样。
您可以使用实用程序转换行结尾,也可以通过将代码更改为以下内容来生成包含预期Windows分隔符的文件:
sb.append("\r\n");