🧩 SQLiteとRoomの違いは?
項目 | SQLite | Room |
---|---|---|
提供元 | Android標準API | Android 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の構成要素
- Entity:テーブルに対応するクラス
- DAO(Data Access Object):SQLに相当する操作を定義
- 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一択と言ってもよいでしょう。