如何“扩展”SQLite数据库?

时间:2016-04-18 13:28:05

标签: android database

我正在构建一个Android应用程序,它从设备中收集所有联系信息(我相信,通过SQLite)。不幸的是,我需要一些来自互联网的额外信息,我想存储在提到的数据库中,以便能够在下次用户打开我的应用程序时查询(由我提供),所以即使没有网络连接,他也可以使用它。 我使用内容提供商获取联系方式。

完成此任务的最有效和相对简单的方法是什么?

1 个答案:

答案 0 :(得分:1)

您需要的是创建自己的内容提供商 - 使用SQLite作为您的存储技术。您需要创建一个扩展SQLiteOpenHelper的类 - 为onCreate(Database database)提供实现,并在那里指定SQL查询以根据需要创建表。例如:

public class YourDBHelper extends SQLiteOpenHelper {

    private static final String DATABASE_NAME = "yourDB.db";
    private static final int DATABASE_VERSION = 1;

    public YourDBHelper (Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
    @Override
    public void onCreate(SQLiteDatabase database) {
        //here you write the code to create the table as you desire:
        String query = "CREATE TABLE MoreContactInfo <your columns def>...";
        database.execSQL(query);
    }

    @Override
    public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {
        //do the upgrade (e.g drop and create table)
    }
}

现在要实现内容提供程序,请扩展ContentProvider类: public class YourContentProvider extends ContentProvider
YourContentProvider类的onCreate回调中,您实例化了SQLite-helper(即YourDBHelper):请参阅下面的示例:

...
  private YourDBHelper yourDatabase = null;
   @Override
    public boolean onCreate() {
        yourDatabase = new YourDBHelper(getContext());     
        return false;
    }

要插入数据,请覆盖插入方法,如下所示:

@Override
public Uri insert(Uri uri, ContentValues values) {
    //ideally you use URI-Matcher to figure out who to treat the insert     
    SQLiteDatabase sqlDB = yourDatabase.getWritableDatabase();

    long id = sqlDB.insert("<your-table-name-here>", null, values);     
    return Uri.parse("<your-content-provider-base-uri"> +"/"+id);

}

我知道这可能看起来很多,但我认为这是您需要做的,以便拥有自己的内容提供商,以便您在Android应用中以标准方式保存和检索数据。 如果您有兴趣,我会有代码漫游演示文稿here