我抓取了一个网站并将数据提取到 .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 和数据库结果的快照。
最佳答案
您的 Java 代码使用换行符 (LF) 作为行分隔符:
sb.append("\n");
这在 Linux/UNIX 世界中很好,但您的 Oracle 实例似乎在 Windows 上运行,并且默认情况下需要 Windows 样式的行分隔符,同时包含回车符和换行符 (CRLF)。
当它读取文件时,它会将 LF 本身视为行中的一个字符,因此它本质上将整个文件视为一行,正如 J.Chomel 之前建议的那样。
您可以使用实用程序转换行结尾,或者通过将代码更改为以下内容来生成具有预期 Windows 分隔符的文件:
sb.append("\r\n");
关于java - 从 .CSV 导入的 Oracle Sql 数据库中未显示数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36762505/