【AndroidでSQLiteを制する】データベースのスキーマを表現するクラス
SQLiteは一つのデータベースファイルとして保存されます。 データベースファイル内には複数のテーブルがあります、テーブルにはテーブル名やカラム名が存在します。 これらの要素に対応するクラスを定義することでデータベースに関する情報を一括で管理することができます。
今回は下記のスキーマでデータベースを作成します。
データベース名 : LoadToSQLiteMaster.db
テーブル : Bookテーブル
論理名 | 物理名 | 型 |
---|---|---|
ID | _id | INTEGER |
タイトル | title | TEXT |
サブタイトル | subtitle | TEXT |
データベースを表現するクラスを定義する
データベース定義クラスはデータベース名とバージョン番号を持ちます。 データベース名はそのままSQLiteデータベースファイルの名前になります。 バージョン番号は、SQLiteデータベースファイル内のデータベースのバージョン番号を表します。/** * データベース内のスキーマを定義するクラス */ public final class LoadToSQLiteMasterContract { /** * このクラスはインスタンス化することを目的としていないため、 * privateなコンストラクタを定義する。 */ private LoadToSQLiteMasterContract(){} /** * データベースを定義するクラス */ public static class DataBase { /** 現在のバージョン */ public static final int DATABASE_VERSION = 1; /** データベース名 */ public static final String DATABASE_NAME = "LoadToSQLiteMaster.db"; } }
Bookテーブルを表現するクラスを定義する
Bookテーブル定義クラスはテーブル名・カラム名・クリエイト文・ドロップ文を定義します。/** * データベース内のスキーマを定義するクラス */ public final class LoadToSQLiteMasterContract { /** TEXT型 */ public static final String TYPE_TEXT = " TEXT "; /** INTEGER型 */ public static final String TYPE_INTEGER = " INTEGER "; /** プライマリーキー */ public static final String PRIMARY_KEY = " PRIMARY KEY "; /** カンマ */ public static final String COMMA_SEP = " , "; /** * このクラスはインスタンス化することを目的としていないため、 * privateなコンストラクタを定義する。 */ private LoadToSQLiteMasterContract(){} /** * データベースを定義するクラス */ public static class DataBase { /** 現在のバージョン */ public static final int DATABASE_VERSION = 1; /** データベース名 */ public static final String DATABASE_NAME = "LoadToSQLiteMaster.db"; } /** * Bookテーブルを定義するクラス */ public static class Book implements BaseColumns { /** テーブル名 */ public static final String TABLE_NAME = "book"; /** カラム名(タイトル) */ public static final String COLUMN_NAME_TITLE = "title"; /** カラム名(サブタイトル) */ public static final String COLUMN_NAME_SUBTITLE = "subtitle"; /** クリエイト文 */ public static final String SQL_CREATE_ENTRIES = "CREATE TABLE " + TABLE_NAME + " (" + _ID + TYPE_INTEGER + PRIMARY_KEY + COMMA_SEP + COLUMN_NAME_TITLE + TYPE_TEXT + COMMA_SEP + COLUMN_NAME_SUBTITLE + TYPE_TEXT + " )"; /** ドロップ文 */ public static final String SQL_DROP_ENTRIES = "DROP TABLE IF EXISTS " + TABLE_NAME; /** * このクラスはインスタンス化することを目的としていないため、 * privateなコンストラクタを定義する。 */ private Book(){} } }