summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jeff Brown <jeffbrown@google.com> 2012-03-02 11:15:41 -0800
committer Android (Google) Code Review <android-gerrit@google.com> 2012-03-02 11:15:41 -0800
commitd2cca91e92d9988898a7579e418c00b65d429d46 (patch)
tree5be2aec0058d11b2701ab6e205d403dc72c0f7af
parentdb3c6b8c0d3cde8323f962bb285d7735f698a363 (diff)
parent79087e4b967d8af26c488c41b8c1a087a12da84d (diff)
Merge "Add an API for deleting databases."
-rw-r--r--api/current.txt1
-rw-r--r--core/java/android/app/ContextImpl.java2
-rw-r--r--core/java/android/database/sqlite/SQLiteDatabase.java35
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.
*