2011-07-22 20 views
0

私は、review_scheduleテーブルへの更新と挿入の両方を行っています。両方の時間に1秒から2秒の間がかかるようですが、少し遅いです。私は、idフィールドとdate_reviewフィールドにインデックスを設定して、それを使わずに試しました。挿入用にプリコンパイルされたステートメントを使用していますが、更新用ではないことに注意してください。なぜなら、更新用のコンパイル済みステートメントはGingerbreadではサポートされていないからです。コードは次のとおりです。AndroidでSQLiteアクセスを高速化するには

public long insert(int id, String lastReviewDate, String nextReviewDate) { 

    this.insertStmt.bindLong(1, id); 
    this.insertStmt.bindString(2, lastReviewDate); 
    this.insertStmt.bindString(3, nextReviewDate); 

    return this.insertStmt.executeInsert(); 

} 

public void updateSRSInfo(int id, String lastReviewDate, 
     String nextReviewDate) { 

    ContentValues contentValues = new ContentValues(); 
    contentValues.put("last_review_date", lastReviewDate); 
    contentValues.put("next_review_date", nextReviewDate); 
    this.myDataBase.update(DataBaseHelper.WORD_REVIEW_SCHEDULE, 
      contentValues, "_id=?", new String[] { Integer.toString(id) }); 

} 

ご了承ください。

+0

なぜdownvotes、みんな? –

+0

私は心配しません。私にも一度起こった。私はあなたが少なくとも外見上の形式で、よくフォーマットされ、質問された質問をdownvoteすれば、私たちが改善するのを助けるために少なくともコメントしなければならないと思います。あなたのことを思い出して、私はあなたの質問の解決に全く気づいていない、ちょうどあなたのために1つを追加して、あなたに幸運を願ってここに来た! – davidcesarino

+0

アプリケーションを応答不能にする手順の長さですか?その場合、操作を別のスレッドに移すことができます。 – mbwasi

答えて

1

アプリケーションを作成していないプロシージャの長さが応答しない場合は、操作を別のスレッドに移動できます。

+0

ありがとうございます。将来のGoogle社員にとっては、AsyncTaskを実装することをお勧めします。これは、Androidでのスレッド作成に推奨される方法です。 –

0

少なくとも二つのオプション:

1)デフォルトのSQLiteで遅いれ、コミットされたトランザクションのみを読み込んでいるので、コミットされていないトランザクションをお読みください。しかし、移動するすべてのリスクを理解する必要がありますreading uncommitted records。変更トランザクション分離レベルは、このような方法で行うことができます。

database.execSQL("PRAGMA read_uncommitted = true;"); 

2)すでにIDを持っているとして

0

をインデックステーブルを使用しContentUri.withAppendedIdとそれを組み合わせない理由を、あなたは、このレコードにアクセスすることができます直接。 私はこれをテストしていないので、これが速く実行されるかどうかは分かりません。

関連する問題