我想插入一些XML數據到我的數據庫。首先,我創建了一些我傳遞給我的DBAdapter的對象的數組,以便用事務將它們插入到數據庫中,如下面的insertArticles
所示。現在我想直接插入我的數據,同時解析它們,以避免在內存中創建對象數組。我看到這樣做的唯一方法是公開我的SQLiteDatabase對象並直接在我的XML解析器中創建事務。在我的DBAdapter之外有一些數據庫操作似乎不是很優雅。快速XML到數據庫
將XML數據有效載入數據庫的標準方式是什麼?
感謝
public class DBAdapter {
/* ... */
private DatabaseHelper mDbHelper;
private SQLiteDatabase mDb;
private static class DatabaseHelper extends SQLiteOpenHelper {
DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE_CAT);
}
@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 categories");
onCreate(db);
}
}
public DBAdapter(Context ctx) {
this.mCtx = ctx;
}
public DBAdapter open() throws SQLException {
mDbHelper = new DatabaseHelper(mCtx);
mDb = mDbHelper.getWritableDatabase();
return this;
}
public void close() {
mDbHelper.close();
}
public void insertArticles(List<Article> articles) {
mDb.beginTransaction();
try{
for(Article article : articles){
ContentValues initialValues = new ContentValues();
initialValues.put(KEY_EMID, article.id);
initialValues.put(KEY_TYPE_INFO, article.type_info);
initialValues.put(KEY_CATEGORY_ID, article.category_id);
initialValues.put(KEY_TITLE, article.title);
initialValues.put(KEY_INTRO, article.intro);
initialValues.put(KEY_URL_PIC, article.url_pic);
initialValues.put(KEY_URL_ARTICLE, article.url_article);
initialValues.put(KEY_DATE, article.date);
initialValues.put(KEY_USER_FIRSTNAME, article.user_firstname);
initialValues.put(KEY_USER_LASTNAME, article.user_lastname);
initialValues.put(KEY_NUM_COMMENTS, article.num_comments);
initialValues.put(KEY_CONTENT, article.content);
initialValues.put(KEY_IS_FAVORITE, 0);
String query = "SELECT " + KEY_NAME + " FROM " + DATABASE_TABLE_CAT + " WHERE " +
KEY_EMID + "=" + article.category_id;
Cursor cur = mDb.rawQuery(query, null);
if(cur.moveToFirst()){
initialValues.put(KEY_CATEGORY_NAME, cur.getString(0));
}
else{
initialValues.put(KEY_CATEGORY_NAME, mCtx.getResources().getText(R.string.menu_home).toString());
}
cur.close();
mDb.insert(DATABASE_TABLE_ART, null, initialValues);
}
mDb.setTransactionSuccessful();
} catch (SQLException e) {
mDb.endTransaction();
throw e;
} finally {
mDb.endTransaction();
}
}
}
我從網絡服務中獲得它。將它保存在內存中似乎很危險,因爲系統可以隨時刪除它。持久數據有什麼更好的選擇? – jul
我上面編輯過:) –