คลาสฐานข้อมูล Room
สร้างและเข้าถึงฐานข้อมูลของคุณ
คลาสฐานข้อมูล Room เป็นบทเรียน Android Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Android Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Android Academy มีบทเรียนทั้งหมด 4 บทเรียน
เชื่อมทุกส่วนเข้าด้วยกัน
คลาสฐานข้อมูลคือจุดเข้าถึงหลัก โดยจะแสดงรายการ Entity ประกาศเวอร์ชัน และเปิดเผย DAO ของคุณ
คำอธิบายกำกับ @Database
สร้างคลาสนามธรรมที่สืบทอดจาก RoomDatabase และใส่คำอธิบายกำกับด้วย @Database
import androidx.room.Database
import androidx.room.RoomDatabase
@Database(
entities = [User::class],
version = 1
)
abstract class AppDatabase : RoomDatabase() {
abstract fun userDao(): UserDao
}แสดงรายการ Entity และเวอร์ชัน
อาร์เรย์ entities บอก Room ว่าต้องสร้างตารางใดบ้าง ส่วนหมายเลข version ใช้ติดตามการเปลี่ยนแปลงโครงสร้างฐานข้อมูลสำหรับการย้ายข้อมูล
การเปิดเผย DAO
สำหรับ DAO แต่ละตัว ให้ประกาศฟังก์ชันนามธรรมที่ส่งคืนชนิดของ DAO นั้น Room จะนำไปใช้งานให้
abstract fun userDao(): UserDao
abstract fun noteDao(): NoteDaoการสร้างฐานข้อมูล
ใช้ Room.databaseBuilder เพื่อสร้างอินสแตนซ์ โดยต้องระบุบริบทของแอปพลิเคชัน คลาส และชื่อฐานข้อมูล
val db = Room.databaseBuilder(
context.applicationContext,
AppDatabase::class.java,
"app.db"
).build()ทำให้เป็น Singleton
การสร้างฐานข้อมูลใช้ทรัพยากรมาก จึงควรสร้างอินสแตนซ์เดียวสำหรับทั้งแอป รูปแบบที่ใช้กันทั่วไปคือออบเจกต์คู่สหายร่วมกับตัวเข้าถึงที่ทำงานแบบซิงโครไนซ์
companion object {
@Volatile private var INSTANCE: AppDatabase? = null
fun get(context: Context): AppDatabase =
INSTANCE ?: synchronized(this) {
INSTANCE ?: build(context).also { INSTANCE = it }
}
}เหตุใด Singleton จึงสำคัญ
อินสแตนซ์ฐานข้อมูลหลายตัวจะเปิดการเชื่อมต่อหลายรายการไปยังไฟล์เดียวกัน ทำให้ข้อมูลไม่สอดคล้องกันและสิ้นเปลืองหน่วยความจำ อินสแตนซ์ที่ใช้ร่วมกันเพียงตัวเดียวช่วยรักษาแหล่งข้อมูลจริงเพียงหนึ่งเดียว
การจัดเตรียมด้วย Hilt
ในแอปจริง โดยทั่วไปคุณควรจัดเตรียมฐานข้อมูลผ่านการแทรกการพึ่งพา (จะกล่าวถึงในหลักสูตร Hilt) แทนการใช้ Singleton ด้วยตนเอง
@Provides
@Singleton
fun provideDb(@ApplicationContext ctx: Context) =
Room.databaseBuilder(ctx, AppDatabase::class.java, "app.db")
.build()การเปลี่ยนแปลงโครงสร้างและการย้ายข้อมูล
เมื่อคุณเปลี่ยนแปลง Entity ให้เพิ่มค่า version และจัดเตรียมการย้ายข้อมูลที่อธิบาย SQL สำหรับแปลงข้อมูลเก่า
val MIGRATION_1_2 = object : Migration(1, 2) {
override fun migrate(db: SupportSQLiteDatabase) {
db.execSQL("ALTER TABLE users ADD COLUMN age INTEGER NOT NULL DEFAULT 0")
}
}การย้ายข้อมูลแบบทำลาย
ระหว่างการพัฒนาในช่วงแรก คุณอาจใช้ fallbackToDestructiveMigration() ซึ่งจะลบและสร้างตารางใหม่แทนการย้ายข้อมูล ห้ามนำวิธีนี้ไปใช้ในระบบจริงที่มีข้อมูลผู้ใช้จริงโดยเด็ดขาด
การเข้าถึง DAO
เมื่อมีอินสแตนซ์ฐานข้อมูลแล้ว ให้รับ DAO และเรียกใช้เมธอดภายในคอร์รูทีน
val dao = db.userDao()
viewModelScope.launch {
dao.insert(User(1, "Ada", "ada@x.com"))
}ตรวจสอบความเข้าใจอย่างรวดเร็ว
ทดสอบความเข้าใจเกี่ยวกับคลาสฐานข้อมูลของคุณ
สรุปทบทวน
สิ่งที่คุณได้เรียนรู้:
@Databaseแสดงรายการ Entity กำหนดเวอร์ชัน และเปิดเผย DAO- สร้างด้วย
Room.databaseBuilderในรูปแบบอินสแตนซ์เดียว - การเปลี่ยนแปลงโครงสร้างต้องเพิ่มเวอร์ชันและมีการย้ายข้อมูล
คำถามที่พบบ่อย
บทเรียน “คลาสฐานข้อมูล Room” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “คลาสฐานข้อมูล Room” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Android Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Android Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “คลาสฐานข้อมูล Room”
สร้างและเข้าถึงฐานข้อมูลของคุณ คุณปฏิบัติ Android Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Android Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Android Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “คลาสฐานข้อมูล Room” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Android Academy นี้ได้ไหม
ได้ บทเรียน Android Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เอนทิตีและ DAO
- คลาสฐานข้อมูล Room
- คำค้นและความสัมพันธ์
- การสังเกตข้อมูลด้วย Flow