問題タブ [android-architecture-components]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
1324 参照

android - Android で Room を使用しているときに実行時に SQLite データベースを再作成する方法

データベースを空にし、実行時に再作成したい。これをベースアクティビティで使用してデータベースを破壊しましたが、正常に実行されました deleteDatabase(AppDatabase.getDATABASE_NAME());

次に、次のコードを使用してすべてのバックスタックをクリアし、起動アクティビティを開きました

Room経由でデータベースに挿入しようとすると、次のエラーがスローされます

0 投票する
12 に答える
66226 参照

android - Android Room Persistence ライブラリ: Upsert

Android の Room 永続化ライブラリには、オブジェクトまたはコレクションに対して機能する @Insert および @Update アノテーションが含まれています。ただし、データがデータベースに存在する場合と存在しない場合があるため、UPSERT が必要なユース ケース (モデルを含むプッシュ通知) があります。

Sqlite にはネイティブの upsert がなく、回避策はこのSO questionに記載されています。そこにあるソリューションを考えると、それらを Room にどのように適用しますか?

より具体的には、外部キーの制約に違反しない挿入または更新を Room に実装するにはどうすればよいですか? onConflict=REPLACE で挿入を使用すると、その行への外部キーの onDelete が呼び出されます。私の場合、 onDelete はカスケードを引き起こし、行を再挿入すると、外部キーを持つ他のテーブルの行が削除されます。これは意図した動作ではありません。