_ID フィールドを自動インクリメントする Android の SQLite データベースを使用していますが、そこから行を削除すると、_ID に番号がないため、1 ~ 9 ではなく 1,2,4,5 になります。 ,6,7,8,9 ですが、私がやりたいのは 1 から 8 までです! これを行う方法はありますか?質問が紛らわしくて申し訳ありません、私はそれを表現する方法を理解できませんでした!
1 に答える
_ID フィールドを自動インクリメントする Android の SQLite データベースを使用していますが、そこから行を削除すると、_ID に番号がないため、1 ~ 9 ではなく 1,2,4,5 になります。 ,6,7,8,9 ですが、私がやりたいのは 1 から 8 までです! これを行う方法はありますか?
一言でいいえ。これはあなたが説明していることは正常な動作です。自動インクリメントの内部イテレータにはメモリがありません。一度 ID 3 が生成されると、ID 3 が再度生成されるのではなく、次の番号 4 が生成されます。ID 1、2、3、4、5 を生成し、行を削除する必要がある場合ID 5 を使用すると、新しく挿入された行の自動 ID は 5 ではなく 6 になります。
ほとんどの DMS では、これは正常な動作です。確かに、自動インクリメントを使用せずに明示的にIDを追加し、それが変更されたときにそれを達成できるため、プログラムで行の更新を提供できますが、このアプローチは推奨されず、非常に「病気」でもあります。テーブル内のすべての行を更新すると、数百万行すべてを更新することになりますが、この操作には時間がかかりすぎます。特にデバイスの場合、特定の容量のメモリとバッテリーが限られているため、これは適切ではありません。
また、リレーショナル テーブルを使用している場合は @Areks が述べたように、参照も更新する必要があり、ほとんどの場合、それだけの価値はありません。
注:アダプターに独自に定義されたオブジェクトのリストを設定する場合は、SQLite からの row_id の参照を各オブジェクトに保存するだけで、ListView から行を削除するときに、行から ID を取得し、それを delete メソッドのパラメーターに渡すことができます。