2016-01-04 3 views
2

Я хотел бы создать базу данных в кеше, чтобы ее можно было стереть, когда пользователь нажимает кнопку Clear cache.Можно ли использовать SQLiteOpenHelper для создания БД в директории кеша?

Clear cache in Chrome browser

В SQLiteOpenHelper конструкторе есть только аргумент передать имя базы данных, а не каталог (по умолчанию dadabases).

Есть ли возможность удалить такую ​​БД, когда пользователь хочет очистить кеш?

+1

Http: //stackoverflow.com/a/20520666/1048340 –

+0

Не могли бы вы перевести этот комментарий, чтобы ответить на этот вопрос? – pixel

ответ

2

Вот пример создания базы данных в каталоге кэша:

public class CachedDatabase extends SQLiteOpenHelper { 

    public CachedDatabase(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { 
    super(context, new File(context.getCacheDir(), name).getAbsolutePath(), factory, version); 
    } 

    @Override public void onCreate(SQLiteDatabase db) { 
    // just for testing 
    db.execSQL("CREATE TABLE example (id INTEGER PRIMARY KEY AUTOINCREMENT, foo, bar, baz, qux)"); 
    } 

    @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

    } 

} 

Все, что вам нужно сделать, это пройти полный путь в качестве параметра имя в конструкторе.


Испытано просто чтобы убедиться, что он был создан в/данные/данные/[имя_пакета]/кэш:

CachedDatabase cachedDatabase = new CachedDatabase(this, "TEST", null, 1); 
SQLiteDatabase database = cachedDatabase.getWritableDatabase(); 
ContentValues values = new ContentValues(); 
values.put("foo", "foo"); 
values.put("bar", "bar"); 
values.put("baz", 123); 
values.put("qux", true); 
database.insert("example", null, values); 

Проверка по базе данных:

$ adb shell 
$ run-as [YOUR_PACKAGE_NAME] 
$ ls cache 
TEST 
TEST-journal 
-1

Если вы хотите, чтобы очистить данные в таблице db.execSQL("delete * from "+ TABLE_NAME);

вы также можете удалить таблицы db.delete("TABLE_NAME", null, null);

+0

Я хочу удалить содержимое (или БД), когда пользователь очищает данные в настройках приложения. – pixel

+0

Когда пользователь очищает данные в настройках приложения, все сохраненные данные приложения, такие как DB, sharedpreferences и т. Д., Автоматически очищаются. –

1

Вы можете создать и открыть базу данных в определенном месте, но вы должны использовать SQLiteDatabase класс (выберите один из методов openOrCreateDatabase): как вы упомянули, вы не можете создать базу данных по другому пути, используя предоставленный SQLiteOpenHelper.

Вы также можете изменить код SQLiteOpenHelper в соответствии с вашими потребностями. Возьмите исходный код из ссылки, скопируйте в новый класс своего проекта и измените метод getDatabaseLocked.

Вы также можете получить вдохновение от SQLiteAssetHelper.

Смежные вопросы