【AndroidでSQLiteを制する】データベースのスキーマを表現するクラス

このエントリーを Google ブックマーク に追加
Pocket
[`yahoo` not found]

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(){}
    }
}