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トランザクションを使用してレコードの挿入を実行します。プロセス全体が驚くほどスピードアップします。単一の挿入を(一度に1つずつ)実行すると、SQLiteは各挿入をトランザクションとして扱い、実行ごとにジャーナルファイルを作成する必要があるためです(これには時間がかかります)。ただし、すべての追加/編集/削除クエリを1つのトランザクションにバインドすると、トランザクションの終了時に1つのジャーナルファイルのみが作成されるため、SQLiteはクエリを迅速に実行します。

于 2012-06-05T09:01:21.463 に答える
0

操作全体をトランザクションでラップします。これだけで、速度が大幅に向上するだけでなく、トランザクション動作のメリットも得られます。

于 2012-06-05T09:02:25.023 に答える
0

メソッドを使用する必要がありますbulkInsert。コードはSQLiteContentProviderから取得できます。必要に応じて変更してください。

于 2012-06-05T09:10:41.750 に答える
0

データベースの作成と接続

最初に android.databse.sqlite.SQLiteDatabase をアプリケーションにインポートします。次に、openOrCreateDatabase() メソッドを使用して、データベースを作成または接続します。Sqlite ドキュメント

onCreate() – これらは、create table ステートメントを記述する必要がある場所です。これは、データベースの作成時に呼び出されます。onUpgrade() – このメソッドは、テーブル構造の変更、データベースへの制約の追加など、データベースがアップグレードされたときに呼び出されます。

public class DatabaseHandler extends 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
}

このリンクについては、記事全文を参照してください。

簡単な定義であるこのビデオを見て、テーブルを作成し、Android にデータを挿入する方法をご覧ください。

最後に、Android SQLite : Insert, Update, Delete and Display Data( Link ) をお見逃しなく。

于 2012-06-05T10:59:57.653 に答える