Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 快速XML到数据库_Android_Database - Fatal编程技术网

Android 快速XML到数据库

Android 快速XML到数据库,android,database,Android,Database,我想在我的数据库中插入一些xml数据。首先,我创建了一些对象的数组,并将这些对象传递给我的DBAdapter,以便通过事务将它们插入数据库中,如下面的insertArticles所示。现在我想在解析数据时直接插入数据,以避免在内存中创建对象数组。我看到的唯一方法是将SQLiteDatabase对象公开,并直接在XML解析器中进行事务处理。在我的DBAdapter之外有一些DB操作似乎不是很优雅 高效地将XML数据加载到数据库中的标准方法是什么 谢谢 public class DBAdapter

我想在我的数据库中插入一些xml数据。首先,我创建了一些对象的数组,并将这些对象传递给我的DBAdapter,以便通过事务将它们插入数据库中,如下面的insertArticles所示。现在我想在解析数据时直接插入数据,以避免在内存中创建对象数组。我看到的唯一方法是将SQLiteDatabase对象公开,并直接在XML解析器中进行事务处理。在我的DBAdapter之外有一些DB操作似乎不是很优雅

高效地将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();
        }
    }
}

根据我的经验,除非找不到更好的解决方案,否则不要将XML放入数据库

编辑:

首先,让我们来看一下您需要保持从某些Web服务接收信息的情况

第二,你希望你的数据足够简单,原始数据,删除所有垃圾

第三,您希望保持它们的持久性,安全地保护它

如果我是您,我将在从WebService接收XML数据时对其进行解析,创建一个类似于XML数据结构的数据库模式。下一步是将解析的信息映射到DB模式。 所以我可以从数据库中得到我想要的信息,而不是所有信息。当数据已经过滤成一段好的信息以供使用时,这是很好的


我想你已经知道这些东西和这个方法了。

我是从一个web服务中得到的。将其保存在内存中似乎很危险,因为系统可以随时删除它。拥有持久数据的更好选择是什么?