既に作成されたアプリの機能を含むライブラリを作成しようとしています。古いアプリは、複雑な sqlite データベースを使用しています。古いデータベースをコンテンツ プロバイダーのバックエンドとして再利用しようとしていますが、自分がやろうとしていることの "ベスト プラクティス" とは何か、さまざまな例 ( this、this、およびその他)を適応させる方法がわかりません。私は自分の状況に気づきました。
このデータベース構造があるとします
+------+-------------+-------------+-------------+
| Root | Folder | Item | Subitem |
+------+-------------+-------------+-------------+
| _id | _id | _id | _id |
| uuid | parent_uuid | parent_uuid | parent_uuid |
| | uuid | uuid | uuid |
| | name | name | name |
| | data | data | data |
+------+-------------+-------------+-------------+
Root->Folder->Item->Subitem
以前は、parent_uuid などのパラメーターを受け取る関数呼び出しを提供する DbAdapter クラスを使用し、関数内のすべての SQL クエリを処理し、結果を含むカーソルを返しました。
関数スタブの例:
- get_items_by_parent_uuid(folder_uuid)
- get_item_by_uuid(uuid)
- サブアイテムも同じ
複雑なクエリ
- get_items_for_root(root_uuid)
- アイテムの uuid、アイテム名、アイテム データ、フォルダ名を含むカーソルを返します
- get_items_with_subitem_count(folder_uuid)
- アイテム uuid、アイテム名、アイテム データ、サブアイテムの数を含むカーソルを返します。subitem.parent_uuid == item.uuid
上記の機能を 1 で提供する最良の方法がわかりませんContentProvider
。誰かに大量のコードを書いてもらう必要はありません (ただし、書いていただいても構いません)。上記のリンクされた例を変更してこれらのことを行う方法を誰かに理解してもらいたいだけです。例を理解してください。現在のニーズに翻訳するには不十分です。
TL;DR; - 複数のテーブルを処理し、一意の識別子として _id に依存せず、内部選択/クエリ ( など)ContentProvider
を持つ可能性のある選択と共に結合を処理する単一のテーブルを作成するにはどうすればよいですか?select count(*)