INSERT SQLite数据最有效的方法

时间:2012-06-05 08:58:49

标签: android sqlite

首次安装时,我的应用必须缓存从网络获取的数据,并将行插入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 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

创建并连接到数据库

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

onCreate() - 这是我们需要编写create table语句的地方。在创建数据库时调用此方法。 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对象作为参数。我们需要使用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
}

请参阅此link的完整文章。

观看此video,这是一个简单的定义,如何创建表并将数据插入到android中。

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