2011-07-06 7 views
0

나는 파이프로 구분 된 플랫 파일과 데이터베이스 테이블을 가지고있다. 플랫 파일과 데이터베이스 간의 모든 차이점을 포함하는 두 번째 플랫 파일을 만들고 싶습니다.데이터베이스의 값과 Java의 플랫 파일을 어떻게 비교합니까?

플랫 파일에 존재하지 않는 항목이 데이터베이스에있는 경우 예가됩니다. 전체 행이 두 번째 플랫 파일에 인쇄됩니다 (플랫 파일에없는 항목이 데이터 베이스). 또 다른 예는 행이 유사하지만 필드에 차이가 있으면 데이터베이스 항목이 플 '파일에 인쇄됩니다.

내가 생각하는 가장 좋은 방법은 플랫 파일 배열에 기본 키가 존재하지 않는 경우 플랫 파일과 데이터베이스의 데이터가 포함 된 2 차원 배열을 만드는 것입니다. select 문. 기본 키가 존재하지만 다른 필드가 존재하지 않으면 select 문에서 결과를 인쇄하십시오. 이것은 내가 생각할 수있는 가장 좋은 방법이지만 비효율적 인 것처럼 보입니다.

더 좋은 방법이 있나요? 자바를 사용하고 있습니다.

+0

대부분의 데이터베이스에는 파일을 직접 읽을 수있는 기능이 있습니다. 전체 작업은 SQL로 수행 할 수 있으며 응용 프로그램 언어보다 확장 성이 좋습니다. –

+0

당신은 어떤 데이터 볼륨을 이야기하고 있으며 소스 파일을 주문 했습니까? 플랫 파일에 DB에서 액세스 할 수있는 경우 SQL/외부 테이블 솔루션 경향이 있습니다.데이터 볼륨이 사소한 것이라면, 자바가 그 트릭을 수행 할 수있다. –

답변

1

이미 데이터베이스와 비교 중이므로 SQL로 모든 작업을 수행하는 것이 좋습니다. 파일의 내용을 데이터베이스에 업로드하고 두 개의 보완 물 (A - B 및 B - A)을 찾아 다른 파일로 내 보냅니다. 뭔가 같이 : 오라클의

SPOOL diff.txt 
SELECT * FROM flatfile_table 
MINUS 
SELECT * FROM db_table 
UNION 
SELECT * FROM db_table 
MINUS 
SELECT * FROM flatfile_table 
ORDER BY SortCriteria; 
SPOOL OFF 
0

데이터베이스에서 데이터를 가져 오는 Java 프로그램을 플랫 파일과 같은 형식으로 이미 작성한 파일과 동일하게 작성하십시오.

두 파일은 같은 분야, 예를 들어, 레코드의 기본 키에 의해 정렬되어 있는지 확인 -이 같은 입력 파일의 경우, 예를 들어, awk에 의해 달성 될 수있다 (정렬 키는 마지막 번호입니다) :

val1|2 
val7|1 

sort -n --field-separator=\| -k 2 1으로 항목을 정렬 할 수 있습니다 (관련 옵션에 대한 설명은 sort 맨 페이지 참조).

그런 다음 다른 항목이있는 파일을 만들려면 diff (또는 유닉스/Linux에없는 경우 유사) 유틸리티를 사용하십시오.

+0

반환 된 데이터베이스 결과가 플랫 파일의 순서와 다른 경우 어떻게됩니까? 제공되는 플랫 파일에 주문이 전혀없는 경우에도 최악입니다. – mtrovo

+0

@mtrovo - DB에서 검색하기 전에 키의 플랫 파일 읽기 – KevinDTimm

+0

@mtrovo 멋진 교정! 대답을 업데이트했습니다. –

1

당신은 당신의 데이터 사이 DIFF를 구축 할 것입니다 선택 파일에서 외부 테이블을 tutorial for external tables

후 간단한 만들기 다음 단순히 내가 이런 일을 할 것

0

내보낼 수 있습니다 :

  • 키가 기본 키 열이고 값이 행 자체 인 맵 구조에서 데이터베이스의 결과로드
  • 플랫 파일 컬렉션을 반복하고 기본 키를 기반으로 Map 구조를 검색하여 출력물이 될 목록에 차이를 추가하십시오.
  • 이전에 목록에 저장 한 차이점을 출력에 기록하십시오.
관련 문제