問題タブ [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.
android - Android で Room を使用しているときに実行時に SQLite データベースを再作成する方法
データベースを空にし、実行時に再作成したい。これをベースアクティビティで使用してデータベースを破壊しましたが、正常に実行されました
deleteDatabase(AppDatabase.getDATABASE_NAME());
次に、次のコードを使用してすべてのバックスタックをクリアし、起動アクティビティを開きました
Room経由でデータベースに挿入しようとすると、次のエラーがスローされます
android - Android Room Persistence ライブラリ: Upsert
Android の Room 永続化ライブラリには、オブジェクトまたはコレクションに対して機能する @Insert および @Update アノテーションが含まれています。ただし、データがデータベースに存在する場合と存在しない場合があるため、UPSERT が必要なユース ケース (モデルを含むプッシュ通知) があります。
Sqlite にはネイティブの upsert がなく、回避策はこのSO questionに記載されています。そこにあるソリューションを考えると、それらを Room にどのように適用しますか?
より具体的には、外部キーの制約に違反しない挿入または更新を Room に実装するにはどうすればよいですか? onConflict=REPLACE で挿入を使用すると、その行への外部キーの onDelete が呼び出されます。私の場合、 onDelete はカスケードを引き起こし、行を再挿入すると、外部キーを持つ他のテーブルの行が削除されます。これは意図した動作ではありません。