java.sql.SQLException: 无法从底层数据库获取连接! — HSQLDB

java.sql.SQLException: Connections could not be acquired from the underlying database! — HSQLDB

我已经安装了 SQL Workbench/J Build 118 并登录了 Liferay PortalHSQL 数据库。

然后我关闭了 SQL Workbench 没有对数据库做任何更改。 我重新启动了 Liferay tomcat 服务器,然后出现以下错误:

ERROR [localhost-startStop-1][DialectDetector:124] java.sql.SQLException:
Connections could not be acquired from the underlying database!

和这个警告:

WARN  [C3P0PooledConnectionPoolManager[identityToken->3c8jofUN]-HelperThread-#4][BasicResourcePool:1851]
com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask@3249a129 --
Acquisition Attempt Failed!!! Clearing pending acquires.
While trying to acquire a needed new resource, we failed to succeed more than
the maximum number of allowed acquisition attempts (3).
Last acquisition attempt exception:
java.sql.SQLException: error in script file line: 
7 unexpected token: CONFLICT required: DEADLOCK

ps。我正在使用最新版本的 HSQL JDBC 驱动程序 (v.2.3.3)

我通过更改 %LIFERAY_DIR%/data/hsql/lportal.script 文件中的这一行解决了这个问题:

SET DATABASE TRANSACTION ROLLBACK ON CONFLICT TRUE

SET DATABASE TRANSACTION ROLLBACK ON DEADLOCK TRUE

然后我删除了这一行:

SET DATABASE SQL AVG SCALE 0

并且我成功启动了服务器。

Liferay 中的 hsql 非常适合快速演示。对于超出此范围的任何事情,我建议使用一个单独的数据库。对于 MySql 和 Postgresql,有两个免费选项随时可用。 hsql 存储在一个文件中,我不确定向后兼容性(以防你的 workbench 使用与 Liferay 不同的驱动程序版本)并且两个进程不能同时访问一个文件。

当然,您也可以将 hsql 作为服务器应用程序运行,但恕我直言,那样做就太过分了。只需安装一个合适的数据库,您就拥有了所需的所有工具。今天的计算机没有真正的开销。