0

首次安装时,我的应用程序必须缓存从网络获取的数据,并将行插入 SQLite 数据库。我最终得到了大约 700 个插入,这至少需要 15 秒。目前我的逻辑如下(伪):

ScrollThroughAllObjects(){
    if(objectDoesNotExist){
        cacheObject();
    }
}

cacheObject(Object ob){
    ContentValues values = new ContentValues();
    values.put(KEY_ID, ob.getId);
    // add lots more values
    return mDb.insert(DATABASE_TABLE, null, values);
}

有没有更有效、更快的方法来处理这个插入?

4

4 回答 4

6

使用SQLite Transaction执行记录插入。它将惊人地加快整个过程;因为当您执行单个插入(一次一个)时,SQLite 将每个插入视为一个事务,并且需要为每次执行创建日志文件(这需要时间)。但是,当您将所有添加/编辑/删除查询绑定到单个事务时,在整个事务结束时只会创建一个日志文件,从而导致 SQLite 快速执行查询。

于 2012-06-05T09:01:21.463 回答
0

你应该使用bulkInsert方法。您可以从SQLiteContentProvider获取代码。根据您的需要对其进行修改。

于 2012-06-05T09:10:41.750 回答
0

创建并连接到数据库

首先将 android.databse.sqlite.SQLiteDatabase 导入您的应用程序。然后使用 openOrCreateDatabase() 方法创建或连接到数据库。Sqlite 文档

onCreate() – 这是我们需要编写创建表语句的地方。这在创建数据库时调用。onUpgrade() - 当数据库升级时调用此方法,例如修改表结构,向数据库添加约束等,

公共类 DatabaseHandler 扩展 SQLiteOpenHelper {

// All Static variables
// Database Version
private static final int DATABASE_VERSION = 1;

// Database Name
private static final String DATABASE_NAME = "contactsManager";

// Contacts table name
private static final String TABLE_CONTACTS = "contacts";

// Contacts Table Columns names
private static final String KEY_ID = "id";
private static final String KEY_NAME = "name";
private static final String KEY_PH_NO = "phone_number";

public DatabaseHandler(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

// Creating Tables
@Override
public void onCreate(SQLiteDatabase db) {
    String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "("
            + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT,"
            + KEY_PH_NO + " TEXT" + ")";
    db.execSQL(CREATE_CONTACTS_TABLE);
}

// Upgrading database
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // Drop older table if existed
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS);

    // Create tables again
    onCreate(db);
}

插入记录

Android 附带了一系列简化数据库使用的类。使用 ContentValues 实例创建一系列表字段来匹配将传递给 insert() 方法的数据。Android 为更新和删除记录创建了类似的方法。

addContact()方法接受联系人对象作为参数。我们需要使用 Contact 对象构建 ContentValues 参数。一旦我们在数据库中插入数据,我们需要关闭数据库连接。

    // Adding new contact
public void addContact(Contact contact) {
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(KEY_NAME, contact.getName()); // Contact Name
    values.put(KEY_PH_NO, contact.getPhoneNumber()); // Contact Phone Number

    // Inserting Row
    db.insert(TABLE_CONTACTS, null, values);
    db.close(); // Closing database connection
}

请参阅此链接的完整文章。

观看这个视频,它是简单的定义,如何创建表并将数据插入到 android。

最后不要错过这个,Android SQLite:插入、更新、删除和显示数据(链接)。

于 2012-06-05T10:59:57.653 回答
0

将整个操作包装在一个事务中。仅此一项就可以极大地提高您的速度,并为您带来交易行为的好处。

于 2012-06-05T09:02:25.023 回答