Jasper Studio 锁定 H2 嵌入式数据库?

Posted

技术标签:

【中文标题】Jasper Studio 锁定 H2 嵌入式数据库?【英文标题】:Jasper Studio Locking H2 Embedded Database? 【发布时间】:2014-02-21 21:50:55 【问题描述】:

我正在尝试在 Jasper Studio 中创建 Jasper 报告。我已经成功设置了一个 H2 嵌入式数据源,并成功地从 Jasper Studio 内部测试了连接。

但是,当我尝试创建一个新的 Jasper 报告时,Jasper 会创建一个到数据库的连接,然后当它尝试执行我刚刚输入的查询时,它给了我以下错误:

数据库可能已被使用:“被另一个进程锁定。”可能的解决方案:关闭所有其他连接;使用服务器模式

很遗憾,不能使用服务器模式。

Jasper 还允许您显式选择嵌入式 H2 文件数据库作为数据源,但它看起来并不真正受支持。

有人知道如何配置 Jasper 以使用嵌入式 H2 数据库吗?

Jasper 甚至可以与任何嵌入式数据库一起使用吗?

编辑:我能够让 Jasper 创建一个成功执行针对 H2 嵌入式数据库的查询的 Jasper 报告的唯一方法是,如果我完全关闭数据库上的锁定。我在 Jasper 中编辑了数据适配器,使其具有类似于以下内容的 JDBC URL:

jdbc:h2:file:C:\test_db;FILE_LOCK=NO

【问题讨论】:

为什么不能使用服务器模式? 我将它用作嵌入式文件数据库。 好吧,你得到了异常“被另一个进程锁定”。这意味着,数据库文件已经在不同的进程中打开,并且数据库被锁定。我认为您需要阅读并理解此异常的含义。 问题是 Jasper 本身正在锁定数据库,然后尝试再次连接。 在同一个进程和同一个classloader内,可以多次打开数据库没有问题。仅当数据库由 另一个 进程或在 另一个 类加载器中打开时,才会出现“被另一个进程锁定”的异常。 【参考方案1】:

使用FILE_LOCK=NO 将corrupt your database。

改为使用不同的connection mode:

server mode automatic mixed mode

【讨论】:

【参考方案2】:

尝试手动删除嵌入式数据库文件夹中的 db.lck(关闭 jaspersoft studio 后)。

【讨论】:

以上是关于Jasper Studio 锁定 H2 嵌入式数据库?的主要内容,如果未能解决你的问题,请参考以下文章

H2 功能特点

H2 嵌入式模式和软件崩溃

如何在(Jasper Studio)的 mongo DB 查询中制作动态/可选过滤器(参数)

为啥hibernate关闭连接后h2的数据库文件仍然会被锁定一段时间?

org.h2.jdbc.JdbcSQLException:数据库可能已在使用中:“被另一个进程锁定”

springboot 嵌入式 tomcat 和 tomcat-embed-jasper