如何从数组资源填充数据库?

时间:2011-04-17 01:38:23

标签: java android sqlite

在/values/arrays.xml中,我有一个数组,其中包含我想要插入到sqlite db中的值。

在onCreate中,我正在尝试获取该数组并运行for循环,直到i =数组的长度,然后使用db.execSQL(“INSERT INTO ...或者可能是initialValues.put(...

但是,我似乎无法在onCreate中使用getResources(),所以我甚至不确定这是否可行。有人知道怎么做才最好吗?

3 个答案:

答案 0 :(得分:0)

这似乎有你的追求: http://developer.android.com/guide/topics/resources/string-resource.html#StringArray

保存在res / values / strings.xml的XML文件:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="planets_array">
        <item>Mercury</item>
        <item>Venus</item>
        <item>Earth</item>
        <item>Mars</item>
    </string-array>
</resources>

Resources res = getResources();
String[] planets = res.getStringArray(R.array.planets_array);

然后正常循环

答案 1 :(得分:0)

如果我直截了当,你试图从dbAdapter添加这些初始值。我认为没有理由不将此程序移至主类。我喜欢保持dbAdapter的方法与数据库的创建/读/写严格相关,然后我填充主Activity中的列表。您也可以直接访问资源。

作为性能增强器,您应该尝试在一个语句中插入所有记录,例如

db.rawQuery("INSERT INTO tableName(column1, column2) VALUES (valA1, valA2), (valB1, valB2) ....

您可以在迭代数组时通过简单的String操作生成此查询字符串。祝好运! : - )

答案 2 :(得分:0)

我需要做同样的事情。我假设你知道如何创建扩展SQLiteOpenHelper的数据库助手类,所以我不会进入那个。这用于在安装应用程序时创建或更新数据库。调用此类时,将Context传递给它。创建另一个类级变量来保存上下文,然后在构造函数中初始化它。然后使用上下文getResources()从中获取数组以填充数据库。

private static class DatabaseHelper extends SQLiteOpenHelper {

    private final Context fContext;

    // constructor
    DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        fContext = context;
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE " + TABLE_NAME + " ("
                + FIRST_COLUMN + " INTEGER PRIMARY KEY,"
                + SECOND_COLUMN + " TEXT NOT NULL,"
                + THIRD_COLUMN + " INTEGER,"
                + FOURTH_COLUMN + " TEXT NOT NULL"
                + ");");

        // Initialize the db with values from my_array.xml
        final int DEFAULT_THIRD_COLUMN = 1;
        final String DEFAULT_FOURTH_COLUMN = "";
        ContentValues values = new ContentValues();
        Resources res = fContext.getResources();
        String[] myArray = res.getStringArray(R.array.my_array);
        for (String item : myArray){
            values.put(SECOND_COLUMN, item);
            values.put(THIRD_COLUMN, DEFAULT_THIRD_COLUMN);
            values.put(FOURTH_COLUMN, DEFAULT_FOURTH_COLUMN);
            db.insert(TABLE_NAME, null, values);
        }
    }

    @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 " + TABLE_NAME);
        onCreate(db);

    }
}

有关更多帮助,请参阅this link

相关问题