Android预填充数据库

Android Pre-Populated Database

本问题已经有最佳答案,请猛点这里访问。

我正在开发一个Android应用程序,在用户可以使用该应用程序之前,需要在该应用程序的数据库中填充几个条目(一个表,1000-10000行)。 我查看了一些教程,我不确定最好的方法。 我是否应该每次启动应用程序时检查数据库是否存在,如果不存在,请创建它并插入我需要的数千条记录? 或者有更好的方法来处理这个问题吗? 理想情况下,它可以作为应用程序安装过程的一部分包含在内,但我不确定这是否可行。 任何反馈将不胜感激。


下面是如何创建和填充数据库的示例,您可以在应用安装上执行此操作,这只会创建一个条目,因此可能对您要执行的操作效率低下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
private static class settingsDatabaseHelper extends SQLiteOpenHelper{

    //SQL String for creating the table required
    private static final String CREATE_SETTINGS_TABLE
    ="CREATE TABLE tbl_settings(" +
           "_ID INTEGER PRIMARY KEY AUTOINCREMENT," +
           "VOIPUSERNAME TEXT," +
           "VOIPAUTHID TEXT," +
           "PASSWORD TEXT," +
           "VOIPDISPLAYNAME TEXT," +
           "SIPPROXYSERVER TEXT," +
           "SIPREGISTRAR TEXT," +
           "SIPREALM TEXT," +
           "EXPIRESTIME INTEGER);";    

    //constructor
    public settingsDatabaseHelper(Context context, String name,
            CursorFactory factory, int version) {
        super(context, name, factory, version);

    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_SETTINGS_TABLE);
         ContentValues initialValues = new ContentValues();
            initialValues.put("VOIPUSERNAME","xxxxx");
            initialValues.put("VOIPAUTHID","xxxxxxxxxx");
            initialValues.put("PASSWORD","xxxxxx");
            initialValues.put("VOIPDISPLAYNAME","xxxxxxxxx");
            initialValues.put("SIPPROXYSERVER","xxxxxxxxxxxxx");
            initialValues.put("SIPREGISTRAR","xxxxxxxxxxx");
            initialValues.put("SIPREALM","xxxxxxxxxx");
            initialValues.put("EXPIRESTIME", xxxxxxxxxxx);
            Log.d("1.6","gets to here");
            db.insert(SETTINGS_TABLE, null, initialValues);

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.w(TAG,"Upgrading database from version" + oldVersion +" to" +
                 newVersion +", which will destroy all old data");

        db.execSQL("DROP TABLE IF EXISTS" + SETTINGS_TABLE);
        onCreate(db);

    }

}

//end helper class
}


我要去的方式是在assets文件夹中发送预先填充的数据库。 您可以在那里放入文件并按原样使用它们。 但请注意,大小限制为1MB,因此您可能需要拆分文件或压缩它们。

压缩是非常方便的,并且得到了os本身的良好支持。

希望这有任何帮助:-)


SQLiteOpenHelper中的JavaDoc:

A helper class to manage database
creation and version management. You
create a subclass implementing
onCreate(SQLiteDatabase),
onUpgrade(SQLiteDatabase, int, int)
and optionally onOpen(SQLiteDatabase),
and this class takes care of opening
the database if it exists, creating it
if it does not, and upgrading it as
necessary. Transactions are used to
make sure the database is always in a
sensible state.

For an example, see the
NotePadProvider class in the NotePad
sample application, in the samples/
directory of the SDK.

因此,如果你扩展这个类,你有3个方法在某些情况下会调用,你可以选择,做什么。
这是最好的做法:)