Androidルームデータベースの行数を制限する方法行の中で最も古いアイテムを削除し、最新のものを挿入する?ルームデータベースの行数を制限する
アイテムをデータベースに追加する際に標準クエリを推測していますか?
EDIT:最大行数が20になるようにデータベーステーブルを制限したい場合は、最も古い項目を削除し、現在の行数を20にして新しい項目を挿入します。
Androidルームデータベースの行数を制限する方法行の中で最も古いアイテムを削除し、最新のものを挿入する?ルームデータベースの行数を制限する
アイテムをデータベースに追加する際に標準クエリを推測していますか?
EDIT:最大行数が20になるようにデータベーステーブルを制限したい場合は、最も古い項目を削除し、現在の行数を20にして新しい項目を挿入します。
は、この手順に従います。
1>カウントは最も古い記録に取得する>より20(より大きい)であれば、そのテーブル
your_count = SELECT count(*) FROM table_name;
2>の行数を取得
SELECT *
FROM table_name
ORDER BY entry_Date ASC
LIMIT 1;
3>今これらの選択されたレコードが
4>新しい件のデータ
を挿入、削除注:複数のエントリを挿入する場合、ループでこれを置くよりも、
を確認してください。答え更新@ x10sion –
は、私はあなたがにデータを挿入することができると思いますあなたのテーブルは、その後、最後の20(制限)を除くすべての行を削除します
削除するには、次のクエリを使用することができます
この場合ID NOT IN(IDのDESCのLIMIT 20によってtableNameの順序とIDを選択)
tableNameのFROM DELETE、IDが自動インクリメントに設定されているプライマリ・キーです。
があなたのテーブルが
create table example_table (
ts timestamp,
uid number(19),
some_other_field varchar(64)
);
され、手動でいくつかのクエリを実行している気にする必要はありません:あなたはと仮定すると、日付
OPは25行以上*を保持しようとしましたが、実際には* 25行まで削除*します。 –
ありがとう、私は私の答えを更新しました。 – Kunu
によってそれらを格納している場合は、同様にキーとして日付を使用することができます。
使用データベースはトリガー:
create trigger
if not exists -- I don't actually know if you DB will support this line.
-- Might want to remove it if it's not.
example_table_limiter
on example_table
after insert
begin
delete
from example_table
where ts in (
select ts
from example_table
order by ts
limit -1 -- we don't want to limit how many rows we want to delete
offset 25 -- but we want to offset query result so it leaves 25 rows in table
);
end;
構文はthis answerに触発された "制限なしオフセット"。 Javaであなたのトリガーを有効にするには
:あなたはSQLiteOpenHelper
を上書きすることができ
シンプルアンドロイド、:
public class DataBaseSchemaHelper extends SQLiteOpenHelper {
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(<trigger string from above>);
}
}
のAndroid館内バージョン:
public MyDatabase extends RoomDatabase {
@Override
public void init(DatabaseConfiguration _config) {
super.init(_config);
getOpenHelper().getWritableDatabase().execSQL(<trigger string from above>);
}
}
imは、SQLデータベース – x10sion
@ x10sionを処理するためにAndroid Roomを使用していますが、ちょっと別の場所でもまだ実行できます。私はそれを私の答えに加えます。 –
@ x10sion、それはあなたのために働いたのですか? (私はRoom自身に本当に精通していない)。 –
は、あなたがしたい...あなたが欲しいものを説明データベースの行に制限を設定し、新しいデータを追加したいときにすべての行に古いデータがある場合は、データベースに最初の行の新しいデータを追加しますか?またはデータを設定する特定の行を選択しますか? –
@MohamedNagyMostafa edit – x10sion
okey ..を参照してください。私はあなたが最初に行うことができる2つの方法について考えています。新しいデータを1から20まで連続的に挿入するテクニックを教えてください。それはあなたのプログラム中に行を削除しようとしていない良い方法です。任意の行を削除した場合、最良のアルゴリズムは、削除された行に新しいデータを設定することです。 プログラムで行を削除している場合は、日付を挿入する列を使用する必要があります。次に、並べ替え順にデータを取得してチェックできます。 あなたのためにどちらが良いかを教えてください。詳しくは –