امنیتاندرویدترفند هاترفند های IOSترفندهای اندرویدتکنولوژیسئو
آموزش استفاده از Room در اندروید

آموزش استفاده از Room در اندروید : البته! آموزش استفاده از Room در اندروید یکی از بهترین راهها برای مدیریت دیتابیس SQLite به صورت ساده و امن است.
Room چیست؟
Room یک لایبرری است که بخشی از معماری Jetpack گوگل است و یک لایه انتزاعی روی SQLite ارائه میدهد تا کار با دیتابیس را راحتتر کند.
مراحل استفاده از Room در اندروید
۱. افزودن dependencyها به build.gradle:
dependencies {
def room_version = "2.5.2" // آخرین نسخه را چک کنید
implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version" // برای جاوا
// اگر از Kotlin استفاده میکنید:
kapt "androidx.room:room-compiler:$room_version"
}
2. تعریف Entity (جدول دیتابیس):
یک کلاس ایجاد کنید که نماینده یک جدول در دیتابیس باشد.
مثال:
import androidx.room.Entity
import androidx.room.PrimaryKey
@Entity(tableName = "users")
data class User(
@PrimaryKey(autoGenerate = true) val id: Int = 0,
val name: String,
val age: Int
)
3. تعریف DAO (Data Access Object):
DAO جایی است که کوئریها و عملیات روی دیتابیس نوشته میشود.
مثال:
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.Query
@Dao
interface UserDao {
@Insert
suspend fun insertUser(user: User)
@Query("SELECT * FROM users")
suspend fun getAllUsers(): List<User>
}
4. تعریف Database:
کلاس انتزاعی که دیتابیس را تعریف میکند.
import androidx.room.Database
import androidx.room.RoomDatabase
@Database(entities = [User::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
abstract fun userDao(): UserDao
}
5. ساخت نمونه دیتابیس:
مثلاً در کلاس Application یا هر جای دیگر:
import androidx.room.Room
val db = Room.databaseBuilder(
context.applicationContext,
AppDatabase::class.java, "my-database"
).build()
val userDao = db.userDao()
6. استفاده از DAO برای عملیات:
مثلاً درج و دریافت اطلاعات:
// داخل یک CoroutineScope
CoroutineScope(Dispatchers.IO).launch {
userDao.insertUser(User(name = "Ali", age = 25))
val users = userDao.getAllUsers()
withContext(Dispatchers.Main) {
// آپدیت UI با دادهها
}
}
نکات مهم:
- عملیات دیتابیس باید در Thread غیر از UI اجرا شود (مثلاً با Coroutine یا AsyncTask).
- Room با LiveData و Flow هم سازگار است که برای دریافت داده به صورت reactive مناسب است.
- میتوانید نسخه دیتابیس را بالا ببرید و Migration تعریف کنید.
حتما! اینجا مزایا و معایب استفاده از Room در اندروید رو برات خلاصه کردم:
مزایای Room
- سادهسازی کار با SQLite
- به جای نوشتن کوئریهای پیچیده SQL به صورت دستی، با استفاده از انوتیشنها و DAO، کد تمیزتر و راحتتر مینویسی.
- کامپایلتایم چک کردن کوئریها
- کوئریها هنگام کامپایل بررسی میشوند و اگر اشتباه باشند، خطا میدهند، در نتیجه خطاهای زمان اجرا کاهش پیدا میکند.
- یکپارچگی با معماریهای Jetpack
- خیلی خوب با LiveData، Flow، ViewModel و سایر کامپوننتها سازگار است و باعث ساخت اپلیکیشنهای ساختارمند و واکنشی میشود.
- حفظ امنیت و پایداری بیشتر
- استفاده از روشهای استاندارد و بهینه باعث میشود از اشتباهات رایج SQL جلوگیری شود.
- پشتیبانی از Migration
- تغییرات ساختار دیتابیس (مثل اضافه کردن ستون) به سادگی با Migration قابل پیادهسازی است.
- پشتیبانی از Kotlin Coroutines و RxJava
- اجرای آسان عملیات دیتابیس به صورت غیرهمزمان و واکنشی.
معایب Room
- انعطاف کمتر نسبت به SQL خام
- اگر کوئری خیلی پیچیدهای نیاز داشته باشی یا بخواهی از امکانات خاص SQLite استفاده کنی، ممکن است محدود باشی و مجبور شوی به SQL خام برگردی.
- افزایش حجم اپلیکیشن
- اضافه کردن لایبرری Room حجم APK را کمی افزایش میدهد.
- پیچیدگی در Migrationهای پیچیده
- در صورت تغییرات پیچیده در دیتابیس، پیادهسازی Migration میتواند چالشبرانگیز باشد.
- عملکرد کمتر نسبت به SQLite خام (در موارد خاص)
- چون یک لایه انتزاعی اضافه میکند، ممکن است در موارد خیلی حساس به عملکرد کمی کندتر باشد، ولی در اکثر اپها این موضوع قابل چشمپوشی است.
- نیاز به یادگیری و رعایت قواعد خاص
- برای استفاده صحیح باید با انوتیشنها، DAO و مفاهیم معماری آشنا باشی.



