Room: এটি কী, ORM লাইব্রেরি এবং SQLite নিয়ে কাজ করা

লেখক: IT Sectr প্রকাশিত: 2026-03-12 পড়ার সময়: 10 মিনিট

Room হল Android Jetpack-এর একটি ORM লাইব্রেরি যা Android-এ স্থানীয় ডেটাবেস নিয়ে কাজ করার জন্য SQLite-এর উপরে একটি অ্যাবস্ট্রাকশন স্তর প্রদান করে। Android Developers, 2025-এর অফিসিয়াল ডকুমেন্টেশন অনুসারে, Room কম্পাইল টাইমে অ্যানোটেশনের ভিত্তিতে স্বয়ংক্রিয়ভাবে DAO ইমপ্লিমেন্টেশন জেনারেট করে, যা সরাসরি SQLiteOpenHelper ব্যবহারের তুলনায় প্রায় 70% বয়লারপ্লেট কোড দূর করে। লাইব্রেরি কম্পাইলেশন পর্যায়ে SQL কোয়েরি যাচাই করে, যা ডিভাইসে অ্যাপ্লিকেশন চালানোর আগেই সিনট্যাক্স ত্রুটি সনাক্ত করতে দেয়।

মূল বিষয়

  • Room হল Android Jetpack-এর একটি ORM লাইব্রেরি যা Android অ্যাপ্লিকেশনে স্থানীয় ডেটা স্টোরেজের জন্য SQLite-এর উপরে একটি অ্যাবস্ট্রাকশন স্তর প্রদান করে।
  • তিনটি প্রধান উপাদান: Entity (টেবিল বর্ণনা), DAO (ডেটা অপারেশন) এবং Database (ডেটাবেসের প্রবেশ বিন্দু)।
  • কম্পাইল টাইমে SQL কোয়েরি যাচাই — একটি মূল সুবিধা, যা অ্যাপ্লিকেশন ইনস্টলেশনের আগে ত্রুটি সনাক্ত করতে সক্ষম করে।
  • ডেটাবেসে পরিবর্তনের প্রতিক্রিয়াশীল পর্যবেক্ষণের জন্য Flow, LiveData এবং RxJava-এর জন্য অন্তর্নির্মিত সমর্থন।
  • মাইগ্রেশন প্রক্রিয়া পূর্বে সংরক্ষিত ব্যবহারকারী ডেটা না হারিয়ে ডেটাবেস স্কিমা আপডেট করার অনুমতি দেয়।

Room ORM লাইব্রেরি কী?

Room হল Android Jetpack-এর একটি ORM লাইব্রেরি যা Google Android প্ল্যাটফর্মে স্থানীয় SQLite ডেটাবেস নিয়ে কাজ সহজ করার জন্য তৈরি করেছে। এটি ডেটা স্কিমা বর্ণনা করার জন্য অ্যানোটেশন প্রদান করে এবং কম্পাইল টাইমে স্বয়ংক্রিয়ভাবে DAO ইন্টারফেস ইমপ্লিমেন্টেশন জেনারেট করে। সরাসরি SQLiteOpenHelper ব্যবহারের বিপরীতে, Room ডেভেলপারকে ডেটাবেস সংযোগ তৈরি, খোলা এবং পরিচালনার জন্য উল্লেখযোগ্য পরিমাণ বয়লারপ্লেট কোড লেখা থেকে মুক্ত করে।

লাইব্রেরিটি Google I/O 2017-এ Android আর্কিটেকচার উপাদানের অংশ হিসাবে উপস্থাপন করা হয়েছিল। তারপর থেকে, Room স্থানীয় ডেটা স্টোরেজের জন্য ডি-ফ্যাক্টো স্ট্যান্ডার্ড হয়ে উঠেছে, Android-এর জন্য GreenDAO এবং Realm-এর মতো সমাধানকে জনপ্রিয়তায় ছাড়িয়ে গেছে। Google-এর মতে, লাইব্রেরিটি Google Play-তে প্রকাশিত 60% এরও বেশি অ্যাপ্লিকেশনে ব্যবহৃত হয় যা ডিভাইসে স্থানীয় ডেটা নিয়ে কাজ করে।

