2017-01-27 2 views
0

настоящее время я использую следующий шаблон, когда доступ к моей базе данных SQLite (возможно, из разных потоков):SQLiteDatabase шаблон использования

try(SQLiteDatabase db = new MySqliteOpenHelper(context).getWritableDatabase()) { 
    ... 
} 

До сих пор я думал, что она была чистой и поточно-, но я получил некоторые сбои из-за на «База данных заблокирована».

Почему этот шаблон неправильный и как его изменить?

+0

Что такое MySqliteOpenHelper? Какую часть вы считаете безопасной? – Blackbelt

+0

@Blackbelt часть 'SQLiteOpenHelper' – fiddler

+0

@Blackbelt Или часть' SQLiteDatabase', возможно, – fiddler

ответ

1

MySqliteOpenHelper не является ни одной. Чтобы создать одноэлемент в этом классе, выполните следующие действия в MySqliteOpenHelper.

1 Добавление статической instance переменной типа MySqliteOpenHelper

2 Добавить метод под названием getInstance(Context) (тело, как показано ниже)

public synchronized static getInstance(Context context){ 
    if(instance == null){ 
     instance = new MySqliteOpenHelper(context); 
    } 
    return instance; 
} 

Это поточно как вы будете всегда использовать один объект.

+0

Но я читал, что 'SQLiteOpenHelper' должен обрабатывать безопасность потоков, не так ли? – fiddler

+0

Я никогда не читал ничего подобного, у вас есть источник? – Ryan

+0

http://stackoverflow.com/a/6675272/569558: «Вы используете методы SQLiteHelper, связанные с блокировкой, для обеспечения безопасности потоков». – fiddler

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