我认为有代码的方式,至少有一些很好的解决方法。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'");
}