데이터베이스를 구사하는 것은 예상대로
-
20-08-2019 - |
문제
나는 내 컴퓨터에 Java 앱을 작성했으며 설정 한 DB를 사용하여 완벽하게 작동하지만 사이트에 설치하면 DB가 약간 다르기 때문에 불이 튀어 나옵니다.
그래서 나는 그것을 확인하기 위해 코드를 작성하는 중입니다.
A : DB 세부 정보가 올바른 것으로 나타났습니다
B : 데이터베이스에는 내가 기대하는 모든 테이블이 있으며 올바른 열이 있습니다.
나는 다운을 받았지만 B로 어디에서 시작 해야할지 모르겠다. 어떤 제안이 있습니까?
대상 DB는 현재 클라이언트가 Oracle이지만 앱은 SQL Server에서도 실행하도록 구성 할 수 있습니다. 따라서 일반적인 해결책은 높이 평가 될 것이지만, 다른 사람과 함께하는 방법을 알아낼 수 있기 때문에 Nessisary는 아닙니다.
해결책
데이터베이스의 information_schema를 쿼리하고 싶을 것입니다. 다음은 Oracle에 대한 몇 가지 예입니다. 내가 알고있는 모든 플랫폼에는 비슷한 것이 있습니다.
다른 팁
이를 위해 Liquibase와 같은 데이터베이스 마이그레이션 도구를 사용할 수 있습니다. 대부분의 도구에는 데이터베이스를 확인하는 방법이 있습니다. 나는 그것을 사용하는 직접적인 경험이 없기 때문에 추측입니다.
대부분의 일반적인 솔루션은 예상 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 메타 데이터 클래스에서 사용할 수있는 다른 유사한 방법.