2012-01-11 46 views
5

Nếu tôi khởi động HSQLDB ở chế độ máy chủ bằng cách sử dụng mã Java của tôi, máy chủ sẽ khởi động mà không gặp bất kỳ sự cố nào. Tuy nhiên, khi tôi cố gắng kết nối với nhau hoặc thông qua mã Java hoặc thông qua DatabaseQLagerSwing HSQLDB; Tôi không thể kết nối.Tên người dùng/mật khẩu máy chủ HSQLDB

Tôi đã khởi động máy chủ với user = conn1 và password = conn1 ở chế độ chỉ dành cho bộ nhớ. Nhưng khi kết nối với máy chủ, nó đã cho tôi ngoại lệ sau:

java.sql.SQLInvalidAuthorizationSpecException: invalid authorization specification - not found: conn1 

Tôi chỉ có thể kết nối bằng cách cho người dùng = SA và mật khẩu trống. Tôi đang sử dụng HSQLDB 2.2.5 và JRE1.7 trên máy Windows7.

Ai đó có thể cho tôi biết tôi đang làm sai ở đâu?

+0

Bạn có thể hiển thị các lệnh chính xác mà bạn sử dụng để khởi động server? –

+0

Bạn đã tạo tài khoản bằng user = conn1 và password = conn1 bằng cách nào? – Kiran

+0

@EliAcherkan: Tôi đang thiết lập các thuộc tính sau: server.database.0 = file:/E: \ DB/myDB server.dbname.0 = myDB server.port = 9001 server.username = test server.password = test. Sau đó tôi khởi động máy chủ bằng server.start(). – ParagJ

Trả lời

12

Nếu bạn thử điều này với 2.2.6, có thể bạn sẽ nhận được thông báo lỗi vì thuộc tính máy chủ của bạn không chính xác. Các thuộc tính "server.username" và "server.password" không hợp lệ. Và thuộc tính dbname.0 phải ở dạng chữ thường.

Nếu bạn muốn tạo một cơ sở dữ liệu máy chủ với một tên người dùng khác hơn là SA, bạn có thể thêm người dùng và mật khẩu để con đường cơ sở dữ liệu:

server.database.0 = file:E:/DB/myDB;user=test;password=test 
server.dbname.0 = mydb 

Sau khi máy chủ là tắt máy, không có nhu cầu bao gồm người dùng và mật khẩu. Thông tin đăng nhập chỉ được sử dụng để tạo cơ sở dữ liệu. Sau đó, thông tin đăng nhập sẽ được kiểm tra khi kết nối được thực hiện với máy chủ.

+0

Tuyệt. Cảm ơn. Nó làm việc như một say mê! – ParagJ

+0

Tôi bắt đầu máy chủ với user = test và password = test. Sau đó tôi dừng lại bằng cách phát hành SHUTDOWN. Tuy nhiên trong khi bắt đầu lại, tôi không cần cung cấp thông tin đăng nhập ngay bây giờ, tại sao? Tôi hy vọng nó nên đã hỏi tôi thông tin đăng nhập mỗi khi tôi bắt đầu máy chủ, nhưng điều đó dường như không xảy ra. – ParagJ

+0

Đã thêm giải thích. – fredt

1

Điểm số 1) Bất cứ khi nào bạn tạo DB, bạn phải chỉ định tên người dùng và mật khẩu. Bạn có thể giữ cho nó cả hai trống; Nhưng cùng một tên người dùng và mật khẩu phải được sử dụng trong khi kết nối với máy chủ.

Nếu bạn quan sát tập tin kịch bản của DB, bạn có thể thấy các lệnh thích: -

CREATE USER "usr" PASSWORD DIGEST '9003d1df22eb4d3820015070385194c8' 
ALTER USER "usr" SET LOCAL TRUE 
GRANT DBA TO "usr" 

tôi đã tạo DB với tên người dùng "usr" vì vậy nó xuất hiện trong tập tin kịch bản trong những lệnh. Bây giờ trong khi khởi động máy chủ tôi không cần phải chỉ định tên người dùng hoặc mật khẩu. Nó sẽ loại bỏ thông tin này.

Trong khi kết nối máy chủ, bạn phải cung cấp chính xác tên người dùng và mật khẩu, bạn đã cung cấp trong khi tạo DB.

Điểm số 2) Đảm bảo không có khoảng trống trong đường dẫn tệp DB của bạn. Nếu có không gian sau đó kèm theo toàn bộ đường dẫn trong dấu ngoặc kép. Tôi đã phải vật lộn rất nhiều để tìm ra sai lầm ngớ ngẩn này của tôi.

Bây giờ nếu tôi bắt đầu wil máy chủ dưới lệnh nó bắt đầu một cách chính xác

1) Tới lib của HSQL

cd C:\Users\owner\Documents\Java Project\hsqldb-2.2.9\hsqldb\lib 

Sau đó đưa ra lệnh

java -cp hsqldb.jar org.hsqldb.Server -database.0 file:"C:\Users\owner\Documents\Java Project\hsqldb-2.2.9\TmpDBLocation\myKauDB" -dbname.0 xdb 

2) Trong cửa sổ lệnh khác đã đến địa chỉ lib

cd C:\Users\owner\Documents\Java Project\hsqldb-2.2.9\hsqldb\lib 

Sau đó kết nối với giao diện người dùng Swing của HSQL DB bằng cách cho lệnh trong lệnh khác cửa sổ nhắc

java -cp hsqldb.jar org.hsqldb.util.DatabaseManagerSwing --driver org.hsqldb.jdbcDriver --URL jdbc:hsqldb:hsql://localhost/xdb --user "usr" --password "" 
3

Xuất hiện vấn đề bạn đang chạy vào (ít nhất ban đầu) được rằng, đối với HSQL trong cơ sở dữ liệu bộ nhớ, tên người dùng "có là "sa (không phân biệt chữ hoa chữ thường, hoặc trống, có nghĩa là" mặc định "là is sa). Bạn có thể sử dụng mật khẩu trống hoặc chỉ định mật khẩu. Nếu bạn chỉ định mật khẩu và muốn kết nối lại với cùng một bộ nhớ (trong bộ nhớ) DB, bạn sẽ phải sử dụng lại cùng một mật khẩu. Nếu bạn muốn sử dụng một người dùng khác SA, bạn có thể phải kết nối đầu tiên với cơ sở dữ liệu của bạn và thực hiện một số lệnh "tạo người dùng". Sau đó kết nối lại bằng cách sử dụng người dùng đó (giả sử DB của bạn là tất cả trong bộ nhớ).

Bạn có thể sử dụng nhiều khác nhau cơ sở dữ liệu trong bộ nhớ (nếu đó là những gì bạn đang cố gắng để thực hiện bằng cách xác định một người dùng khác nhau) như thế này:

// change the MySpecialTestDb String for multiple different in memory databases 
// or reuse the same value 
// to reconnect to a previously created in memory database [i.e. within the same process previously]. 
String DB_CONNECTION_STR = "jdbc:hsqldb:mem:MySpecialTestDb"; 
String DB_USERNAME_STR = "sa"; 
String DB_USERNAME_PASSWORD = ""; 
DriverManager.getConnection(DB_CONNECTION_STR, DB_USERNAME_STR, DB_USERNAME_PASSWORD); 

ref: http://www.hsqldb.org/doc/1.8/guide/guide.html#advanced-chapter

Hoặc nếu bạn muốn chỉ cần "đặt lại" một cơ sở dữ liệu bộ nhớ, như giữa mỗi bài kiểm tra đơn vị, xem here.

0

Trong thương hiệu mới cài đặt 2.3.2 của tôi, sau khi nhấp bin/runServer.bat, tôi cố gắng kết nối (với Squirrel) sử dụng:

URL: jdbc:hsqldb:hsql://localhost:9001 
User: SA 
Password: <blank> 
Các vấn đề liên quan