AndroidでSQLiteを使用するので、テーブルを作りたいけど、テーブル作成時のルールや注意点ってあるの?
Androidでは、SQLiteというリレーショナルデータベースが使えます。
データを保存するには、まずはテーブルを作成しなければなりません。
テーブル作成時の決まり事、注意点としては、SQLiteの仕様としては特にないです。
しかし、Androidで用意されているSQLite関係のクラスを利用する際には、ある事を前提として実装されている場合があり、それらのクラスを利用する為には、その前提となっているルールに従っておかなければなりません。
以下が、そのルールです。
ID列を定義する
「列」とは、「カラム」「フィールド」ともいいます。
「ID」とは、それぞれのレコードに対して、一意の番号となる数字の事です。
一つのテーブルの中で重複したIDは無い、といえばわかりやすいでしょうか。
また、このID列の列名は、以下のようにします。
_id
AndroidのSQLite関係のクラスでは、このIDを示す「_id」カラムがあるという前提で実装されているクラスがあります。
例えば、CursorAdapter等です。
その為、AndroidアプリでのSQLite使用時、テーブルを作成するSQL(クエリともいいます。)は、以下のような形にしておきます。
create table テーブル名
( _id integer primary key autoincrement,・・・)
_id列は、1、2、3、・・・と格納されるので、型はinteger型です。
また、このIDは、一意の番号で、重複は禁止ですので、primary keyを付けます。
「autoincrement」とは、文字通り、自動的にインクリメントされる、という事を示しています。
レコードのInsert時には、_id列の値を指定無しでInsertを行っても、その時点でのテーブルのレコードを見て、自動的に採番してくれます。
スポンサーリンク
具体例として、ブックマークを保存するためのテーブルを用意するとしますと、以下のような感じです。
create table bookmarklist
( _id integer primary key autoincrement , url text not null )
not nullは、NULL値は入れる事はできませんよ!という指定です。
NULLを入れようとすると、エラーになります。
また、レコード挿入時は、以下のようになります。
insert into bookmarklist ( url )
values (‘https://android.roof-balcony.com’)
ちなみに、
insert文では、挿入する列名(テーブル名の直後、valuesの前の部分)を省略する事ができます。
但し、後から見たときに可読性が落ちるので、省略せずに指定しましょう。
上記のサンプルだと、「url」というカラムに、このURLが格納されると一発でわかりますが、省略されているとテーブルの定義を調べないとわからないので。
また、後々になって、テーブルに列を追加したり削除したりするとき等でも、挿入する列名が省略されていると、意図したところとは違うカラムにデータが入ってしまう事になったりします。
これは、Androidに限らず、SQLの一般的な暗黙的ルールみたいなモノです。
integer primary kye autoincrement
→
integer primary key autoincrement
では?
ご指摘有難う御座います。
修正させて頂きました。
ご指摘有難う御座います。
修正させて頂きました。