মূল বৈশিষ্ট্য — একটি অ্যানোটেশন প্রসেসরের মাধ্যমে কম্পাইল টাইমে SQL কোয়েরি যাচাই করা। যদি একজন ডেভেলপার SQL কমান্ডে ভুল করে, উদাহরণস্বরূপ, একটি অস্তিত্বহীন কলামের নাম উল্লেখ করে, তাহলে অ্যাপ্লিকেশন ইনস্টল হওয়ার আগেই বিল্ড ত্রুটি সহ ব্যর্থ হবে। এটি SQLiteOpenHelper পদ্ধতির থেকে মৌলিকভাবে ভিন্ন, যেখানে এই ধরনের ত্রুটিগুলি শুধুমাত্র রানটাইমে, প্রায়শই প্রোডাকশনে সনাক্ত হয়।

অ-মানক প্রকারের জন্য TypeConverters

SQLite শুধুমাত্র পাঁচটি ডেটা প্রকার সমর্থন করে: TEXT, INTEGER, REAL, BLOB এবং NULL। তবে Java এবং Kotlin-এ জটিল প্রকার ব্যবহার করা হয়: Date, List, Enum এবং কাস্টম অবজেক্ট। এগুলি সংরক্ষণের জন্য, Room TypeConverters প্রক্রিয়া প্রদান করে — স্ট্যাটিক পদ্ধতি যা জটিল প্রকারকে SQLite-এর বোধগম্য আদিম প্রকারে রূপান্তর করে। উদাহরণস্বরূপ, একটি Date অবজেক্ট Long-এ (টাইমস্ট্যাম্প), এবং List<String> Gson বা Moshi-এর মাধ্যমে JSON স্ট্রিং-এ রূপান্তরিত হয়।

