2

この回答を見て、ROWIDの単なるエイリアスである列を持つテーブルを実際に作成する方法を考え出そうとしていました. 一部のAndroidクラスでは「_id」という名前の一意の列が必要ですが、その列をPRIMARY KEYにしたくないので、これを行いたいと思います。PK ではない col で AUTO_INCREMENT を使用することはできないので、_id をエイリアスにしたいだけです。クエリでそれを実行できることはわかっていますが、それは私の状況では実用的ではありません。ポインタはありますか?これは可能ですか?

ありがとう :)

編集:本当に私は自分のPKを持ちたいだけでなく、CursorAdaptersが正しく動作するためのidフィールドも持ちたいなど

編集: Do i have to use _ID as a SQlite primary key? を見てください。それはINTでなければなりませんか?(Android Dev) PK も数値型の場合はクエリで実行することをお勧めしますが、PK に使用する TEXT 列の場合はどうなりますか? (ここで声に出して考えているようなものです)-CursorAdaptorをコピーして、_id colのlongの代わりにgetStringを使用できると思います(さらに、PKとして使用するcolの名前をカーソルアダプターに渡し、_idを取り除きます!)または、SELECT で _id として ROWID のエイリアスを追加するだけですが、少しハッキーに感じます...

4

2 に答える 2

2

SQLite の組み込みのrowidから完全に独立した主キーがある場合があります。

すべての SQLite テーブルのすべての行には、テーブル内の行を一意に識別する 64 ビットの符号付き整数キーがあります。この整数は、通常「ROWID」と呼ばれます。行 ID 値には、列名の代わりに大文字と小文字を区別しない特別な名前 "rowid"、"oid"、または " rowid " のいずれかを使用してアクセスできます。

非表示のrowid列を結果の先頭に追加することで、組み込みのrowidが呼び出されるようにクエリを作成できます_idCursorAdaptor

select _rowid_ as _id, ...

ROWID は一意ですが、主キーである必要はありません。CREATE TABLE ステートメントでは、主キーを好きなものにすることができます。

于 2012-07-06T17:41:01.413 に答える
0

TBH、これが本当に実現可能だとは思いません。そのような PK 列を用意する必要があります (多くのハッキングを行うと、何らかの回避策を作成できますが)。

技術的な PK として _id 列を持ち、論理的な PK として追加の列を持つことをお勧めします。つまり、一意の制約を持つ自由に定義された列です。その後、プログラム ロジックは、すべての操作に対して論理 PK を使用するだけで済みます。もちろん、これには検索操作などにカスタムクエリを使用する必要がありますが、通常はそれがより適しています。

hth..

于 2012-07-06T17:29:58.613 に答える