2012-01-11 14 views
5

Se inizio la HSQLDB in modalità server usando il mio codice Java, il server avvia senza alcun problema. Tuttavia, quando provo a connettermi allo stesso tramite il codice Java o tramite il DatabaseManagerSwing di HSQLDB; Non riesco a connettermi.HSQLDB modalità server username/password

Ho avviato il server con user = conn1 e password = conn1 in modalità solo memoria. Ma quando ci si collega al server che mi ha dato seguente eccezione:

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

posso collegare solo dando user = SA e la password vuota. Sto usando HSQLDB 2.2.5 e JRE1.7 sulla macchina Windows7.

qualcuno può dirmi dove sto sbagliando?

+0

si può mostrare il comando esatto utilizzato per avviare il server? –

+0

Come hai creato l'account con user = conn1 e password = conn1 ?? – Kiran

+0

@EliAcherkan: Sto impostando le seguenti proprietà: server.database.0 = file:/E: \ DB/myDB server.dbname.0 = myDB server.port = 9001 server.username = test server.password = test. Sto quindi avviando il server da server.start(). – ParagJ

risposta

12

Se si prova con 2.2.6, si otterrà probabilmente un messaggio di errore in quanto le proprietà del server non sono corrette. Le proprietà "server.username" e "server.password" non sono valide. E la proprietà dbname.0 deve essere in minuscolo.

Se si desidera creare un database del server con un nome utente diverso da SA, è possibile aggiungere l'utente e la password per il percorso del database:

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

Dopo che il server viene arrestato, non v'è alcuna necessità di includere l'utente e la password. Le credenziali vengono utilizzate solo per creare il database. Successivamente, le credenziali vengono controllate quando viene stabilita una connessione al server.

+0

Fresco. Grazie. Ha funzionato come un fascino! – ParagJ

+0

Avvio il server con user = test e password = test. Quindi lo interrompo emettendo SHUTDOWN. Tuttavia mentre lo avvio di nuovo non ho bisogno di fornire le credenziali ora, perché? Mi aspetto che mi dovrebbe chiedere le credenziali ogni volta che avvio il server, ma questo non sembra accadere. – ParagJ

+0

Aggiunta spiegazione. – fredt

1

Punto n. 1) Ogni volta che si crea un DB, è necessario specificare nome utente e password. Puoi tenerlo entrambi vuoto; Ma lo stesso nome utente e password devono essere utilizzati durante la connessione al server.

Se si osservano file di script del vostro DB, è possibile vedere i comandi come: -

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

avevo creato DB con nome utente "usr", così si presentava nel file di script in quei comandi. Ora durante l'avvio del server non è necessario specificare nome utente o password. Ignorerà queste informazioni.

Durante la connessione del server è necessario fornire esattamente lo stesso nome utente e password, forniti durante la creazione del DB.

Punto n. 2) Assicurarsi che non vi sia spazio nel percorso dei file DB. Se c'è spazio, racchiudere l'intero percorso tra virgolette. Ho faticato molto per scoprire questo stupido mio errore.

Ora, se mi metto il wil server di sotto comando si avvia correttamente

1) Vai alla lib di HSQL

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

poi dare il comando

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) In altre prompt dei comandi andato nella posizione di lib

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

poi collegato l'interfaccia utente swing di HSQL DB dando il comando in altro comando finestra del prompt

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

Appare il problema si stesse eseguendo in (almeno inizialmente) è che, per HSQL in-memory database, il nome utente "ha essere "sa" (senza distinzione tra maiuscole e minuscole, o vuoto, che implica il "default" che is sa). È possibile utilizzare una password vuota o specificare una password. Se si specifica una password e si desidera riconnettersi allo stesso DB (in memoria) in un secondo momento, sarà necessario riutilizzare la stessa password. Se si desidera utilizzare un utente diverso da SA, è necessario connettersi prima al database ed eseguire alcuni comandi di tipo "crea utente". Quindi riconnettiti usando quell'utente (supponendo che il tuo DB sia tutto in memoria).

È possibile utilizzare più diversi database in memoria (se è questo che stai cercando di realizzare specificando un altro utente) in questo modo:

// 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

Oppure, se volete per "resettare" semplicemente un database in memoria, ad esempio tra ogni test dell'unità, vedere here.

0

Nel mio nuovo di zecca 2.3.2 installazione, dopo aver fatto clic bin/runServer.bat, sono riuscito a connettersi (con scoiattolo) utilizzando:

URL: jdbc:hsqldb:hsql://localhost:9001 
User: SA 
Password: <blank> 
Problemi correlati