2014-11-20 58 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'"); 
}