首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要在线程中升级SQLite,如何升级,在哪里升级?

问需要在线程中升级SQLite,如何升级,在哪里升级?
EN

Stack Overflow用户
提问于 2012-11-20 21:21:05
回答 1查看 401关注 0票数 3

我在我所有的应用程序中都在使用SQLiteOpenHelper (如下所示),非常愉快。多年来,许多对现有数据库的升级都以成功告终。

这一次,我需要在我的一个应用程序中升级数据库,这一步将持续一段时间。所以我需要把这些升级语句放在它们自己的线程中。

最好的地方是什么?

任何帮助都是非常感谢的。

代码语言:javascript
复制
public class MySQLiteOpenHelper extends SQLiteOpenHelper {

    protected static final Object lock = new Object();

    private static final int DATABASE_NAME = "mydatabase.db";
    private static final int DATABASE_VERSION = 3;

    private Context context;
    private SQLiteDatabase database;

    public MySQLiteOpenHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);

        this.context = context;
    }

    @Override
    public void onCreate(SQLiteDatabase database) {
        synchronized (lock) {
            this.database = database;

            // Create database statements
        }
    }

    @Override
    public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {
        synchronized (lock) {
            this.database = database;

            switch (newVersion) {
                case DATABASE_VERSION:
                    switch (oldVersion) {
                        case 1:
                            upgradeFrom1To2();
                        case 2:
                            upgradeFrom2To3();
                    }

                    break;
            }
        }
    }

    private void upgradeFrom1To2() {
        // Upgrade database statements
    }

    private void upgradeFrom2To3() {
        // Upgrade database statements
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-21 02:46:14

我将代码放在IntentService中,这是为长时间运行的操作实现后台线程的一种简单方法,尤其是保存数据的操作。如果需要,使用广播意图将状态从IntentService发送到其他组件,并使用BroadcastReceiver接收这些意图。

我真的会避免在活动中用AsyncTask来做这件事;有太多的风险会导致操作被终止。无论如何,AsyncTask比IntentService复杂得多。

注意: IntentService不持久化任何内容,包括它的类字段。为了保护您自己,您可能希望将状态存储在SharedPreferences中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13474132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档