【问题标题】:Inserting data in SQLite Database vs using SharedPreferences in Android在 SQLite 数据库中插入数据与在 Android 中使用 SharedPreferences
【发布时间】:2017-10-28 00:49:29
【问题描述】:

我有一个关于在 sqlite (Android) 中插入数据的性能的小问题。我有以下结构的数据:

0 | 1

0 | 2

1 | 3

...

在某些情况下它们非常大(大约 50,000 行)。我想用 SQLite 管理数据,但不知何故,插入过程需要很长时间(将近 1 分钟)!如果我将它们保存在 SharedPreferences 中,它几乎会立即发生。

我的插入代码如下所示:

    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues values = new ContentValues();

    long id;
    db.beginTransaction();
    try{
        values.put(KEY_FRIENDIDONE,firstFriendID);
        values.put(KEY_FRIENDIDTWO,secondFriendID);
        values.put(KEY_CREATED_AT,getDateTime());

        System.out.println(firstFriendID+" "+secondFriendID);

        id= db.insertWithOnConflict(TABLE_FRIENDSHIPS,null,values,SQLiteDatabase.CONFLICT_IGNORE);
        db.setTransactionSuccessful();
    }finally {
        db.endTransaction();
    }

    return id;

所以我问自己是否应该使用 SharedPreferences 而不是 SQLite。

顺便说一句,ID 保存为整数。但是,如果我将它们保存为字符串,我现在不知道这是否会有所不同。

【问题讨论】:

  • 您是否尝试过在 1 个事务中插入 50000 个元素,而不是在 50000 个事务中?
  • @Sully SharedPreferences 不适用于您要求的大型数据集。 SQLite 查询有点烦人,但我们有很多第三方库来管理 Sqlite。 Ormlite 是最适合新手且易于理解的一种。
  • 我想知道,为什么会这样。我搜索了一个关于 android 中 sqlite 的示例教程,它们还循环了多个事务。所以插入一组数据总是比让有机会循环一个函数来添加一行数据更好?

标签: java android sqlite sharedpreferences


【解决方案1】:

实际上,您应该将 50.000 行插入到如下事务中:

db.beginTransaction();
for(i = 0 -> i = 50.000) doInsert();
// end trasaction here.

你应该看看GreenDao,它可以帮助你提高数据库管理和性能,比如:

friendsDao.insertTx(new Friends(id1,id2,time));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多