相关疑难解决方法(0)

为SQLiteDatabase使用Singleton设计模式

我是Android上的新手,我正在开发一个简单的应用程序来获得一些基本的体验.我的应用程序非常简单,包括广播接收器和一些活动.这两个组件都使用单个数据库,因此从理论上讲,两者都可能同时尝试访问数据库.

目前我只是在每次需要时实例化db对象(它是一个SQLite数据库帮助程序类),并执行所需的操作:查询,插入等.

从我在这里和其他一些文档中读到的,这有一个问题是在同时访问db的情况下获得"db locked"异常,所以更好的方法是拥有这个db对象的单个实例所以所有组件始终使用相同的数据库连接.

以上推理是否正确?那么一个单身人士会成为一个足够好的解决方案吗?我知道一些纯粹主义者可能反对它,但请注意,这是一个相当简单的应用程序,所以我可以负担得起在其他情况下我不会做的事情.

否则,更好的选择是什么?我已经阅读过有关使用内容提供商的内容,但这对此来说太过分了,除此之外我对与其他活动共享数据不感兴趣.我确实读过这篇文章,发现它很有帮助.

java sqlite singleton android android-loadermanager

71
推荐指数
2
解决办法
4万
查看次数

Sqlite数据库实例线程是否安全

我有一个包含一些表的数据库.我想使用多个线程更新表.我将在所有线程中使用相同的SQLiteDatabase实例.

请建议这种方法是否正确.Sqlite数据库线程安全吗?两个不同的线程可以同时为不同的值集更新同一个表.

sqlite android locking thread-safety

31
推荐指数
2
解决办法
2万
查看次数

SQLiteDatabase多线程锁定模式

我使用此类来管理与底层SQLiteDatabase的连接

public class BasicDataSource {

    protected DatabaseHandler dbHelper;
    protected volatile SQLiteDatabase readable_database;
    protected volatile SQLiteDatabase writable_database;
    protected Object read_lock = new Object();
    protected Object write_lock = new Object();
    protected Context context;

    protected BasicDataSource(Context ctx) {
        dbHelper = DatabaseHandler.getInstance(ctx);
        getReadableDatabase();
        dbHelper.onCreate(getWritableDatabase());
        this.context = ctx;
    }

    public synchronized void close() {
        dbHelper.close();
    }

    protected void closeInsertHelpers(InsertHelper... helpers) {
        for (InsertHelper ih : helpers) {
            if (ih != null)
                ih.close();
        }
    }

    protected SQLiteDatabase getReadableDatabase() {
        synchronized (read_lock) {
            if (readable_database == null …
Run Code Online (Sandbox Code Playgroud)

java sqlite singleton multithreading android

10
推荐指数
1
解决办法
2万
查看次数