diff options
| author | 2012-03-02 11:15:41 -0800 | |
|---|---|---|
| committer | 2012-03-02 11:15:41 -0800 | |
| commit | d2cca91e92d9988898a7579e418c00b65d429d46 (patch) | |
| tree | 5be2aec0058d11b2701ab6e205d403dc72c0f7af | |
| parent | db3c6b8c0d3cde8323f962bb285d7735f698a363 (diff) | |
| parent | 79087e4b967d8af26c488c41b8c1a087a12da84d (diff) | |
Merge "Add an API for deleting databases."
| -rw-r--r-- | api/current.txt | 1 | ||||
| -rw-r--r-- | core/java/android/app/ContextImpl.java | 2 | ||||
| -rw-r--r-- | core/java/android/database/sqlite/SQLiteDatabase.java | 35 |
3 files changed, 37 insertions, 1 deletions
diff --git a/api/current.txt b/api/current.txt index f3111a6959de..95c7a316ce1c 100644 --- a/api/current.txt +++ b/api/current.txt @@ -7276,6 +7276,7 @@ package android.database.sqlite { method public android.database.sqlite.SQLiteStatement compileStatement(java.lang.String) throws android.database.SQLException; method public static android.database.sqlite.SQLiteDatabase create(android.database.sqlite.SQLiteDatabase.CursorFactory); method public int delete(java.lang.String, java.lang.String, java.lang.String[]); + method public static boolean deleteDatabase(java.io.File); method public boolean enableWriteAheadLogging(); method public void endTransaction(); method public void execSQL(java.lang.String) throws android.database.SQLException; diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java index 6d5cce5efdc3..e348b87c4965 100644 --- a/core/java/android/app/ContextImpl.java +++ b/core/java/android/app/ContextImpl.java @@ -785,7 +785,7 @@ class ContextImpl extends Context { public boolean deleteDatabase(String name) { try { File f = validateFilePath(name, false); - return f.delete(); + return SQLiteDatabase.deleteDatabase(f); } catch (Exception e) { } return false; diff --git a/core/java/android/database/sqlite/SQLiteDatabase.java b/core/java/android/database/sqlite/SQLiteDatabase.java index 515658fddf31..2f3dc066a1df 100644 --- a/core/java/android/database/sqlite/SQLiteDatabase.java +++ b/core/java/android/database/sqlite/SQLiteDatabase.java @@ -36,6 +36,7 @@ import android.util.Printer; import dalvik.system.CloseGuard; import java.io.File; +import java.io.FileFilter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -678,6 +679,40 @@ public class SQLiteDatabase extends SQLiteClosable { } /** + * Deletes a database including its journal file and other auxiliary files + * that may have been created by the database engine. + * + * @param file The database file path. + * @return True if the database was successfully deleted. + */ + public static boolean deleteDatabase(File file) { + if (file == null) { + throw new IllegalArgumentException("file must not be null"); + } + + boolean deleted = false; + deleted |= file.delete(); + deleted |= new File(file.getPath() + "-journal").delete(); + deleted |= new File(file.getPath() + "-shm").delete(); + deleted |= new File(file.getPath() + "-wal").delete(); + + File dir = file.getParentFile(); + if (dir != null) { + final String prefix = file.getName() + "-mj"; + final FileFilter filter = new FileFilter() { + @Override + public boolean accept(File candidate) { + return candidate.getName().startsWith(prefix); + } + }; + for (File masterJournal : dir.listFiles(filter)) { + deleted |= masterJournal.delete(); + } + } + return deleted; + } + + /** * Reopens the database in read-write mode. * If the database is already read-write, does nothing. * |