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

Kubernetes Learning 第40章:Kubernetesのアップグレードとバージョン管理 ~安全にバージョンを上げるための基本知識~

  • 投稿者 mh
  • 6月 24, 2025
  • 37 views

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第13章:ストレージとデータベースの基礎 : オブジェクトストレージ: Cloud Storage(バケット、オブジェクト、ストレージクラス)- あなたの「データ置き場」

  • 投稿者 mh
  • 6月 23, 2025
  • 59 views

Kubernetes Learning 第39章:CRD(Custom Resource Definition)とは?~Kubernetesに“自分専用のリソース”を追加する仕組み~

  • 投稿者 mh
  • 6月 21, 2025
  • 59 views

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第12章:Cloud CDN(Content Delivery Network):あなたのWebサイトを「世界中のユーザーに超高速で届ける宅配便ネットワーク」

  • 投稿者 mh
  • 6月 20, 2025
  • 77 views

Kubernetes Learning 第38章:Operatorとは? ~Kubernetesに「運用の自動化ロボット」を組み込む仕組み~

  • 投稿者 mh
  • 6月 19, 2025
  • 66 views

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第11章:Cloud Load Balancing:あなたのGCPリソースを「賢く振り分ける交通整理の達人」

  • 投稿者 mh
  • 6月 18, 2025
  • 80 views