kotlin
@Database(entities = [User::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
    abstract fun userDao(): UserDao
}

val db = Room
    .databaseBuilder(context, AppDatabase::class.java, "app-db")
    .build()

একটি কনভার্টার ঘোষণা করতে, একটি স্ট্যাটিক পদ্ধতিতে @TypeConverter অ্যানোটেশন যোগ করা এবং ডেটাবেস স্তরে @TypeConverters অ্যানোটেশনে কনভার্টার ক্লাস উল্লেখ করা যথেষ্ট। Room প্রতিটি SQL কোয়েরিতে সংশ্লিষ্ট প্রকার পড়া এবং লেখার সময় স্বয়ংক্রিয়ভাবে কনভার্টার প্রয়োগ করে, ম্যানুয়ালি রূপান্তর পদ্ধতি কল না করেই।

Room আর্কিটেকচার: তিনটি মূল উপাদান

Room তিনটি প্রধান উপাদান নিয়ে গঠিত: Entity, DAO এবং Database। প্রতিটি কঠোরভাবে সংজ্ঞায়িত ভূমিকা পালন করে এবং সংশ্লিষ্ট অ্যানোটেশন দিয়ে অ্যানোটেট করা হয়। একসাথে, তারা একটি সম্পূর্ণ ডেটা অ্যাক্সেস স্তর গঠন করে যা অ্যাপ্লিকেশনের বিজনেস লজিককে SQLite বাস্তবায়নের বিবরণ থেকে আলাদা করে।

Entity — ডেটাবেস টেবিল

Entity হল একটি ডেটা ক্লাস যা ডেটাবেসে একটি টেবিলের গঠন বর্ণনা করে। ক্লাসের প্রতিটি ফিল্ড টেবিলের একটি কলামের সাথে মিলে যায়, এবং ডেটাবেসের প্রতিটি সারি ক্লাসের একটি ইনস্ট্যান্সের সাথে মিলে যায়। @Entity অ্যানোটেশন Room-কে জানায় যে ক্লাসটি একটি টেবিল। @PrimaryKey অ্যানোটেশনযুক্ত ফিল্ডটি প্রাথমিক কী নির্ধারণ করে, যা অটো-ইনক্রিমেন্ট বা যৌগিক হতে পারে। টেবিলের মধ্যে সম্পর্কের জন্য @ForeignKey ব্যবহার করা হয়, যা ডেটাবেস স্তরে ডেটা অখণ্ডতা নিশ্চিত করে।

kotlin
@Entity(tableName = "users")
data class User(
    @PrimaryKey(autoGenerate = true)
    val id: Int = 0,
    @ColumnInfo(name = "full_name")
    val name: String,
    val age: Int,
    val email: String
)

DAO — ডেটা অপারেশন

DAO (Data Access Object) হল একটি ইন্টারফেস বা অ্যাবস্ট্রাক্ট ক্লাস যা ডেটা নিয়ে কাজ করার জন্য অপারেশন ঘোষণা করে: ইনসার্ট, রিড, আপডেট এবং ডিলিট। প্রতিটি অপারেশন @Insert, @Query, @Update বা @Delete দিয়ে অ্যানোটেট করা হয়। Room কম্পাইল টাইমে এই ইন্টারফেসের ইমপ্লিমেন্টেশন স্বয়ংক্রিয়ভাবে জেনারেট করে। @Query অ্যানোটেশন বিশেষভাবে মূল্যবান — এটি SQL কোয়েরিকে স্ট্রিং হিসাবে গ্রহণ করে এবং বিল্ড টাইমে এর সঠিকতা যাচাই করে।

kotlin
@Dao
interface UserDao {
    @Insert
    suspend fun insert(user: User): Long

    @Query("SELECT * FROM users WHERE id = :userId")
    suspend fun getUserById(userId: Int): User?

    @Query("SELECT * FROM users")
    fun getAllUsers(): Flow<List<User>>

    @Delete
    suspend fun delete(user: User)
}

Database — প্রবেশ বিন্দু

Database হল একটি অ্যাবস্ট্রাক্ট ক্লাস যা RoomDatabase-কে প্রসারিত করে এবং ডেটাবেসের প্রবেশ বিন্দু হিসাবে কাজ করে। এতে সমস্ত Entities-এর তালিকা থাকে এবং DAO পাওয়ার জন্য অ্যাবস্ট্রাক্ট পদ্ধতি প্রদান করে। ক্লাসটি @Database দিয়ে অ্যানোটেট করা হয়, যা স্কিমা সংস্করণ এবং Entities-এর তালিকা নির্দিষ্ট করে। ডেটাবেস ইনস্ট্যান্স অ্যাপ কনটেক্সট, ফাইল নাম এবং Database ক্লাস সহ Room.databaseBuilder-এর মাধ্যমে তৈরি করা হয়।

Room কীভাবে SQLite-এর সাথে অভ্যন্তরীণভাবে কাজ করে

Room SQLite-কে প্রতিস্থাপন করে না, বরং অ্যাবস্ট্রাকশন স্তর হিসাবে এর উপরে কাজ করে। অভ্যন্তরীণ আর্কিটেকচারে একটি অ্যানোটেশন প্রসেসর, কোড জেনারেটর এবং সংযোগ পুল অন্তর্ভুক্ত। কম্পাইল টাইমে, অ্যানোটেশন প্রসেসর Entity, DAO এবং Database ক্লাস বিশ্লেষণ করে, তারপর _Impl প্রত্যয় সহ ইমপ্লিমেন্টেশন ক্লাস জেনারেট করে। সমস্ত জেনারেটেড ক্লাস বিল্ড প্যাকেজে রাখা হয় এবং ডেভেলপারের কাছে সরাসরি দৃশ্যমান হয় না।

কম্পাইল টাইমে কোড জেনারেশন হল Room-এর কেন্দ্রীয় প্রক্রিয়া। প্রতিটি DAO ইন্টারফেসের জন্য, সমস্ত অ্যানোটেটেড পদ্ধতির সম্পূর্ণ ইমপ্লিমেন্টেশন সহ একটি ক্লাস জেনারেট করা হয়। @Query অ্যানোটেশন থেকে SQL কোয়েরি সঠিকতার জন্য যাচাই করা হয়: প্রসেসর কলামের নাম Entity ফিল্ডের সাথে মেলে এবং SQL সিনট্যাক্স পরীক্ষা করে। যদি ত্রুটি পাওয়া যায়, বিল্ড একটি স্পষ্ট বার্তা সহ বাধাগ্রস্ত হয়। এটি কাঁচা SQLiteOpenHelper ব্যবহার করার সময় সম্ভব নয়, যেখানে ত্রুটিগুলি শুধুমাত্র রানটাইমে প্রকাশ পায়।

কম্পাইল টাইমে কোড জেনারেশন

জেনারেশন প্রক্রিয়াতে তিনটি ধাপ অন্তর্ভুক্ত। প্রথম — স্কিমা যাচাই: প্রসেসর পরীক্ষা করে যে @Database-এ তালিকাভুক্ত সমস্ত ক্লাস বৈধ Entities কিনা। দ্বিতীয় — DAO বডি জেনারেশন: প্রতিটি পদ্ধতির জন্য, অভ্যন্তরীণ RoomSQLiteQuery অবজেক্ট ব্যবহার করে একটি ইমপ্লিমেন্টেশন তৈরি করা হয় যা প্রিপেয়ার্ড কোয়েরি নির্বাহ করে। তৃতীয় — Database_Impl ক্লাসের জেনারেশন, যা ডেটাবেস তৈরি এবং খোলার পাশাপাশি সমস্ত DAO অবজেক্টের আরম্ভীকরণ পরিচালনা করে।

kotlin
class UserDao_Impl(private val __db: RoomDatabase) : UserDao {
    private val __insertionAdapter = __db
        .createInsertionAdapter(User::class, 0)

    override suspend fun insert(user: User): Long {
        __db.assertNotSuspendingTransaction()
        return __db.runInTransaction {
            __insertionAdapter.insertAndReturnId(user)
        }
    }
}

Room ডেটাবেস অপারেশনের জন্য আলাদা থ্রেড পুল তৈরি করে না। ডিফল্টরূপে, কোয়েরি কলিং থ্রেডে একটি সীমা সহ নির্বাহিত হয়: পড়া এবং লেখা থ্রেডকে ব্লক করে। অ্যাসিঙ্ক্রোনাস কাজের জন্য, Room Kotlin করুটিনের সাথে সাসপেন্ড ফাংশনের মাধ্যমে, LiveData-এর সাথে রিটার্ন মানের মাধ্যমে, এবং Flow-এর সাথে রিয়েক্টিভ র্যাপারের মাধ্যমে একীভূত হয়। এটি ডেভেলপারকে একটি নির্দিষ্ট কাজের জন্য আর্কিটেকচারাল সমাধান বেছে নেওয়ার নমনীয়তা দেয়।

Android অ্যাপ্লিকেশনে Room ব্যবহারের উদাহরণ

আসুন Room ব্যবহার করে নোট সংরক্ষণের একটি অ্যাপ্লিকেশন তৈরির ব্যবহারিক উদাহরণ দেখি। অ্যাপ্লিকেশনটিতে id, title, content এবং timestamp ফিল্ড সহ একটি Note টেবিল রয়েছে। ব্যবহারকারীরা নোট যোগ, দেখতে এবং মুছতে পারেন। অ্যাসিঙ্ক্রোনাস অপারেশনের জন্য করুটিন ব্যবহার করা হয়।

Gradle নির্ভরতা সেট আপ করা

Android প্রকল্পে Room একীভূত করতে, মডিউল-স্তরের build.gradle ফাইলে নির্ভরতা যোগ করুন। Room-এর তিনটি উপাদান প্রয়োজন: রানটাইম লাইব্রেরি, kapt অ্যানোটেশন প্রসেসর এবং ঐচ্ছিক করুটিন সমর্থন। লাইব্রেরি সংস্করণ সহজ আপডেটের জন্য room_version ভেরিয়েবলে নির্দিষ্ট করা হয়। Room 2.4.0 থেকে শুরু করে, দ্রুত বিল্ড গতির সাথে kapt-এর বিকল্প হিসাবে KSP সমর্থিত।

groovy
dependencies {
    def room_version = "2.6.1"
    implementation "androidx.room:room-runtime:$room_version"
    kapt "androidx.room:room-compiler:$room_version"
    implementation "androidx.room:room-ktx:$room_version"
    // ঐচ্ছিক: পরীক্ষা
    testImplementation "androidx.room:room-testing:$room_version"
}

নির্ভরতা সেট আপ করার পরে, তিনটি ফাইল তৈরি করুন: Note Entity, NoteDao ইন্টারফেস এবং AppDatabase ক্লাস। Note Entity-তে @PrimaryKey এবং @ColumnInfo অ্যানোটেশন সহ ফিল্ড রয়েছে। DAO ইনসার্ট, তালিকা প্রাপ্তি এবং মুছার জন্য পদ্ধতি প্রদান করে। Database @Database অ্যানোটেশনের মাধ্যমে Entity এবং DAO-কে সংযুক্ত করে।

kotlin
@Entity(tableName = "notes")
data class Note(
    @PrimaryKey(autoGenerate = true)
    val id: Int = 0,
    val title: String,
    val content: String,
    @ColumnInfo(name = "created_at")
    val timestamp: Long = System.currentTimeMillis()
)

@Dao
interface NoteDao {
    @Insert
    suspend fun insert(note: Note)

    @Query("SELECT * FROM notes ORDER BY created_at DESC")
    fun getAllNotes(): Flow<List<Note>>

    @Delete
    suspend fun delete(note: Note)
}

AppDatabase ফাইলটি RoomDatabase-কে প্রসারিত করে এমন একটি অ্যাবস্ট্রাক্ট ক্লাস হিসাবে ঘোষণা করা হয়। @Database অ্যানোটেশন বর্তমান সংস্করণের জন্য সমস্ত Entities এবং স্কিমা সংস্করণ নম্বর নির্দিষ্ট করে। একটি ইনস্ট্যান্স পাওয়ার জন্য, অ্যাপ কনটেক্সট সহ Room.databaseBuilder-এর build পদ্ধতির মাধ্যমে সিঙ্গেলটন প্যাটার্ন ব্যবহার করা হয়। ডেটাবেস ইনস্ট্যান্স ক্যাশিং একাধিক তৈরি প্রতিরোধ করে যা মেমরি লিকের কারণ হতে পারে।

Room-এ ডেটাবেস মাইগ্রেশন

মাইগ্রেশন Room-এ বিদ্যমান ডেটা না হারিয়ে অ্যাপ্লিকেশন আপডেট করার সময় ডেটাবেস স্কিমা পরিবর্তনের একটি প্রক্রিয়া। যখন একজন ব্যবহারকারী সংশোধিত Entities সহ একটি নতুন সংস্করণ ইনস্টল করে, Room সংস্করণ অমিল সনাক্ত করে এবং নির্দিষ্ট মাইগ্রেশন ধাপগুলি নির্বাহ করে। মাইগ্রেশন ছাড়া, ডেটাবেস মুছে ফেলা হবে এবং পুনরায় তৈরি করা হবে, যার ফলে সমস্ত ব্যবহারকারী-সংরক্ষিত ডেটা হারিয়ে যাবে।

একটি মাইগ্রেশন Migration ক্লাস দ্বারা বর্ণনা করা হয়, যা ডেটাবেসের শুরু এবং শেষ সংস্করণ নেয়। migrate পদ্ধতির ভিতরে, স্কিমা পরিবর্তনের জন্য একটি ALTER TABLE বা CREATE TABLE SQL কোয়েরি নির্বাহ করা হয়। Room স্বয়ংক্রিয়ভাবে স্কিমা পরিবর্তন সনাক্ত করতে পারে না — ডেভেলপারকে প্রতিটি Entity পরিবর্তনের জন্য ম্যানুয়ালি মাইগ্রেশন লিখতে হবে। Room 2.4.0 থেকে শুরু করে, স্বয়ংক্রিয় মাইগ্রেশন জেনারেশনের জন্য পরীক্ষামূলক autoMigrations বৈশিষ্ট্য উপলব্ধ।

autoMigrations-এর সাথে স্বয়ংক্রিয় মাইগ্রেশন

autoMigrations বৈশিষ্ট্য Room-কে Entity সংস্করণের মধ্যে পার্থক্যের ভিত্তিতে স্বয়ংক্রিয়ভাবে মাইগ্রেশন জেনারেট করতে দেয়। এটি ব্যবহার করতে, @Database-এ @AutoMigration অ্যানোটেশন যোগ করা এবং JSON-এ স্কিমা রপ্তানি সক্ষম করা যথেষ্ট। Room সংলগ্ন সংস্করণের স্কিমা তুলনা করে এবং প্রয়োজনীয় ALTER কোয়েরি জেনারেট করে। তবে autoMigrations শুধুমাত্র পশ্চাদগামী-সামঞ্জস্যপূর্ণ পরিবর্তন সমর্থন করে: কলাম যোগ করা, ইনডেক্স তৈরি করা এবং সামঞ্জস্যপূর্ণ রূপান্তর সহ প্রকার পরিবর্তন করা।

kotlin
val MIGRATION_1_2 = object : Migration(1, 2) {
    override fun migrate(db: SupportSQLiteDatabase) {
        db.execSQL(
            "ALTER TABLE users ADD COLUMN phone TEXT"
        )
    }
}

val db = Room
    .databaseBuilder(context, AppDatabase::class.java, "app-db")
    .addMigrations(MIGRATION_1_2)
    .build()

জটিল পরিবর্তনের জন্য, যেমন কলামের নাম পরিবর্তন বা টেবিল একীভূত করা, মধ্যবর্তী টেবিল ব্যবহার করে ম্যানুয়াল মাইগ্রেশন প্রয়োজন। একটি সাধারণ পরিস্থিতি: পুরানো স্কিমা সহ একটি অস্থায়ী টেবিল তৈরি করুন, পুরানো টেবিল থেকে নতুনটিতে রূপান্তর সহ ডেটা কপি করুন, পুরানো টেবিল মুছুন এবং অস্থায়ীটির নাম পরিবর্তন করুন। Room গ্যারান্টি দেয় যে সমস্ত মাইগ্রেশন একটি একক লেনদেনে নির্বাহিত হয়, এবং যদি ত্রুটি ঘটে, পরিবর্তনগুলি সম্পূর্ণরূপে প্রত্যাহার করা হয়।

সচরাচর জিজ্ঞাস্য

Room SQLiteOpenHelper থেকে কীভাবে আলাদা?

Room অ্যানোটেশন এবং কম্পাইল টাইমে SQL যাচাই সহ ORM অ্যাবস্ট্রাকশন প্রদান করে, যেখানে SQLiteOpenHelper-এর জন্য ম্যানুয়ালি সমস্ত কোয়েরি লেখা এবং সংযোগ পরিচালনা করা প্রয়োজন। Room স্বয়ংক্রিয়ভাবে CRUD অপারেশনের জন্য কোড জেনারেট করে এবং Android আর্কিটেকচার উপাদানের সাথে একীভূত হয়, যার মধ্যে LiveData এবং Flow অন্তর্ভুক্ত।

Room কোন ডেটা প্রকার সমর্থন করে?

Room সমস্ত Java আদিম প্রকার সমর্থন করে: Int, Long, Boolean, Float, Double, সেইসাথে String, ByteArray এবং Date। List বা Enum-এর মতো জটিল প্রকারের জন্য, TypeConverters ব্যবহার করা হয় — স্ট্যাটিক রূপান্তর পদ্ধতি যা অ-মানক প্রকারকে SQLite-সামঞ্জস্যপূর্ণ ফর্ম্যাটে রূপান্তর করে।

Room কি করুটিন ছাড়া ব্যবহার করা যেতে পারে?

হ্যাঁ, Room করুটিন ছাড়া সিঙ্ক্রোনাস কল সমর্থন করে, কিন্তু তারা যে থ্রেডে চলে তা ব্লক করে। অ্যাসিঙ্ক্রোনাস কাজের জন্য, আপনি করুটিনের পরিবর্তে LiveData বা RxJava ব্যবহার করতে পারেন। Google নতুন প্রকল্পে অ্যাসিঙ্ক্রোনাস ডেটা অ্যাক্সেসের প্রাথমিক পদ্ধতি হিসাবে করুটিন ব্যবহারের সুপারিশ করে।

মাইগ্রেশনের অনুপস্থিতিতে কী ঘটে?

যদি Room ডেটাবেস সংস্করণ অমিল সনাক্ত করে এবং উপযুক্ত মাইগ্রেশন না পায়, তাহলে ডিফল্টরূপে এটি ত্রুটি বর্ণনা সহ একটি IllegalStateException নিক্ষেপ করে। ডেভেলপার fallbackToDestructiveMigration পদ্ধতি দিয়ে এই আচরণ ওভাররাইড করতে পারেন, যা বিদ্যমান ডেটাবেস মুছে ফেলবে এবং সমস্ত ডেটা হারিয়ে একটি নতুন তৈরি করবে।

Room টেবিলের মধ্যে সম্পর্ক কীভাবে পরিচালনা করে?

Room @Embedded অ্যানোটেশন সহ নেস্টেড অবজেক্ট এবং @Relation অ্যানোটেশন সহ সম্পর্ক ক্লাসের মাধ্যমে সম্পর্ক সমর্থন করে। টেবিল জয়েন জড়িত জটিল কোয়েরির জন্য, কাস্টম POJO ক্লাস ব্যবহার করা হয়, যাদের ফিল্ড SQL JOIN স্টেটমেন্ট সহ @Query-এর ফলাফল থেকে পূর্ণ করা হয়।

সারসংক্ষেপ

  • Room হল Android Jetpack-এর একটি ORM লাইব্রেরি যা ডিভাইসে সুবিধাজনক ডেটা স্টোরেজের জন্য SQLite-এর উপরে একটি অ্যাবস্ট্রাকশন স্তর তৈরি করে।
  • আর্কিটেকচার তিনটি উপাদানের উপর ভিত্তি করে: Entity (টেবিল স্কিমা), DAO (অপারেশন) এবং Database (প্রবেশ বিন্দু)।
  • কম্পাইল টাইমে SQL কোয়েরি যাচাই প্রধান সুবিধা, যা কোয়েরিতে রানটাইম ত্রুটি দূর করে।
  • Flow, LiveData এবং RxJava-র জন্য অন্তর্নির্মিত সমর্থন ডেটা পরিবর্তনের সময় স্বয়ংক্রিয় UI আপডেট সহ প্রতিক্রিয়াশীল আর্কিটেকচার তৈরি করতে সক্ষম করে।
  • Room-এ মাইগ্রেশন সংরক্ষিত ব্যবহারকারীর তথ্য না হারিয়ে ডেটাবেস স্কিমার নিরবচ্ছিন্ন আপডেট নিশ্চিত করে।
  • লাইব্রেরিটি Kotlin করুটিনের সাথে suspend ফাংশনের মাধ্যমে একীভূত হয়, যা ডেটার সাথে অ্যাসিঙ্ক্রোনাস কাজ সহজ করে।
  • নতুন প্রকল্পের জন্য, Room Android-এ স্থানীয় ডেটা স্টোরেজের জন্য Google-এর সরকারিভাবে সুপারিশকৃত সমাধান।

আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব

IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।

প্রকল্প নিয়ে আলোচনা করুন

আরও পড়ুন