H2 数据库文件消失

Posted

技术标签:

【中文标题】H2 数据库文件消失【英文标题】:H2 database files disappear 【发布时间】:2018-08-12 14:43:32 【问题描述】:

在完成一些集成测试后,我发现我预期的 H2 数据库文件不存在。

使用“jdbc:h2:/tmp/casper”的 url,我希望有一个 /tmp/casper.mv.db 文件,但没有。

原因是我在初始化数据库时使用了“drop all objects delete files”,经过我所有的工作,在关闭数据源时测试后消失了。

我对这个问题的回答中的演示。

【问题讨论】:

【参考方案1】:

包org.javautil.h2;

import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

import java.io.File;
import java.sql.Connection;
import java.sql.Statement;

import org.junit.Test;

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;

public class H2DropAllObjectsTest 


    @Test
    public void casper() throws Exception 
        final HikariConfig config = new HikariConfig();
        config.setJdbcUrl("jdbc:h2:/tmp/casper");
        config.setUsername("sr");
        config.setPassword("tutorial");
        config.setAutoCommit(true);

        HikariDataSource dataSource = new HikariDataSource(config);

        Connection connection = dataSource.getConnection();
        File f = new File("/tmp/casper.mv.db");
        assertTrue (f.exists());
        Statement s = connection.createStatement();

        s.execute("drop all objects delete files");
        assertTrue (f.exists());
        s.execute("create table a (b number(9))");
        /* do a lot of work */
        connection.commit();
        s.close();
        connection.close();
        assertTrue (f.exists());

        dataSource.close();

        assertFalse (f.exists());
    


【讨论】:

【参考方案2】:

只需将您的数据库处理为update,不要使用create/drop

dataSource:
            dbCreate: update

【讨论】:

以上是关于H2 数据库文件消失的主要内容,如果未能解决你的问题,请参考以下文章

H2:打开连接,更新,关闭连接,现在我所有的更改都消失了吗?

如何使用具有自定义文件扩展名的 H2 数据库?

H2(文件)删除性能

恢复 h2 数据库

H2数据库

使用 RobotFramework 连接到 H2 数据库文件