Android application development 第17章:SQLiteとRoomの比較と実装

🧩 SQLiteとRoomの違いは?

項目SQLiteRoom
提供元Android標準APIAndroid Jetpack(Google公式拡張)
書き方SQL文を直接書くJava/Kotlinのコードで定義(抽象化される)
型安全性低い(文字列でSQLを記述)高い(コンパイル時にチェックされる)
学習コストやや高い初期学習は必要だが保守しやすい
生SQLの実行可能基本はDAO経由だが、必要ならSQLも書ける
メリット素のSQLが使える自由さ型安全、保守性、自動マイグレーションなど
デメリットバグを生みやすく保守性が低い導入にアノテーションや構成が必要

🔹 SQLiteとは?

Androidに標準で搭載されている軽量なRDB(リレーショナルデータベース)です。
直接SQL文を書いて使うため、Javaエンジニアにとっては馴染み深い反面、ミスが起こりやすいです。

SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name", "Taro");
values.put("age", 25);
db.insert("users", null, values);

読み取りや検索時は Cursor を使って値を取り出します。

Cursor cursor = db.query("users", null, null, null, null, null, null);
while (cursor.moveToNext()) {
    String name = cursor.getString(cursor.getColumnIndex("name"));
}
cursor.close();

手動でSQL構文、型の整合性、バージョン管理なども必要です。


🔹 Roomとは?

RoomはJetpackの一部で、SQLiteをラップした公式ライブラリです。
SQLを直接書かずに、JavaやKotlinのコードでデータベース操作ができ、
型安全・自動マイグレーション・バグ防止に優れています。


Roomの構成要素

  1. Entity:テーブルに対応するクラス
  2. DAO(Data Access Object):SQLに相当する操作を定義
  3. Databaseクラス:全体の接続ポイント

🧱 Roomの実装例(ユーザ情報)

① Entity

@Entity
public class User {
    @PrimaryKey(autoGenerate = true)
    public int id;

    @ColumnInfo(name = "name")
    public String name;

    public int age;
}

② DAO(データアクセスのインターフェース)

@Dao
public interface UserDao {
    @Insert
    void insert(User user);

    @Query("SELECT * FROM User")
    List<User> getAllUsers();

    @Delete
    void delete(User user);
}

③ Databaseクラス(RoomDatabaseを継承)

@Database(entities = {User.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
    public abstract UserDao userDao();
}

④ 実際の利用コード

AppDatabase db = Room.databaseBuilder(getApplicationContext(),
        AppDatabase.class, "my-database").build();

User user = new User();
user.name = "Taro";
user.age = 25;

db.userDao().insert(user);

Roomはバックグラウンドスレッドでの実行が推奨されるため、非同期処理やLiveDataと組み合わせることも多いです。


🔍 SQLiteとRoomの選び方

  • 試作アプリ/軽量ツール → SQLiteでもOK
  • 長期保守/チーム開発 → Room推奨(型安全・保守性・将来の拡張性)

🧠 一言でいうと?

SQLiteは「自由なメモ帳」
**Roomは「型安全な記録帳」**です。

Roomは初期構築に多少の手間はあるものの、
バグの少ない、安全なデータ管理ができるため、
実用的なアプリではRoom一択と言ってもよいでしょう。

mh

Related Posts

Android application development 第33章:実践ミニアプリ:天気情報アプリ

Android application development 第32章:実践ミニアプリ:シンプルなToDoリスト

You Missed

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第6章:Cloud Shellの活用:GCPを「どこからでも手軽に操作できる秘密基地」

  • 投稿者 mh
  • 6月 6, 2025
  • 10 views

Kubernetes Learning 第32章:Helmの基本操作(install, upgrade, rollback)~マニフェスト管理をもっと効率よく、自動化するために~

  • 投稿者 mh
  • 6月 5, 2025
  • 12 views

現場で使えるChrome DevTools実践ガイド 第11章:アクセシビリティの確認

  • 投稿者 mh
  • 6月 5, 2025
  • 16 views

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第5章:Cloud SDKとgcloudコマンド:GCPを「キーボードから操る」魔法のツール

  • 投稿者 mh
  • 6月 4, 2025
  • 25 views

Kubernetes Learning 第31章:コンテナのセキュリティ対策(PodSecurityなど)~Kubernetes環境を守るために最低限知っておきたいこと~

  • 投稿者 mh
  • 6月 4, 2025
  • 27 views

現場で使えるChrome DevTools実践ガイド 第10章:Device Modeでのレスポンシブ検証

  • 投稿者 mh
  • 6月 4, 2025
  • 29 views