我認爲有代碼的方式,至少有一些很好的解決方法。H2 - 如何截斷所有表?
請考慮我不想刪除所有表格(我見過這個命令),只是爲了從它們中刪除行,但保留現有的模式和所有約束。
也許我可以以某種方式從元數據獲取所有表的列表,併爲每個分別應用TRUNCATE命令?但是他們的關係和外鍵呢?
任何想法?
我認爲有代碼的方式,至少有一些很好的解決方法。H2 - 如何截斷所有表?
請考慮我不想刪除所有表格(我見過這個命令),只是爲了從它們中刪除行,但保留現有的模式和所有約束。
也許我可以以某種方式從元數據獲取所有表的列表,併爲每個分別應用TRUNCATE命令?但是他們的關係和外鍵呢?
任何想法?
你可以這樣來做:
禁用引用完整性使用SET REFERENTIAL_INTEGRITY FALSE
獲取所有表的列表使用SHOW TABLES
從每個表刪除數據使用TRUNCATE TABLE tableName
啓用參照完整性使用SET REFERENTIAL_INTEGRITY TRUE
現在,我想出了這個解決方案...但仍然需要更徹底地測試它。
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'");
}