Siz qanday ma'lumotlar bazasini yaratgan bo'lar edingiz?
sobes.tech AI
AIdan javob
Men Room Persistence kutubxonasidan foydalanaman.
-
Bog'lamalarni qo'shish:
// build.gradle (ilova darajasida) dependencies { def room_version = "2.5.2" // yoki joriy versiya implementation("androidx.room:room-runtime:$room_version") annotationProcessor("androidx.room:room-compiler:$room_version") // Kotlin uchun kapt("...") ni ishlating // Ixtiyoriy: Kotlin kengaytmalari va Coroutines uchun Room qo'llab-quvvatlash implementation("androidx.room:room-ktx:$room_version") } -
Entitilar (jadvalar)ni aniqlash:
@Entitybilan belgilangan sinf yarataman. Har bir maydon ustun bo'ladi va@PrimaryKeyasosiy kalit bo'ladi.// User.java import androidx.room.Entity; import androidx.room.PrimaryKey; @Entity(tableName = "users") public class User { @PrimaryKey(autoGenerate = true) public int id; public String firstName; public String lastName; } -
DAO (Ma'lumotlarga kirish obyekti)ni aniqlash:
@Daobilan belgilangan interfeys yarataman, ma'lumotlarga kirish uchun metodlar bilan (kiritish, yangilash, o'chirish, so'rovlar).// UserDao.java import androidx.room.Dao; import androidx.room.Delete; import androidx.room.Insert; import androidx.room.OnConflictStrategy; import androidx.room.Query; import androidx.room.Update; import java.util.List; @Dao public interface UserDao { @Query("SELECT * FROM users") List<User> getAll(); @Query("SELECT * FROM users WHERE id IN (:userIds)") List<User> loadAllByIds(int[] userIds); @Query("SELECT * FROM users WHERE first_name LIKE :first AND " + "last_name LIKE :last LIMIT 1") User findByName(String first, String last); @Insert(onConflict = OnConflictStrategy.IGNORE) void insertAll(User... users); @Delete void delete(User user); @Update void updateUsers(User... users); } -
Ma'lumotlar bazasini aniqlash:
RoomDatabasekengaytirilgan abstrakt sinf yarataman va@Databasebilan belgilayman. Entitilar va DAO lar ro'yxatini o'z ichiga oladi.// AppDatabase.java import androidx.room.Database; import androidx.room.RoomDatabase; @Database(entities = {User.class}, version = 1) public abstract class AppDatabase extends RoomDatabase { public abstract UserDao userDao(); } -
Ma'lumotlar bazasini boshlash:
Ma'lumotlar bazasining nusxasini olaman, odatda Application sinfi yoki Activityda (lekin odatda Applicationda singleton uchun).
// Activity yoki Application sinfida import android.content.Context; import androidx.room.Room; public class DatabaseInitializer { private static AppDatabase db; public static synchronized AppDatabase getDatabase(Context context) { if (db == null) { db = Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, "database-name") // .allowMainThreadQueries() // Tavsiya etilmaydi ishlab chiqarishda // .fallbackToDestructiveMigration() // Migratsiyalar bilan ehtiyot bo'ling .build(); } return db; } } -
Ma'lumotlar bilan operatsiyalarni bajarish:
DAO nusxasini olgan holda, ma'lumotlar bazasida operatsiyalarni bajaraman, odatda fon ipida (masalan,
AsyncTask,Executors, Coroutines, RxJava yordamida).// Activity yoki boshqa joyda new Thread(() -> { AppDatabase db = DatabaseInitializer.getDatabase(getApplicationContext()); UserDao userDao = db.userDao(); // Qo'shish User user1 = new User(); user1.firstName = "John"; user1.lastName = "Doe"; userDao.insertAll(user1); // O'qish List<User> allUsers = userDao.getAll(); // ... ma'lumotlarni ishlash }).start();
Ushbu yondashuv SQLite ustidan abstraktsiya taqdim etadi, ma'lumotlar bazasini boshqarishni soddalashtiradi va konstruktor tekshiruvini ta'minlaydi.