微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用java将csv数据与oracle数据库表进行比较

如何解决使用java将csv数据与oracle数据库表进行比较

我需要将我的 csv 文件数据与 oracle 数据库表进行比较。数据包含近 9000 行。任何链接和来源我怎么能做到这一点。 我正在使用这个线程,但它在列表字符串中使用了 equals 方法,但这不会逐行比较 csv 和数据库表中的数据

Compare csv file with MySQL database

解决方法

爪哇?我不会说 Java。但是,由于它是一个 Oracle 数据库,我建议使用另一种方法 - 外部表。下面是一个基于 Scott 的示例架构及其 DEPT 表的示例。 CSV 文件包含“适合”该表的数据,但是 - 我想看看它们之间的差异。

test_dept.csv 文件:

10,ACCOUNTING,NEW YORK
20,SALES,CHICAGO
30,RESEARCH,DALLAS
40,OPERATIONS,BOSTON
50,CIA,LANGLEY

外部表:为了使用它,必须有一个目录(第 8 行)(指向文件系统目录的 Oracle 对象,通常位于数据库服务器上。它包含 csv 文件(第 18 行)) ;将使用它的用户必须至少拥有 read 权限:

SQL> create table dept_ext
  2    (deptno   char(2),3     dname    char(20),4     loc      char(20)
  5    )
  6  organization external (
  7    type oracle_loader
  8    default directory ext_dir
  9    access parameters (
 10      records delimited by newline
 11      fields terminated by ','
 12      missing field values are null
 13      ( deptno  char(2),14        dname   char(20),15        loc     char(20)
 16      )
 17    )
 18    location ('test_dept.csv')
 19  )
 20  reject limit unlimited;

Table created.

它是否看到任何数据?

SQL> select * from dept_ext;

DE DNAME                LOC
-- -------------------- --------------------
10 ACCOUNTING           NEW YORK
20 SALES                CHICAGO
30 RESEARCH             DALLAS
40 OPERATIONS           BOSTON
50 CIA                  LANGLEY

是的,确实如此。 “原始”dept 表中有什么?

SQL> select * from dept;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON

好的,那现在怎么办?由于它是一个“表”,您可以编写任何您想要的 select,将其加入其他表...例如:数据库表中不存在 csv 文件中的哪些部门?

SQL> select * from dept_ext
  2  where deptno not in (select deptno from dept);

DE DNAME                LOC
-- -------------------- --------------------
50 CIA                  LANGLEY

如果我加入 deptno 上的表,部门名称有什么不同吗?

SQL> select e.deptno,e.dname,e.loc,d.dname,d.loc
  2  from dept_ext e join dept d on d.deptno = e.deptno
  3                             and trim(d.dname) <> trim(e.dname);

DE DNAME                LOC                  DNAME          LOC
-- -------------------- -------------------- -------------- -------------
20 SALES                CHICAGO              RESEARCH       DALLAS
30 RESEARCH             DALLAS               SALES          CHICAGO

SQL>

等等。看起来它可能做你想做的事。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。