如果我使用Java代码在服务器模式下启动HSQLDB,服务器启动没有任何问题。但是,当我尝试通过Java代码或通过HSQLDB DatabaseManagerSwing连接到同一个时;我无法连接。
我在内存模式下使用user = conn1和password = conn1启动服务器。但是当连接到服务器时,它给了我以下异常:
java.sql.SQLInvalidAuthorizationSpecException: invalid authorization specification - not found: conn1
我只能通过提供user = SA和空密码来连接。我在Windows7机器上使用HSQLDB 2.2.5和JRE1.7。
有人可以告诉我,我在哪里做错了吗?
答案 0 :(得分:12)
如果您使用2.2.6尝试此操作,则可能会收到错误消息,因为您的服务器属性不正确。属性“server.username”和“server.password”无效。 dbname.0属性必须为小写。
如果要使用SA以外的用户名创建服务器数据库,可以将用户和密码附加到数据库路径:
server.database.0 = file:E:/DB/myDB;user=test;password=test
server.dbname.0 = mydb
服务器关闭后,无需包含用户和密码。凭据仅用于创建数据库。之后,在与服务器建立连接时检查凭据。
答案 1 :(得分:3)
出现您遇到的问题(至少最初)是,对于内存数据库中的HSQL,用户名"必须是" sa(不区分大小写,或者为空,表示"默认" is sa)。您可以使用空密码或指定密码。如果您指定了密码,并且想要稍后重新连接到同一个(内存中)数据库,则必须重新使用相同的密码。如果您想使用SA以外的用户,您可能必须首先连接到您的数据库并执行一些"创建用户"类型命令。然后使用该用户重新连接(假设您的数据库全部在内存中)。
您可以使用多个不同的内存数据库(如果这是您通过指定其他用户尝试完成的内容),请执行以下操作:
// 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);
参考:http://www.hsqldb.org/doc/1.8/guide/guide.html#advanced-chapter
或者,如果您只想重置"在内存数据库中,如每个单元测试之间,请参阅here。
答案 2 :(得分:1)
点号1)无论何时创建数据库,都必须指定用户名和密码。你可以把它保持空白;但是在连接到服务器时必须使用相同的用户名和密码。
如果您观察数据库的脚本文件,您可以看到如下命令: -
CREATE USER "usr" PASSWORD DIGEST '9003d1df22eb4d3820015070385194c8'
ALTER USER "usr" SET LOCAL TRUE
GRANT DBA TO "usr"
我创建了用户名为“usr”的数据库,因此它出现在这些命令的脚本文件中。现在,在启动服务器时,我不需要指定用户名或密码。它将忽略此信息。
连接服务器时,您必须提供完全相同的用户名和密码,并在创建数据库时提供。
第2点) 确保数据库文件的路径中没有空格。如果有空格,则用双引号括起整个路径。 我经常努力找出我的这个愚蠢的错误。
现在,如果我在命令下启动服务器,它就会正确启动
1)转到HSQL的lib
cd C:\Users\owner\Documents\Java Project\hsqldb-2.2.9\hsqldb\lib
然后发出命令
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)在其他命令提示符下转到lib位置
cd C:\Users\owner\Documents\Java Project\hsqldb-2.2.9\hsqldb\lib
然后通过在其他命令提示符窗口中发出命令来连接HSQL DB的Swing UI
java -cp hsqldb.jar org.hsqldb.util.DatabaseManagerSwing --driver org.hsqldb.jdbcDriver --URL jdbc:hsqldb:hsql://localhost/xdb --user "usr" --password ""
答案 3 :(得分:0)
在我的全新2.3.2安装中,点击bin/runServer.bat
后,我设法使用以下方式连接(与Squirrel):
URL: jdbc:hsqldb:hsql://localhost:9001
User: SA
Password: <blank>