Android预填充数据库

时间:2010-03-09 12:57:15

标签: database android

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

4 个答案:

答案 0 :(得分:20)

这个链接有很好的答案Ship an application with a database

答案 1 :(得分:3)

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

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

希望这有任何帮助: - )

答案 2 :(得分:3)

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

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
}

答案 3 :(得分:1)

来自SQLiteOpenHelper的JavaDoc:

  

管理数据库的助手类   创建和版本管理。您   创建一个子类实现   的onCreate(SQLiteDatabase),   onUpgrade(SQLiteDatabase,int,int)   以及可选的onOpen(SQLiteDatabase),   这个班负责开放   数据库是否存在,创建它   如果没有,并将其升级为   必要。交易用于   确保数据库始终在   明智的状态。

     

例如,请参阅   NotePad中的NotePadProvider类   示例应用,在样本中/   SDK的目录。

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