ไลบรารีความต่อเนื่องของห้องมีประโยชน์หลายอย่างมากกว่าการใช้ SQLite API โดยตรง:
- การยืนยันเวลาคอมไพล์ของการค้นหา SQL
- คําอธิบายประกอบตามความสะดวกเพื่อลดต้นแบบที่ซ้ำกันและมีโอกาสเกิดข้อผิดพลาดได้ง่าย รหัส
- เส้นทางการย้ายข้อมูลฐานข้อมูลที่มีประสิทธิภาพ
หากแอปของคุณใช้ SQLite แบบที่ไม่ใช่ห้องในตอนนี้ โปรดอ่านหน้านี้ เพื่อดูวิธีย้ายข้อมูลแอปไปใช้ห้องแชทแทน หากห้องแชทเป็นรายการแรก การใช้งาน SQLite ที่คุณใช้ในแอป โปรดดูที่บันทึกข้อมูลในเครื่อง ฐานข้อมูลที่ใช้ Room สำหรับข้อมูลการใช้งานพื้นฐาน
ขั้นตอนการย้ายข้อมูล
ทำตามขั้นตอนต่อไปนี้เพื่อย้ายข้อมูลการใช้งาน SQLite ไปยังห้องแชท ถ้า การใช้งาน SQLite ใช้ฐานข้อมูลขนาดใหญ่หรือการค้นหาที่ซับซ้อน ต้องการทยอยย้ายไปยังห้องแชททีละน้อย ดูการย้ายข้อมูลที่เพิ่มขึ้น เพื่อเพิ่มกลยุทธ์การย้ายข้อมูล
อัปเดตทรัพยากร Dependency
หากต้องการใช้ Room ในแอป คุณต้องระบุทรัพยากร Dependency ที่เหมาะสมไว้ใน
build.gradle
ของแอป ดูการตั้งค่าสำหรับ
ทรัพยากร Dependency ของห้องล่าสุด
อัปเดตคลาสของโมเดลในเอนทิตีข้อมูล
ห้องแชทใช้เอนทิตีข้อมูลเพื่อ แสดงตารางในฐานข้อมูล คลาสเอนทิตีแต่ละคลาสจะแสดงแทนตารางและ มีช่องที่แสดงคอลัมน์ในตารางนั้น ทำตามขั้นตอนต่อไปนี้เพื่ออัปเดต คลาสโมเดลที่มีอยู่ให้เป็นเอนทิตีห้องแชท
- เขียนคำอธิบายประกอบประกาศชั้นเรียนด้วย
@Entity
เพื่อระบุว่าเป็น เอนทิตีห้อง คุณสามารถเลือกใช้tableName
ไปยัง ให้ระบุว่าตารางผลลัพธ์ควรมีชื่อที่ต่างจาก ชื่อชั้นเรียน - ใส่คำอธิบายประกอบให้กับฟิลด์คีย์หลักด้วย
@PrimaryKey
- หากคอลัมน์ใดๆ ในตารางผลลัพธ์ควรมีชื่อที่
แตกต่างจากชื่อของฟิลด์ที่ตรงกัน ให้ใส่คำอธิบายประกอบฟิลด์ด้วย
@ColumnInfo
และตั้งค่าname
พร็อพเพอร์ตี้ไปยัง ชื่อคอลัมน์ที่ถูกต้อง - หากคลาสมีฟิลด์ที่คุณไม่ต้องการให้คงอยู่ในฐานข้อมูล
ใส่คำอธิบายประกอบในช่องเหล่านั้นด้วย
@Ignore
เพื่อแสดงห้องนั้น ไม่ควรสร้างคอลัมน์ให้กับคอลัมน์ในตารางที่เกี่ยวข้อง - ถ้าคลาสมีเมธอดตัวสร้างมากกว่า 1 วิธี ให้ระบุตัวสร้าง
ควรใช้ห้องโดยใส่
@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; } }
สร้าง DAO
Room ใช้ออบเจ็กต์การเข้าถึงข้อมูล (DAO) เพื่อกำหนดเมธอดในการเข้าถึงฐานข้อมูล ทำตามคำแนะนำในหัวข้อการเข้าถึงข้อมูลโดยใช้ห้องแชท DAO เพื่อแทนที่การค้นหาที่มีอยู่ ด้วย DAO
สร้างคลาสฐานข้อมูล
การใช้งาน 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
ออบเจ็กต์
ระบุเส้นทางการย้ายข้อมูลเพื่อให้ห้องแชทเก็บข้อมูลที่มีอยู่แล้วในฐานข้อมูล
ตราบใดที่สคีมาของฐานข้อมูลไม่มีการเปลี่ยนแปลง ค่านี้อาจว่างเปล่า
การใช้งานของคุณ
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 ของคุณ
การย้ายข้อมูลที่เพิ่มขึ้น
หากแอปของคุณใช้ฐานข้อมูลขนาดใหญ่และซับซ้อน ก็อาจย้ายข้อมูลไม่ได้
แอปไปยังห้องแชทได้พร้อมกันทีเดียว แต่คุณสามารถใช้ข้อมูล
และฐานข้อมูลห้องเป็นขั้นตอนแรก แล้วจึงย้ายข้อมูลวิธีการค้นหา
เป็น DAO ในภายหลัง คุณสามารถทำได้โดยแทนที่ตัวช่วยฐานข้อมูลที่กำหนดเองของคุณ
ด้วยฟังก์ชัน
SupportSQLiteOpenHelper
ที่คุณได้รับจาก
RoomDatabase.getOpenHelper()
แหล่งข้อมูลเพิ่มเติม
ดูข้อมูลเพิ่มเติมเกี่ยวกับการย้ายข้อมูลจาก SQLite ไปยังห้องแชทได้ที่หัวข้อเพิ่มเติมต่อไปนี้ แหล่งข้อมูล: