Androidで扱うデータベース

投稿日:  更新日:

Androidは標準でSQLiteというRDBMS(Relational Database Management System)を扱います。

SQLiteは少し個性的なデータベースです。

データベース全般の説明を通して、SQLiteと他の違いをまとめます。

※環境:Android Studio Ladybug | 2024.2.1 Patch 2
    Kotlin 2.0.0

スポンサーリンク

データベースとは

アプリケーションで扱うデータをファイルへ入出力することは、よくある動作です。

この時、後々のデータの読み書きを考えると、ファイルは定まったフォーマットにします。なぜなら、不明なフォーマットで書き込まれていたら、データが正しく読み込めないからです。

アプリの出力フォーマット

フォーマットはアプリケーション固有のもの、XML・TOMLといったテキストのもの、JPEG・PNG(画像)といったバイナリのものなど、様々です。
※TOML:Gradleのバージョンカタログで使用

データベースもフォーマットの一種で、テーブル(二次元の表)を用いてデータを表現したバイナリです。

テーブルのサンプル

スポンサーリンク

RDBMS

コンピューターの世界で単にデータベースというと、一般的に「RDBMS」を指します。

「DB」は「データベース(DataBase)」の略です。その他は次のような意味になります。

MS(Management System)

「MS」は「マネージメントシステム(Management System:管理システム)」の略です。

マネージメントシステムの役割は次の2つになります。

  • ・データベースの管理
  • ・操作手段の提供

マネージメントシステムに役割を任せることで、データベースはプロラム(アプリケーション)からブラックボックスとして扱えます。

プログラムはデータの実装を知らなくても、データにアクセスできます。つまり、プロブラムとデータを分離できます。

データベースの管理

マネージメントシステムはデータベースの管理を行います。

管理項目概要
データの保守無駄を省くためにデータの空きを詰める
アクセス効率化のためにデータを並び替える
データのバックアップ(※)定期的なバックアップで障害からデータを守る
セキュリティの維持(※)正当なユーザーにアクセスを制限する
排他制御同時多発的なアクセスからデータの矛盾を防ぐ
トランザクション制御アクセス途中で発生した障害からデータの整合性を守る
※ユーザにより設定されている場合

操作手段の提供

マネージメントシステムはデータベースの操作手段(問い合わせ、返答)をユーザーに提供します。

データベースの操作手段

代表的な問い合わせを以下にあげます。

  • ・登録(INSERT)
  • ・検索(SELECT)
  • ・削除(DELETE)
  • ・変更(UPDATE)    ※( )はSQLの構文

データベースの問い合わせに特化したSQL(Structured Query Language)言語があり、SQLの利用が業界標準となっています。

SQLを使って問い合わせを行うことで、どんなプログラミング言語や開発環境からでも、同じ形式で操作が出来ます。

SQLの利点

R(Relational)

「R」は「リレーショナル(Relational:関係)」の略です。

データベースは複数のテーブルを持つことが出来ます。そして、お互いに関連(Relationship:相互関連)付けが行えます。

例えば、「価格テーブル」を関連付けされた複数のテーブルで表現すると、次のようになります。

複数のテーブル単独のテーブル
複数のテーブルで表現
単独のテーブルで表現

リレーションシップを行う目的はデータ(黒字の部分)の冗長性を減らすことです。

これにより、「ドラッグストア〇〇」が「ドラッグストア◎◎」へ変わったとしても、【店舗テーブル】のみを修正するだけで済みます。

ちなみに、単独のテーブルを関連付けされた複数のテーブルへ変換する処理を「正規化」と呼びます。

スポンサーリンク

SQLiteが標準

RDBMSで有名なシステムは「MySQL」と「PostgreSQL」です。

この2つは、大規模なデータに耐えられる機能と性能を持つ上にOSSなので、利用者が多いです。

2つを紹介しましたが…

Android SDKで提供されるデータベースAPIは「SQLite」を対象にしたものです。SQLiteがAndroidの標準データベースになります。

SQLiteのSQLはサブセットですが、主要なコマンドは揃っているので、標準的な利用であれば問題ありません。

RDBMSシステム構成SQLその他
MySQLサーバー&クライアントフルセットOSS
PostgreSQL
SQLiteアプリケーション組み込みサブセット
※MySQLの開発元はORACLE
※MySQLは無償版(MySQL Community Server)と商用版がある
※OSS:Open Source Softwear

前者の2つとSQLiteは、システム構成に大きな違いがあります。

MySQLとPostgreSQLのシステム構成

システム構成はサーバー&クライアントモデルです。データベースはネットワークを介したサーバーに存在します。

RDBMSのシステム構成

クライアントは、ネットワークを使ってサーバーへSQLコマンドで問い合わせ、ネットワークを使ってサーバーから返答を取得します。

SQLiteのシステム構成

システム構成はアプリケーション組み込みです。データベースは同一ホスト内に存在します。Androidの場合はサンドボックス内(内部ストレージ)に作られます。

SQLiteのシステム構成

Android SDKのデータベースAPIがSQLiteの仕様に準拠したものとなっており、APIを用いれば自ずとサンドボックス内のデータベースへアクセスできます。

なお、Androidにおいても、KotlinのデータベースAPIを用いることで、MySQLやPostgreSQLへアクセスが可能と思われます。利用した経験はありませんが…

