在/values/arrays.xml中,我有一个数组,其中包含我想插入到sqlite数据库中的值。
在onCreate中,我试图获得该数组并运行for循环,直到I =数组的长度,然后使用db。execSQL("插入……或者initialValues.put(…
然而,我似乎不能在onCreate中getResources(),所以我甚至不确定这是否会起作用。有人知道怎么做最好吗?
这似乎有你想要的: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);
那么就像平常一样循环遍历
如果我弄明白了,您正在尝试从dbAdapter添加这些初始值。我认为没有理由不把这个过程移到主类中。我喜欢保持dbAdapter的方法严格与数据库的创建/读/写相关,然后我在主活动中填充列表。您也可以直接访问这些资源。
作为性能增强器,您应该尝试在一个语句中插入所有记录,例如
db.rawQuery("INSERT INTO tableName(column1, column2) VALUES (valA1, valA2), (valB1, valB2) ....
你可以在迭代数组的同时通过简单的String操作来创建这个query-String。好运!: -)
我需要做同样的事情。我假设您知道如何创建扩展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);
}
}
查看链接获取更多帮助: