2013-04-17 5 views
5

유닛 테스트에서 H2 데이터베이스를 만들고 있습니다. 데이터베이스는 다음 속성을 사용합니다.H2 데이터베이스 파일을 찾을 수 없습니까?

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 
    destroy-method="close"> 
    <property name="driverClassName" value="org.h2.Driver"/> 
    <property name="url" value="jdbc:h2:file:target/db/testdb"/> 
    <property name="username" value="sa"/> 
    <property name="password" value=""/> 
</bean> 

com.h2database.h2 jar 파일의 버전 1.3.166을 사용하고 있습니다.

테스트를 실행할 때 데이터베이스가 target/db 디렉토리에 생성되고 testdb.h2.db 파일이 존재합니다. 내 테스트가 실행되고 데이터베이스에서 데이터를로드합니다. target/db/testdb.h2.db 파일을 열고 데이터베이스를 만드는 데 사용한 SQL 문을 볼 수 있습니다.

그러나 target/db/testsb.h2.db 파일을 DBVisualizer와 같은 데이터베이스 탐색 도구에로드하려고하면 테이블이나 데이터를 볼 수 없습니다. DBVisualizer의 경우 H2 (Embedded) 모드를 지정합니다.

또한 H2 콘솔을 시도했지만 show tables 명령이 빈 결과 집합을 반환합니다.

내가 잘못하고있는 것을 볼 수 없습니다. 데이터베이스 파일이 존재하고 테스트가 올바르게 실행되지만 데이터베이스 브라우저에서이 파일을 열 수 없습니다.

제안 사항?

답변

5

대부분의 경우 문제는 사용하는 데이터베이스 URL입니다.

jdbc:h2:file:target/db/testdb 

이 데이터베이스 파일이 현재 작업 디렉토리-상대적으로 저장됩니다 것을 의미합니다. 따라서 응용 프로그램을 시작한 위치에 따라 다릅니다. DBVisualizer를 다른 디렉토리에서 시작한 경우 (가장 가능성이 높은 경우) 데이터베이스가 다른 디렉토리에 작성됩니다.

jdbc:h2:~/relative/to/user/home/dir/testdb 
jdbc:h2:/absolute/path/testdb 

접두사 file:는 생략 가능 H2 문서에 설명 된대로

동일한 데이터베이스를 사용하고 있는지 확인하기 위해, 나는, 절대 디렉토리 이름을 사용하는 것이 좋습니다, 또는 현재 사용자 홈 디렉토리에 상대적 .

+4

실제로 문제는 DBVisualizer에서 파일을 어떻게 지정했는지입니다. 데이터베이스 파일을 요청하고 파일 선택기 대화 상자를 열고'target/db/testdb.h2.db' 파일을 자연스럽게 두 번 클릭했습니다. 그러나 올바른 방법은'.h2.db' 확장자를 제거하는 것입니다. UI 디자인이 잘못되었습니다. –

+1

나는 H2 (2.0 어쩌면)의 다음 시장 버전에서 하드 코드 된 파일 이름 접미사가 없을 것이라고 생각한다. –

+1

@JohnQCitizen 당신은 일주일 내내 내 모든 인터넷에서 승리합니다! 이것이 문제였습니다. 데이터베이스 마이그레이션을 사용하고 있는데 왜 테이블이 만들어지지 않았는지 알 수 없었습니다. .h2.db를 제거하면 트릭을 만들었다. ui를 사용하십시오!그리고 해결책을 가져 주셔서 감사합니다! – Maik

0

당신은 H2의 이전 버전으로 만든 데이터베이스를 사용하는

Unsupported database file version or invalid file header in file "Old database: 
/path/to/databasename.data.db - please convert the database to a SQL script and 
re-create it." [90048-167] 

(메시지가 말한대로) 문제가 같은 오류가 발생하는 경우.

Tools>Driver manager...>Create a new driver

이 필드에 입력하고 오른쪽 H2 jar 파일을 선택, 당신은 갈 수 있어야한다 : 새로운 데이터베이스 드라이버를 만들 수 있습니다 dbVisualizer와 데이터베이스를 검색하기 위해.

관련 문제