スポンサーリンク

永続性の確保

プログラムは、動作の途中で生成したデータを何処かに保存しつつ、処理を進めます。

そして、データの寿命(有効な範囲)は保存する場所により決まります。

保存場所データの寿命永続性
関数のローカル変数・代入~関数の終了
なし
クラスのプロパティ・インスタンスが存在する間Activity
ViewModel
Application
ファイル内部ストレージ
(サンドボックス)
・意図的に削除されるまで
・アプリが削除されるまで
あり
SharedPreferences
Database
外部ストレージ・意図的に削除されるまでカメラアプリで撮った写真

この中で、アプリケーションが終了しても消えない保存場所を「永続性:あり」、消える保存場所を「永続性:なし」と言います。

また、永続性の必要なデータを「永続データ」を読んでいます。例えば、曲の再生リスト、ToDoリストの項目などは永続データです。

データベースはファイルに記録されるので、永続データの保存に適しています。

データベース(SQLite)の構築方法

Androidが標準で扱うデータベースはSQLiteです。

Androidでデータベースを構築する方法は「SQLite API(Android SDK)」と「Room(Android Jetpack)」の2通りがあります。

SQLite API

「SQLite API」はAndroid SDKで提供されているAPIです。API Level 1の頃からあります。

データベースと接続を確立(Open)した時に得られる識別子(SQLiteDatabase)を介して、マネージメントシステムへSQLを発行し、データベースにアクセスします。

SQLiteのプログラム構成

※構築方法の詳細は「SQLite APIでデータベースを構築」を参照

Room

「Room」はAndroid Jetpackで提供されているAPIです。「SQLite API」に代わって、使用が推奨されています。

アノテーションとKotlinの構文を使って、データベースのアクセスモデル(設計図)を記述し、それを基にシンボルプロセッサがアプリ専用APIを構築します。

専用APIから取り出された識別子(RoomDatabase)のDao(Data Access Object)を介して、マネージメントシステムへSQLを発行し、データベースにアクセスします。

Roomのプログラム構成

※構築方法の詳細は「Roomでデータベースを構築」を参照

スポンサーリンク

関連記事:

Androidアーキテクチャコンポーネント(AAC)は「堅牢でテストとメンテナンスが簡単なアプリの設計を支援する」とドキュメントで説明されています。 有効そうだけど、実態がよくわからないので、いろいろ調べて理解した内容をまとめました。 ...
データベースを扱うアプリケーションの開発で、動作を確認するためにデータベースの閲覧が出来ると便利です。 データベースは、マネージメントシステムを介してアクセスされるため、プログラムからブラックボックスに見えます。 ですので、データベース内部の問題は見つけ難いです。 デバックおいてデータベースの閲覧が出来れば、内部の問題を用意に確認できます。 ※環境:Android Studio Ladybug | 2024.2.1 Patch 2 ...
Androidが標準で扱うデータベースはSQLiteです。 ※詳細は「Androidで扱うデータベース」を参照 データベースを構築する方法は「SQLite API(Android SDK)」と「Room(Android Jetpack)」の2通りがあります。 今回は「SQLite API」でデータベースを構築する方法を紹介します。 ※環境:Android Studio Ladybug | 2024.2.1 Patch 2     Kotlin 2.0.0 ...
Androidが標準で扱うデータベースはSQLiteです。 ※詳細は「Androidで扱うデータベース」を参照 データベースを構築する方法は「SQLite API(Android SDK)」と「Room(Android Jetpack)」の2通りがあります。 今回は「Room」でデータベースを構築する方法を紹介します。 ※環境:Android Studio Ladybug | 2024.2.1 Patch 2     Kotlin 2.0.0     androidx.sqlite:sqlite:2.4.0     androidx.room:room-*:2.6.1 ...
アプリケーションが始めて起動した直後に、データの事前取り込み(初期状態の設定)を必要とする場合があります。 事前取り込みの方法ついて、まとめました。 SQLite API(Android SDK)でデータベースを構築した場合です。 ※環境:Android Studio Ladybug | 2024.2.1 Patch 2     Kotlin 2.0.0 ※サンプルの全体像は「SQLite APIでデータベースを構築」を参照 ...
SQLite API(Android SDK)でデータベースを構築した場合、アプリのパフォーマンスを考えると、識別子の共有が必要になってきます。 この点について、まとめました。 ※環境:Android Studio Ladybug | 2024.2.1 Patch 2     Kotlin 2.0.0 ※サンプルの全体像は「SQLite APIでデータベースを構築」を参照 ...
SQLite API(Android SDK)でデータベースを構築した場合、データベースへアクセスする際に、データベースのOpenとCloseという処理を伴います。 この点について、まとめました。 ※環境:Android Studio Ladybug | 2024.2.1 Patch 2     Kotlin 2.0.0 ※サンプルの全体像は「SQLite APIでデータベースを構築」を参照 ...
SQLite API(Android SDK)でデータベースを構築した場合、アクセスはスレッドセーフになります。 この点について、まとめました。 ※環境:Android Studio Ladybug | 2024.2.1 Patch 2     Kotlin 2.0.0 ※サンプルの全体像は「SQLite APIでデータベースを構築」を参照 ...
スポンサーリンク