2010-05-04 31 views
9

Tôi đang gặp sự cố khi tạo bảng trong bộ nhớ, sử dụng cơ sở dữ liệu H2 và truy cập vào nó bên ngoài JVM được tạo và chạy. JVM được tạo và chạy.h2 trong bộ nhớ bảng, kết nối từ xa

Tài liệu cấu trúc url jdbc:h2:tcp://<host>/mem:<databasename>

Tôi đã thử nhiều kết hợp nhưng không thể kết nối từ xa để hoạt động. Tính năng này có hoạt động không, bất kỳ ai cũng có thể cho tôi biết chi tiết về cách họ sử dụng tính năng này.

+0

Sẽ tốt nếu bạn liệt kê các kết hợp bạn đã thử. –

+0

Bạn có gặp sự cố khi thiết lập máy chủ (để nghe trên một số cổng TCP) hoặc ứng dụng khách (để kết nối với máy chủ) không? –

Trả lời

10

Bạn có thể xem In-Memory Databases. Đối với kết nối mạng, bạn cần có tên máy chủ và cơ sở dữ liệu. Dường như bạn muốn jdbc:h2:tcp://localhost/mem:db1 hoặc jdbc:h2:tcp://127.0.0.1/mem:db1

2

Vừa phải đối mặt với vấn đề này tôi thấy tôi cần phải nối thêm DB_CLOSE_DELAY=-1 đến URL JDBC cho kết nối tcp. Vì vậy, các URL của tôi là:

  • Trong Memory: jdbc:h2:mem:dbname
  • TCP kết nối: jdbc:h2:tcp://localhost:9092/dbname;DB_CLOSE_DELAY=-1

From the h2 docs:

Theo mặc định, đóng kết nối cuối cùng đến một cơ sở dữ liệu đóng cơ sở dữ liệu . Đối với cơ sở dữ liệu trong bộ nhớ, điều này có nghĩa là nội dung bị mất. Để giữ cơ sở dữ liệu mở, hãy thêm ;DB_CLOSE_DELAY=-1 vào cơ sở dữ liệu URL.

Không bao gồm DB_CLOSE_DELAY=-1 có nghĩa là tôi không thể kết nối với cơ sở dữ liệu chính xác qua TCP. Kết nối được thực hiện, nhưng nó sử dụng một phiên bản khác với phiên bản được tạo trong bộ nhớ (được xác thực bằng cách sử dụng tham số IFEXISTS=true)

5

Không có giải pháp nào được đề cập đến nay cho tôi. Phần từ xa không thể kết nối.

Theo official documentation H2 của:

Để truy cập vào một cơ sở dữ liệu trong bộ nhớ từ trình khác hoặc từ một máy tính khác, bạn cần để bắt đầu một máy chủ TCP trong quá trình tương tự như cơ sở dữ liệu trong bộ nhớ đã được tạo ra. Các quy trình khác sau đó cần truy cập cơ sở dữ liệu qua TCP/IP hoặc TLS, sử dụng một URL cơ sở dữ liệu như: jdbc: h2: tcp: // localhost/mem: db1.

Tôi đánh dấu phần quan trọng của văn bản được in đậm.

Và tôi tìm thấy một giải pháp làm việc tại của anh chàng này blog:

Quá trình đầu tiên sẽ tạo DB, với URL sau:

jdbc:h2:mem:db1

và nó sẽ cần để bắt đầu Máy chủ tcp:

org.h2.tools.Server server = org.h2.tools.Server.createTcpServer().start();

sau đó

Các quy trình khác có thể truy cập vào DB của bạn bằng cách sử dụng các URL sau:

"jdbc:h2:tcp://localhost/mem:db1"

Và đó là nó! Làm việc như người ở!

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