debugging时在内存中检查hsqldb

我们在内存中使用hdsqldb来运行针对数据库的junittesting。 数据库在通过弹簧configuration运行每个testing之前设置。 一切正常。 现在,当一个testing失败时,可以很方便地检查内存数据库中的值。 这可能吗? 如果这样怎么样? 我们的url是:

jdbc.url = JDBC:HSQLDB:MEM:TESTDB; sql.enforce_strict_size =真

数据库在每次testing后被销毁。 但是当debugging器运行时,数据库也应该是活着的。 我试过用sqldb databaseManager连接。 这工作,但我没有看到任何表或数据。 任何帮助,高度赞赏!

HSQL在内存中,所以当你说你正在连接SQLDB数据库pipe理器,你不是 – 你正在连接到SQLDB数据库pipe理器的内存空间中的另一个数据库,而不是在内存空间unit testing。 这就是为什么SQLDB数据库pipe理器中的数据库是空的。

您可以使用org.hsqldb.Server作为服务器运行HSQL,如此处所述。

虽然org.hsqldb.Server类通常用于启动单独的进程,但是可以在unit testing中实例化和configuration它,这应该允许远程进程连接和查询数据库。

或者,您必须编写某种在unit testing中根据需要调用的转储function。

另外,在unit testing中使用HSQL只是certificate你的代码对HSQL是有效的,这与实际的数据库不同。 这意味着你可以得到误报,反之亦然。 使用模拟API或更好的方法可以达到同样的效果,保存数据库testing以获得与真实数据库一起工作的体面集成testing。

在您的unit testing或@Before / setUp()方法中,可以添加以下行来启动HSQL数据库pipe理器:

 org.hsqldb.util.DatabaseManager.main(new String[] { "--url", "jdbc:hsqldb:mem:testdb", "--noexit" }); 

或改进的Swing版本

 org.hsqldb.util.DatabaseManagerSwing.main(new String[] { "--url", "jdbc:hsqldb:mem:testdb", "--noexit" }); 

数据库pipe理器允许您检查您的模式,并在应用程序运行时在实时内存数据库上运行SQL查询。

如果要检查特定行的数据库状态,请确保设置一个关口或以某种方式暂停执行。

运行你的unit testing到一个断点,然后在Eclipse的debugging透视图中,打开显示视图(窗口,显示视图,显示)并input

  org.hsqldb.util.DatabaseManagerSwing.main(new String[] { "--url", "jdbc:hsqldb:mem:testdb", "--noexit" }); 

(根据dimdm的post),突出显示它,右键单击并select执行。

你也可以使用包含在[HSQLDB] [1]中的DatabaseManagerSwing类传递给它一个开放的连接,它允许你在连接所在的事务中看到数据库的状态。

 DatabaseManagerSwing manager = new DatabaseManagerSwing(); manager.main(); manager.connect(connection); manager.start();