Ինչպե՞ս կստեղծեիք տվյալների բազա։
sobes.tech AI
Պատասխան AI-ից
Օգտագործում եմ Room Persistence Library:
-
Ավելացնել կախվածությունները:
// 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("...") // Ընտրովի: Kotlin Extensions և Coroutines աջակցություն Room-ի համար implementation("androidx.room:room-ktx:$room_version") } -
Entities (սյունակների) սահմանում:
Ստեղծում եմ դաս, որը նշված է
@Entity-ով: Յուրաքանչյուր դաշտ կլինի սյունակ, իսկ@PrimaryKey-ը՝ հիմնական բանալին:// 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 (Տվյալների մուտքի օբյեկտ) սահմանում:
Ստեղծում եմ ինտերֆեյս, որը նշված է
@Dao-ով, մեթոդներով՝ տվյալների մուտք գործելու համար:// 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); } -
Տվյալների բազայի սահմանում:
Ստեղծում եմ ամփոփ դաս, որը ընդլայնում է
RoomDatabase, նշված է@Database-ով:// 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(); } -
Բազայի սկզբնականացում:
Ստանում եմ բազայի օրինակ, սովորաբար Application կամ Activity-ում:
// Activity կամ Application դասում 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() // խորհուրդ չի տրվում արտադրության համար // .fallbackToDestructiveMigration() // զգուշացեք միգրացիաների ժամանակ .build(); } return db; } } -
Տվյալների հետ գործողությունների իրականացում:
Ստանալով DAO-ի օրինակ, իրականացնում եմ գործողություններ տվյալների բազայի հետ՝ նախընտրելի է ֆոնային թելում:
// Activity-ում կամ այլ վայրում new Thread(() -> { AppDatabase db = DatabaseInitializer.getDatabase(getApplicationContext()); UserDao userDao = db.userDao(); // Վերցում List<User> allUsers = userDao.getAll(); // ... տվյալների մշակումը }).start();
Այս մոտեցումը ապահովում է SQLite-ի վրա հիմնված բազայի գործառույթների ամփոփում, հեշտացնում է կառավարման գործընթացը և ապահովում է կոմպիլյատորային ստուգում։