私のアプリのSQLiteテーブルでは、行番号が1、2、3、4、5になる列が必要です(またはすべての行の行番号を取得できるようにするため)。今は行を削除して常に行を追加しているので、新しい行を追加するたびに番号を付けることはできません。行を削除すると番号がめちゃくちゃになるからです。では、行番号を取得する方法、または行番号として機能する特別な列を作成する方法はありますか?もしそうなら、どのように?
4 に答える
自動インクリメント番号であるROWIDを使用する場合は、すべてのデータをROWID順に選択し、返された結果のインデックスを行番号として使用することで、行番号を計算できます。作成しているデータモデルクラスがある場合は、それを初期化子に渡すことができます。
それでもうまくいかない場合は、やろうとしていることについてさらに詳細を追加してみてはどうでしょうか。行番号が必要ですか?
行アンバースキームに「穴」を作る行を削除するときに、データベース内の既存のすべてのレコードを変更する必要はありません。
SQLiteは、ROWIDを使用して、必要なものをすでにサポートしています。selectクエリを作成するときは、ROWIDで並べ替えるように指定するだけで、返されたすべてのレコードが適切な順序で並べ替えられ、それらを順番に繰り返すことができます。
このページを参照してください:http ://www.sqlite.org/autoinc.html
FWIW、コアデータよりも直接SQLiteを好むべき場所は確かにあります。ただし、これらはまれなケースです。一般に、最初にCore Dataにアクセスし、CDがニーズに合わない場合にのみSQLiteにフォールバックします。
テーブルの自動インクリメント主キーを使用するだけです。その場合、レコードにアクセスできる一意の識別子が常にあります。
行を追加および削除するたびにこれをリセットしたい場合、これは本当にテーブルの列である必要がありますか?
たとえば、テーブルから20番目の行を選択できるようにしたい場合は、SQLのLIMIT
andOFFSET
句を使用して特定の行を選択できます。たとえば、news
テーブルから20番目の行を取得するには、次のようにします。
SELECT * FROM news LIMIT 1 OFFSET 19;
または、この行番号情報を含む列が本当に必要な場合は、新しいINTEGER
列タイプを追加してから、Objective Cメソッドを記述してその列の値を更新し、行を削除または挿入するたびにそのメソッドを呼び出すことができます。結果セット。
問題を解決する方法はいくつかあります。あなたは私たちがあなたを助けるためにあなたが達成しようとしていることを説明しなければなりません。典型的なAUTOINCREMENT
答えは、私たちがテーブルキーに一般的に使用するものですが、これをテーブルのキーにするのではなく、他の何かにするように思われます。