読者です 読者をやめる 読者になる 読者になる

とりあえず移転してみました

ニュースねたや、IT系の記事を書いていくつもり・・・ですが、どうなるかわかりません。まあ、とりあえず やってみます。

android SQLiteでの重複データの扱い

androidでは、データベースとしてSQLiteが使うことができる。ライブラリを使えば色々なDBも使えるのだけど、それほどデータがない場合などでは、SQLiteで十分でしょう。

今回はまったのは、重複データの扱い。WEBアクセスをした結果を必要な部分だけ抽出してDBに保管するのだけど、毎回データが更新されるわけではないので、同じデータの場合もある。
それをDBには記録させたくない・・・

最初に考えたのは、DB上に同じデータがあるか?比較して、なければ書き込み。あれば何もしないというフロー。

考えただけで大変そうな気がする。そこで、色々と調べてみてもDBによってはMARGEというコマンドとかあるようだけど、SQLiteにはない。
困った・・・

DBにアクセスするのは、レコードを1件ずつ取得するので、レコードの読み込み => データと比較 => 書き込みorそのまま とい処理をレコードの数だけ実行することになる。

DBのテーブル設定で、uniqueを使えば同じ内容の書き込みが制限できるというで、これを活用することにした。実際には、2つの項目が同じ場合は書き込みをしないという設定。

例えば・・・アクセスした人のIDと時間。

create table Table (_id integer primary key autoincrement,name TEXT,time TEXT,unique(name,time))

こんな感じで、テーブルを作成。

nameとtimeが同じ場合は、データへの書き込みが行われなかった。