2012-01-03 2 views
3

SQLデータベースに挿入するときに多くの "重複行を挿入"しても問題ありませんか?それとも良い方法がありますか?重複行のDB挿入を意図的に失敗させても構いませんか?

私はここ..

を私のサーバーからの「コメント」をダウンロードし、私のAndroid携帯電話上のリストビューでそれらを表示していますが、私はそれを行う方法です。

1 - 私はリストビューを表示するたびに、私はフェッチサーバーからXMLを介し、最後の15件のコメントは...

2 - 私は電話でローカルSQLデータベースにコメントを挿入

3 - 私は地元からデータをロードするアダプタを使用してリストビューを更新SQLデータベース。

活動はonResumeに当たったとき、私は手順1、2と3を繰り返しています30秒ごとが..私はまた、手順1、2を繰り返し、3 ...

別のアンドロイドクライアントが新しいコメントをアップロードした場合を除き、サーバーからフェッチされたコメントはすべて重複していて、dbに挿入すると同じコメントの重複を許可しないためSQLConstraintExceptionが返されます。

これは問題ありませんか?私は30秒ごとに10-15行のこの例外をスローしています..パフォーマンスを傷つけることはないより良い方法はありますか?私は行が挿入の前に存在するかどうかを調べることはできません。なぜなら、それは確かに遅くなるからです。私はクエリを実行するときに変数をサーバに渡して、私の最新のコメントが何であるかを伝えます。

私は確信しています多くの多くは人がこの交差点に達しました。ここからどこへ行くべきですか?

discussonしてくれてありがとう。..

+0

あなたが取り込んでいるコメントの一意のキーをチェックすることを検討しましたか? –

答えて

2

サーバーのDBは、シーケンシャルを持っている場合は、増分キーは[はい、私は追加の条件に問い合わせるだろう「... AND SeqIdField> [私の最後のid]」。レコードが返されない場合は、タイマーをリセットして再度クエリを待つだけです。

シーケンシャルIDがなくても、特定の日付/時刻の後にレコードを挿入できる場合でも、日付/時刻が結果に含まれていることを確認し、最新のものをパラメータとして渡します。その日時をローカルデバイスに保存する必要がない/必要がない場合は、最新の場所を保存して、アプリが再び実行されたときにどこでバックアップを取るかを知ることができます。

+0

現時点では、クライアントがサーバーからの最後の15のコメントを要求しています(クライアントが既に受け取っているかどうかは関係ありません)。クライアントがまだ持っていない最後の15のコメントをリクエストするように提案しているようです。私は先に進んでこの変更を行うと思います。他に何もなければ、ネットワーク帯域幅を節約できます。同じ15のコメントを何度も繰り返しクライアントに送ります。乾杯〜 –

+0

OK、おそらく2つのクエリが必要です。まず、私が提案したように、あなたがまだ持っていないものをすべて取り出します。その結果が15行以上ある場合は、2番目のクエリを実行する必要はありません。 15行より少ない場合は、最初のクエリで最後に取得したレコードより古いものはすべて別のクエリを実行し、「TOP n」というキーワードを先頭に追加します.nは必要な行数です。これにより、ワイヤを介して送信されるレコードの数が最小限に抑えられます。 – Wade

関連する問題