2013-04-12 29 views
9

Tôi đang sử dụng cơ sở dữ liệu được nhúng H2 cho ứng dụng của mình. Tôi muốn chứa mọi thứ mà ứng dụng cần trong Jar riêng của nó, bao gồm cơ sở dữ liệu của nó nếu có thể. Ứng dụng của tôi không cần tạo các tệp tạm thời hoặc bất kỳ thứ gì, vì vậy về cơ bản người dùng chỉ cần chạy Jar.Gói và sử dụng cơ sở dữ liệu nhúng (tệp H2.db) bên trong một Jar?

Có thể nhúng cơ sở dữ liệu vào trong một Jar và có thể INSERT bản ghi mới cũng như chỉ SELECT không?

EDIT: Chỉ cần làm rõ, tôi không tìm cách nhúng bình điều khiển H2 bên trong bình phân phối của tôi, tôi đang tìm cách nhúng tệp cơ sở dữ liệu h2 (someDatabase.h2.db tệp) bên trong một Jar và vẫn có thể ghi/đọc từ cơ sở dữ liệu đó.

Trả lời

9

Nếu bạn muốn nhúng tệp myDatabase.h2.db bên trong .jar, bạn có thể làm như vậy, nhưng bạn sẽ có quyền truy cập chỉ đọc vào cơ sở dữ liệu. Vì các tệp .jar chỉ đọc, bạn không thể sửa đổi chúng và do đó không thể thực thi INSERT, DELETE hoặc bất kỳ lệnh DDL nào.

Điều đó đang được nói, dưới đây là giải thích về cách nhúng video chỉ đọc.

Theo H2's documentation:

Các JDBC URL "jdbc:h2:~/myDatabase" nói Engine H2 để tìm một tập tin cơ sở dữ liệu tên myDatabase.h2.db trong thư mục nhà của người sử dụng hiện nay.

URL JDBC "jdbc:h2:file:/myDatabase" yêu cầu Công cụ H2 tìm kiếm tệp cơ sở dữ liệu có tên myDatabase.h2.db trong thư mục hiện tại (nơi chương trình java được thực thi).

Nếu bạn nhúng tệp h2.db bên trong một .jar, bạn không thể truy cập tệp này theo cách đơn giản. Nó chỉ có thể truy cập dưới dạng tệp bên trong tệp zip.

Để thực hiện H2 uset nó, bạn phải sử dụng một zip như URL:

jdbc:h2:zip:~/data.zip!/test 

Xem thêm tại "Read Only Databases in Zip or Jar File".

Khi bạn nhúng tệp dưới dạng tài nguyên trong bình, bạn có thể nhận được url tương đối của nó. Sử dụng ...

MyClass.class.getClassLoader().getResource("myDatabase.h2.db")

... bạn sẽ nhận được một cái gì đó như:

jar:file:/C:/folder1/folder2/myJar.jar!/myDatabase.h2.db

Sau đó bạn có thể vận dụng nó như là một String và vượt qua như kết nối URL JDBC để H2.

+0

xem Chỉnh sửa của tôi ở trên. Xem thêm để nhúng các tập tin cơ sở dữ liệu chính nó (ví dụ: someDatabase.h2.db tập tin "bên trong Jar của tôi, không phải là trình điều khiển jar. – SnakeDoc

+1

alright, cho tôi một phút để kiểm tra xem nó ra – acdcjunior

+0

@acdcjunion cảm ơn một tấn! – SnakeDoc

Các vấn đề liên quan