문제

나는 내 컴퓨터에 Java 앱을 작성했으며 설정 한 DB를 사용하여 완벽하게 작동하지만 사이트에 설치하면 DB가 약간 다르기 때문에 불이 튀어 나옵니다.

그래서 나는 그것을 확인하기 위해 코드를 작성하는 중입니다.

  • A : DB 세부 정보가 올바른 것으로 나타났습니다

  • B : 데이터베이스에는 내가 기대하는 모든 테이블이 있으며 올바른 열이 있습니다.

나는 다운을 받았지만 B로 어디에서 시작 해야할지 모르겠다. 어떤 제안이 있습니까?

대상 DB는 현재 클라이언트가 Oracle이지만 앱은 SQL Server에서도 실행하도록 구성 할 수 있습니다. 따라서 일반적인 해결책은 높이 평가 될 것이지만, 다른 사람과 함께하는 방법을 알아낼 수 있기 때문에 Nessisary는 아닙니다.

도움이 되었습니까?

해결책

데이터베이스의 information_schema를 쿼리하고 싶을 것입니다. 다음은 Oracle에 대한 몇 가지 예입니다. 내가 알고있는 모든 플랫폼에는 비슷한 것이 있습니다.

http://www.alberton.info/oracle_meta_info.html

다른 팁

이를 위해 Liquibase와 같은 데이터베이스 마이그레이션 도구를 사용할 수 있습니다. 대부분의 도구에는 데이터베이스를 확인하는 방법이 있습니다. 나는 그것을 사용하는 직접적인 경험이 없기 때문에 추측입니다.

나는 사용한다 DBUNIT 데이터베이스를 테스트합니다. Java 기반 솔루션으로 잘 통합됩니다. 주니. 거의 Java없이 사용할 수 있습니다. 나는 당신이 설명한 것과 정확히 같은 상황에서 그것을 사용하지 않았지만, 그것은 일하기에 충분히 가까워야합니다.

대부분의 일반적인 솔루션은 예상 COULMN을 갖는 SELECT 절을 통해 쿼리를 실행하는 것입니다. 데이터를 가져 오지 않도록 위치를 1 = 2로 넣을 수 있습니다. 쿼리가 예외없이 실행되면 예상 테이블과 열이 있습니다.

처음에 데이터베이스 생성을 스크립팅하여 약간 다른 조각이 더 잘 처리 될 수 있습니다. 자동화 된 프로세스는 두 가지를 동일하게 만들 수있는 더 나은 기회를 제공합니다.

또 다른 가치가있는 요점은 Devl 및 Prod 환경을 동일한 데이터베이스 스키마 및 공급 업체를 동일하게 만들어 위험을 최소화한다는 것입니다. 두 가지를 다른 상황을 바꾸십시오.

마지막으로, 당신은 "약간"다른 것을 말하지는 않지만 때로는 피할 수없는 경우가 있습니다 (예 : Oracle을 사용하여 SQL Server는 ID를 사용합니다). 아마도 최대 절전 모드는 공급 업체간에 더 안정적으로 전환하는 데 도움이 될 수 있습니다. 데이터베이스 변경이 구성 파일에서 단일 값을 수정하는 것을 의미 할 수 있도록 세부 사항을 추상화합니다.

필요한 것은 기본적으로 데이터베이스의 단위 테스트입니다. "열은 foobar라는 열이 있어야하며, 유형은 정수가되어야합니다. 외래 키가 존재할 수 없습니다."

이것은 평범한 주니트와 JDBC (메타 데이터에 대한 테이블을 요청)와 함께 가능합니다.

Oracle 에서이 테이블을 사용하여 테이블, 열,보기 등이 있는지 확인할 수 있습니다.

user_tables user_views user_procedure

(또는 모든 것에 대한) user_objects where is 객체_type = '??'

계속 진행하려면 ... user_tab_cols 테이블 열

k

나는 사용한다 마이그레이션 이것을 위해. 주어진 데이터베이스의 주어진 테이블, 열, 행, 인덱스 등의 존재를 확인하고 "테스트"로 사용할 수있는 쿼리를 작성할 수 있습니다. 테스트가 실패하면 "작업"을 트리거합니다 (문제를 해결하는 방법을 아는 또 다른 쿼리입니다).

MigratedB는 여러 데이터베이스 플랫폼 (예 : 각 플랫폼에 대한 "테이블 존재 확인 쿼리"를 지정할 수 있음)을 지원하고 완전히 구성 가능한 테스트 (직접 구성 할 수 있음), 상당히 완료된 Oracle 테스트와 함께 제공되며 실행할 수 있습니다. " 감사 전용 "모드는 차이점을 알려줍니다.

멋지고 강력한 솔루션입니다.

일반 JDBC를 사용하는 경우이 방법을 사용해야합니다. databasemetadata.getTables 메타 데이터 클래스에서 사용할 수있는 다른 유사한 방법.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top