2

データベースをサーバーと同期するため、独自のコンテンツ プロバイダーを実装しています。私のデータは SQLiteDatabase に格納されており、一部のテーブルには複合主キー (2 つの列、それぞれが別のテーブルへの外部キー) があります。

私はコンテンツ プロバイダーを使い始めたばかりで、それらがどのように機能するかはよくわかりませんが、グーグルで少し調べたので、テーブルの名前とその主キーを定義する必要があります。

uriMatcher.addURI(PROVIDER_NAME, "books", BOOKS);
uriMatcher.addURI(PROVIDER_NAME, "books/#", BOOK_ID);

私が理解しているように、URI .../books/1 を使用すると、主キー「1」で Book にアクセスします。問題は、複合主キーで機能するかどうかです。もしそうなら、URIはどうなりますか?

ありがとうございました!

4

1 に答える 1

1

データベースをサーバーと同期するため、独自のコンテンツプロバイダーを実装しています。

ContentProviderデータベースをサーバーと同期するためにを使用する必要はありません。

問題は、それが化合物の主キーで機能するかどうかです。

簡単ではありません。ドキュメントの引用:

テーブルデータには、プロバイダーが各行の一意の数値として保持する「主キー」列が常に含まれている必要があります。

主キーとして_id使用する別の列(通常は名前が付けられます)を追加できます。ContentProvider列を使用する場合、AUTOINCREMENT自分で値を割り当てる必要はありません。つまりContentProvider、インスタンスが必要な場合を除いて、ほとんどすべての点でこの列を無視できますUri

これを避けて、Uri次のようなcontent://your.authority.goes.here/table/key1/key2ものを使用してください。ただし、これは機能せずCursorAdapter、フレームワーク内の他のさまざまな場所で数値IDパターンが想定される場合があります。

于 2012-06-18T16:11:28.400 に答える