2014-11-20 34 views
10

我认为有代码的方式,至少有一些很好的解决方法。H2 - 如何截断所有表?

请考虑我不想删除所有表格(我见过这个命令),只是为了从它们中删除行,但保留现有的模式和所有约束。

也许我可以以某种方式从元数据获取所有表的列表,并为每个分别应用TRUNCATE命令?但是他们的关系和外键呢?

任何想法?

回答

1

现在,我想出了这个解决方案...但仍然需要更彻底地测试它。

private void truncateDatabase() throws SQLException { 
    String tempDir = System.getProperty("java.io.tmpdir"); 
    File tempRestoreFile = new File(tempDir + File.separator + "tempRestore"); 
    Connection connection = dataSource.getConnection(); 
    Statement statement = connection.createStatement(); 
    statement.execute("SCRIPT SIMPLE NODATA DROP TO '" + tempRestoreFile + "' CHARSET 'UTF-8'"); 
    statement.execute("RUNSCRIPT FROM '" + tempRestoreFile.getAbsolutePath() + "' CHARSET 'UTF-8'"); 
}