2013-04-17 28 views
5

Tôi đang tạo cơ sở dữ liệu H2 trong các bài kiểm tra đơn vị của mình. Cơ sở dữ liệu sử dụng các thuộc tính sau:Không thể duyệt tệp cơ sở dữ liệu 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> 

Tôi đang sử dụng phiên bản 1.3.166 của tệp com.h2database.h2 jar.

Khi tôi chạy thử nghiệm của mình, tôi thấy cơ sở dữ liệu được tạo trong thư mục target/db và có một tệp testdb.h2.db. Các thử nghiệm của tôi chạy và tải dữ liệu từ cơ sở dữ liệu. Tôi có thể mở tệp target/db/testdb.h2.db và xem các câu lệnh SQL mà tôi đã sử dụng để tạo cơ sở dữ liệu.

Tuy nhiên, khi tôi cố tải tệp target/db/testsb.h2.db vào công cụ duyệt cơ sở dữ liệu như DBVisualizer, tôi không thể thấy bất kỳ bảng hoặc dữ liệu nào. Đối với DBVisualizer tôi chỉ định chế độ H2 (Embedded).

Tôi cũng đã thử bảng điều khiển H2 nhưng lệnh show tables trả về tập hợp kết quả trống.

Tôi không thể nhìn thấy những gì tôi đang làm sai: tệp cơ sở dữ liệu tồn tại, các kiểm tra chạy đúng cách, nhưng tôi không thể mở tệp này trong trình duyệt cơ sở dữ liệu.

Mọi đề xuất?

Trả lời

5

Rất có thể, sự cố là URL cơ sở dữ liệu bạn sử dụng.

jdbc:h2:file:target/db/testdb 

Điều này có nghĩa các tập tin cơ sở dữ liệu được lưu trữ tương đối so với thư mục làm việc hiện tại. Vì vậy, nó phụ thuộc vào nơi bạn bắt đầu ứng dụng. Nếu bạn đã bắt đầu DBVisualizer trong một thư mục khác (rất có thể bạn đã làm), thì nó sẽ tạo một cơ sở dữ liệu mới trong một thư mục khác.

Để đảm bảo bạn đang sử dụng cơ sở dữ liệu tương tự, tôi đề nghị sử dụng một tên thư mục tuyệt đối, hoặc tương đối so với thư mục người dùng gia đình hiện nay, như được mô tả trong tài liệu H2:

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

Tiền tố file: là không bắt buộc .

+4

Thực ra vấn đề là cách tôi đã chỉ định tệp trong DBVisualizer. Nó yêu cầu một tập tin cơ sở dữ liệu, và mở một hộp thoại chọn tập tin, và tôi tự nhiên nhấn đúp vào tập tin 'target/db/testdb.h2.db'. Nhưng phương pháp đúng là xóa phần mở rộng '.h2.db'. Thiết kế giao diện người dùng xấu IMHO. –

+1

Tôi nghĩ rằng trong phiên bản thị trưởng kế tiếp của H2 (2.0 có thể) sẽ không có hậu tố tên tệp cứng. –

+1

@JohnQCitizen Bạn giành được tất cả Internet của tôi trong một tuần! Đây là vấn đề. Tôi đã sử dụng di chuyển cơ sở dữ liệu và không thể tìm ra lý do tại sao các bảng không được tạo. Hóa ra là loại bỏ .h2.db đã làm được điều đó. Sử dụng ui không thành công!Và cảm ơn vì giải pháp! – Maik

0

Nếu bạn nhận được một lỗi như

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] 

vấn đề là (như thông điệp nói) mà bạn đang sử dụng một cơ sở dữ liệu được tạo ra với một phiên bản cũ của h2. Để duyệt cơ sở dữ liệu với DbVisualizer bạn có thể tạo một tài xế cơ sở dữ liệu mới:

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

Điền vào các trường và chọn file jar h2 đúng, và bạn sẽ được tốt để đi.