从 DatabaseSwingManager 连接时 HSQL 服务器模式引发异常 java.sql.SQLTransientConnectionException

Posted

技术标签:

【中文标题】从 DatabaseSwingManager 连接时 HSQL 服务器模式引发异常 java.sql.SQLTransientConnectionException【英文标题】:HSQL server mode while connection from DatabaseSwingManager throws exception java.sql.SQLTransientConnectionException 【发布时间】:2020-11-17 06:59:13 【问题描述】:

我写了一个连接服务器模式的java代码

p.setProperty("server.database.3", 
"file:G:/SERVERMODE/soamware;user=soamware;password=123@123");
p.setProperty("server.dbname.3", "soamware");
server.setProperties(p);
server.setLogWriter(null); // can use custom writer
server.setErrWriter(null); // can use custom writer
server.start();
try 
    //Registering the HSQLDB JDBC driver
    Class.forName("org.hsqldb.jdbc.JDBCDriver");
con =  DriverManager.getConnection("jdbc:hsqldb:hsql://ip/soamware; 
file:G:/SERVERMODE/soamware;user=soamware;password=123@123");

此代码在带有 jdk8 和 hsqldb2.5.1 的 netbeans 中运行良好,但控制台显示构建未终止且仍在运行。当我连接到 SwingDatabaseManager 时

具有与 java 代码中提到的相同的 url、用户名和密码。它抛出上述异常。还请澄清,为什么我的程序不退出。我没有添加“server.shutdownCatalogs(1);”最后声明,因为这样我就不能在一个会话中执行多个操作。

【问题讨论】:

您的程序没有退出,因为您启动的服务器仍在运行。您的 DatabaseManagerSwing 图像不完整,未显示 URL 或异常。 【参考方案1】:

因为你只用一个数据库启动服务器,你应该设置database.0属性。您根本不应该在连接字符串上使用@ 字符,因为它具有特殊含义。连接到服务器数据库时不应使用文件路径。仅使用 dbname.0 值。编辑代码如下:

p.setProperty("server.database.0", "file:G:/SERVERMODE/soamware;user=soamware;password=123x123");

p.setProperty("server.dbname.0", "soamware");
server.setProperties(p);
server.setLogWriter(null); // can use custom writer
server.setErrWriter(null); // can use custom writer
server.start();
try 
    Class.forName("org.hsqldb.jdbc.JDBCDriver");
    con =  DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/soamware", "soamware", "123x123");

【讨论】:

以上是关于从 DatabaseSwingManager 连接时 HSQL 服务器模式引发异常 java.sql.SQLTransientConnectionException的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL - 从连接列连接索引

如果连接存在,则从连接表返回值

mysql连接超时后无法从apache DBCP连接池获取连接

MCSessionState 从连接状态变为未连接状态

为啥 ConnectException:连接被拒绝:从 HttpURLConnection.getResponseCode() 抛出连接? [复制]

SQL Server Compact Edition(从外部连接连接)