【发布时间】:2016-04-21 17:13:20
【问题描述】:
我抓取了一个网站并将数据提取到 .CSV 文件中。此过程已成功执行并正常运行。但是,当我尝试获取 Oracle Sql 数据库表中的数据时,它只带来了 .CSV 文件的第一行,并且不检索数据的其他行。我正在尝试通过在创建脚本中编写的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 和数据库结果的快照。
【问题讨论】:
-
你检查输入文件了吗?可能存在检测行尾的问题,使您的文件成为单行。
-
我附上了.csv文件快照,你可以看到,显然没有检测到问题。
-
日志文件说什么? Excel 是否允许您将该文本转换为数据(因为您的屏幕截图包含单元格 A 中的所有内容)?
-
@AlexPoole Sir 实际上这是一个 .CSV 文件(逗号分隔值文件)。据我所知,我们不能将excel的数据直接导入oracle sql数据库。为此,我们必须将其转换为 .CSV 文件。因此,我将数据直接抓取到 CSV 文件中,这样我就可以跳过那个 excel 文件。
-
是的,我知道它是 CSV,但您已在 Excel 中打开它以创建屏幕截图。我想知道逗号是否是其他字符,以及数据功能区中的 dong 'Text to columns' 是否会抱怨。不过,告诉我们外部表日志文件的内容会更有用。
标签: java oracle csv web-scraping sql-loader