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 第16章:SharedPreferences

🗂️ SharedPreferencesとは? アプリ内で簡…

Android application development 第15章:リストのクリック処理と画面遷移

という一連の処理を学びます。 🧩 まずは全体像 🔧 Recy…

You Missed

Kubernetes Learning 第13章:kubectl apply / diff / deleteの運用

  • 投稿者 mh
  • 5月 17, 2025
  • 10 views

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

  • 投稿者 mh
  • 5月 17, 2025
  • 9 views

Kubernetes Learning 第12章:リソース毎のマニフェスト作成 〜Kubernetesで何をどう定義するのか〜

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

Android application development 第16章:SharedPreferences

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

Kubernetes Learning 第11章:YAML形式の基本 ~Kubernetesマニフェストの土台を理解する~

  • 投稿者 mh
  • 5月 15, 2025
  • 25 views

Android application development 第15章:リストのクリック処理と画面遷移

  • 投稿者 mh
  • 5月 15, 2025
  • 22 views