לספריית מתמידים של חדר יש כמה יתרונות על פני השימוש ב-SQLite ממשקי API באופן ישיר:
- אימות-זמן של שאילתות SQL
- הערות נוחות שממזערות בקשות סטנדרטיות שחוזרות על עצמן או שעלולות לגרום לשגיאות. קוד
- נתיבי העברה יעילים יותר של מסדי נתונים
אם האפליקציה שלך משתמשת כרגע בהטמעה של SQLite מחוץ לחדר, כדאי לקרוא את הדף הזה. כדי ללמוד איך להעביר את האפליקציה לשימוש בחדר. אם 'חדר' הוא הראשון ההטמעה של SQLite שבה אתם משתמשים באפליקציה. מידע נוסף זמין במאמר שמירת נתונים בקובץ מקומי מסד נתונים באמצעות Room בשביל מידע בסיסי על שימוש.
שלבי ההעברה
כדי להעביר את ההטמעה של SQLite אל Room, מבצעים את השלבים הבאים. אם המיקום ב-SQLite משתמשים במסד נתונים גדול או בשאילתות מורכבות, הם מעדיפים לעבור לחדר בהדרגה. ראו העברה מצטברת לאסטרטגיית העברה מצטברת.
עדכון יחסי התלות
כדי להשתמש ב'חדר' באפליקציה, צריך לכלול את יחסי התלות המתאימים באפליקציה
את קובץ build.gradle
של האפליקציה. מידע נוסף מופיע בקטע הגדרה
את יחסי התלות העדכניים ביותר של חדרים.
עדכון סיווגי המודלים לישויות נתונים
החדר משתמש בישויות נתונים כדי שמייצגים את הטבלאות שבמסד הנתונים. כל מחלקה של ישות מייצגת טבלה ו כולל שדות שמייצגים עמודות בטבלה הזו. כדי לעדכן, פועלים לפי השלבים הבאים המחלקות הקיימות של המודלים בתור ישויות בחדר:
- צריך להוסיף הערות להצהרת הכיתה עם
@Entity
כדי לציין ש- ישות החדר. אפשר גם להשתמשtableName
נכס כדי מציינים שהשם של הטבלה שמתקבלת שונה מ- שם הכיתה. - מוסיפים הערות לשדה המפתח הראשי עם
@PrimaryKey
- אם אחת מהעמודות בטבלה שמתקבלת צריכה להיות בעלת שם
שונה מהשם של השדה התואם, מוסיפים הערות לשדה עם
@ColumnInfo
ומגדירים אתname
לנכס השם הנכון של העמודה. - אם בכיתה יש שדות שאתם לא רוצים שיישמרו במסד הנתונים,
להוסיף הערות לשדות האלה
@Ignore
כדי לציין שהחדר לא ליצור עבורם עמודות בטבלה המתאימה. - אם למחלקה יש יותר משיטה אחת של בנאי, מציינים איזה constructor
כדי להשתמש בחדר, צריך להוסיף הערות לכל הבנאים האחרים באמצעות
@Ignore
.
Kotlin
@Entity(tableName = "users") data class User( @PrimaryKey @ColumnInfo(name = "userid") val mId: String, @ColumnInfo(name = "username") val mUserName: String?, @ColumnInfo(name = "last_update") val mDate: Date?, )
Java
@Entity(tableName = "users") public class User { @PrimaryKey @ColumnInfo(name = "userid") private String mId; @ColumnInfo(name = "username") private String mUserName; @ColumnInfo(name = "last_update") private Date mDate; @Ignore public User(String userName) { mId = UUID.randomUUID().toString(); mUserName = userName; mDate = new Date(System.currentTimeMillis()); } public User(String id, String userName, Date date) { this.mId = id; this.mUserName = userName; this.mDate = date; } }
יצירת DAOs
החדר משתמש באובייקטים של גישה לנתונים (DAOs) כדי להגדיר methods לגישה למסד הנתונים. פועלים לפי ההנחיות שמפורטות במאמר גישה לנתונים באמצעות 'חדר'. DAOs שיחליפו את השאילתה הקיימת עם DAOs.
יצירת מחלקה של מסד נתונים
הטמעות של Room משתמשות במחלקה של מסד נתונים כדי לנהל מכונה של
מסד נתונים. המחלקה של מסד הנתונים אמורה להאריך
RoomDatabase
והתייחסות לכל
של הישויות ו-DAO שהגדרתם.
Kotlin
@Database(entities = [User::class], version = 2) @TypeConverters(DateConverter::class) abstract class UsersDatabase : RoomDatabase() { abstract fun userDao(): UserDao }
Java
@Database(entities = {User.class}, version = 2) @TypeConverters(DateConverter.class) public abstract class UsersDatabase extends RoomDatabase { public abstract UserDao userDao(); }
להגדיר נתיב העברה
מכיוון שמספר הגרסה של מסד הנתונים משתנה, עליכם להגדיר
Migration
אובייקט כדי
לציין נתיב העברה, כדי ש- Room ישמור את הנתונים הקיימים במסד הנתונים.
כל עוד הסכימה של מסד הנתונים לא משתנה, השדה הזה יכול להיות ריק
יישום בפועל.
Kotlin
val MIGRATION_1_2 = object : Migration(1, 2) { override fun migrate(database: SupportSQLiteDatabase) { // Empty implementation, because the schema isn't changing. } }
Java
static final Migration MIGRATION_1_2 = new Migration(1, 2) { @Override public void migrate(SupportSQLiteDatabase database) { // Empty implementation, because the schema isn't changing. } };
למידע נוסף על נתיבי העברה של מסדי נתונים בחדר, אפשר לעיין במאמר העברת מסד נתונים.
עדכון היצירה של מסד הנתונים
אחרי שהגדרתם מחלקה של מסד נתונים ונתיב העברה, אפשר להשתמש
Room.databaseBuilder
כדי ליצור מופע של מסד הנתונים שחל בו נתיב ההעברה:
Kotlin
val db = Room.databaseBuilder( applicationContext, AppDatabase::class.java, "database-name" ) .addMigrations(MIGRATION_1_2).build()
Java
db = Room.databaseBuilder( context.getApplicationContext(), UsersDatabase.class, "database-name" ) .addMigrations(MIGRATION_1_2).build();
בדיקת ההטמעה
חשוב לוודא שאתם בודקים את ההטמעה החדשה של החדר:
- צריך לפעול לפי ההנחיות בקטע בדיקה העברות לבדיקה את המיגרציה של מסד הנתונים.
- צריך לפעול לפי ההנחיות שמפורטות בקטע בדיקת מסד נתונים כדי לבדוק את ה-DAO שיטות.
מיגרציה מצטברת
אם האפליקציה משתמשת במסד נתונים גדול ומורכב, ייתכן שלא ניתן יהיה להעביר אותה
להעביר את האפליקציה לחדר. במקום זאת, אפשר להטמיע את הנתונים
בשלב הראשון, ומסד הנתונים של Room, ואז מעבירים את שיטות השאילתה
ל-DAOs מאוחר יותר. כדי לעשות זאת, עליך להחליף את ה-database helper המותאם אישית שלך
class עם הפונקציה
SupportSQLiteOpenHelper
שקיבלתם
RoomDatabase.getOpenHelper()
.
מקורות מידע נוספים
לקבלת מידע נוסף על מיגרציה מ-SQLite ל- Room, אפשר לעיין במקורות הבאים: משאבים: