Room क्या है और इसकी आवश्यकता क्यों है?
Room एक लाइब्रेरी है जो Android ऐप्स में डेटाबेस के साथ काम करने के लिए उपयोग की जाती है, जो Kotlin या Java में लिखे गए हैं। यह SQLite के ऊपर एक एब्सट्रैक्शन लेयर प्रदान करती है, जिससे आप बिना कच्चे SQL क्वेरी के ऑब्जेक्ट-ओरिएंटेड तरीके से डेटाबेस का उपयोग कर सकते हैं।
Room के मुख्य लाभ:
- बॉयलरप्लेट कोड कम करना — Room एनोटेशन के आधार पर SQLite के लिए कोड ऑटोमैटिकली जनरेट करता है।
- कंपाइल टाइम पर SQL क्वेरी की जांच — ऐप चलने से पहले ही क्वेरी में गलतियां पकड़ी जाती हैं।
- Coroutines और Flow के साथ इंटीग्रेशन — रिएक्टिव प्रोग्रामिंग और एसिंक्रोनस ऑपरेशन का सपोर्ट।
- डेटाबेस माइग्रेशन — डेटा खोए बिना स्कीमा अपडेट करने के लिए बिल्ट-इन मैकेनिज्म।
- TypeConverters — डेटाबेस में जटिल डेटा टाइप (जैसे Date, List) स्टोर करने की सुविधा।
Room उन ऐप्स के लिए आदर्श है जिन्हें स्ट्रक्चर्ड डेटा को लोकल स्टोर करने की आवश्यकता होती है: नोट्स, कैश, यूज़र सेटिंग्स, ऑफलाइन मोड आदि।
Room की इंस्टॉलेशन
Room pip या npm के माध्यम से इंस्टॉल नहीं होती, क्योंकि यह Android के लिए एक लाइब्रेरी है। इसे प्रोजेक्ट में build.gradle (मॉड्यूल लेवल) फाइल के जरिए जोड़ा जाता है।
चरण 1: KSP प्लगइन (Kotlin Symbol Processing) जोड़ें
रूट build.gradle में KSP प्लगइन जोड़ें:
plugins {
id 'com.google.devtools.ksp' version '1.9.0-1.0.13' apply false
}
चरण 2: ऐप मॉड्यूल में Room कनेक्ट करें
app मॉड्यूल के build.gradle में जोड़ें:
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
id 'com.google.devtools.ksp'
}
android {
// ... आपका कॉन्फ़िगरेशन
}
dependencies {
def room_version = "2.6.1"
implementation "androidx.room:room-runtime:$room_version"
ksp "androidx.room:room-compiler:$room_version"
implementation "androidx.room:room-ktx:$room_version" // Coroutines के लिए
}
Gradle सिंक करने के बाद लाइब्रेरी उपयोग के लिए तैयार है।
कोड उदाहरण के साथ त्वरित शुरुआत
चलिए एक सरल ऐप बनाते हैं जो टास्क लिस्ट (Todo) स्टोर करता है।
चरण 1: Entity (एंटिटी) परिभाषित करें
import androidx.room.Entity
import androidx.room.PrimaryKey
@Entity(tableName = "tasks")
data class Task(
@PrimaryKey(autoGenerate = true)
val id: Int = 0,
val title: String,
val description: String,
val isCompleted: Boolean = false
)
चरण 2: DAO (Data Access Object) बनाएं
import androidx.room.*
import kotlinx.coroutines.flow.Flow
@Dao
interface TaskDao {
@Query("SELECT * FROM tasks ORDER BY id DESC")
fun getAllTasks(): Flow<List<Task>>
@Insert
suspend fun insertTask(task: Task)
@Update
suspend fun updateTask(task: Task)
@Delete
suspend fun deleteTask(task: Task)
}
चरण 3: डेटाबेस बनाएं
import android.content.Context
import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase
@Database(entities = [Task::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
abstract fun taskDao(): TaskDao
companion object {
@Volatile
private var INSTANCE: AppDatabase? = null
fun getDatabase(context: Context): AppDatabase {
return INSTANCE ?: synchronized(this) {
val instance = Room.databaseBuilder(
context.applicationContext,
AppDatabase::class.java,
"app_database"
).build()
INSTANCE = instance
instance
}
}
}
}
चरण 4: Activity या ViewModel में उपयोग करें
class MainActivity : AppCompatActivity() {
private lateinit var db