出于单元测试的目的,我需要完全重置/清除 SQLite3 数据库。运行测试套件时,所有数据库都是在内存中创建的,而不是在文件系统上创建的,因此我无法删除任何文件。此外,一个类的多个实例将同时引用数据库,因此我不能只在内存中创建一个新数据库并将其分配给一个变量。
目前,我清除数据库的解决方法是读取所有表名sqlite_master并删除它们。但这与完全清除数据库不同,因为元数据和其他我不理解的东西可能会保留。
是否有一种干净简单的方法(例如单个查询)来清除 SQLite3 数据库?如果不是,必须对现有数据库执行什么操作才能使其与全新数据库相同?
如果相关的话,我将 Ruby 2.0.0 与sqlite3-ruby版本 1.3.7 和 SQLite3 版本 3.8.2 一起使用。
Ber*_*mos 11
这无需删除文件且无需关闭数据库连接即可工作:
PRAGMA writable_schema = 1;
DELETE FROM sqlite_master;
PRAGMA writable_schema = 0;
VACUUM;
PRAGMA integrity_check;
Run Code Online (Sandbox Code Playgroud)
如果可以直接调用 C API,另一种选择是使用SQLITE_DBCONFIG_RESET_DATABASE:
PRAGMA writable_schema = 1;
DELETE FROM sqlite_master;
PRAGMA writable_schema = 0;
VACUUM;
PRAGMA integrity_check;
Run Code Online (Sandbox Code Playgroud)
这是参考
| 归档时间: |
|
| 查看次数: |
37936 次 |
| 最近记录: |