← Назад к вопросам
Какая база данных используется по умолчанию в Android?
1.0 Junior🔥 201 комментариев
#Работа с данными
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
База данных в Android
По умолчанию в Android используется SQLite. Это встроенная, легковесная реляционная БД.
SQLite - встроенная база
Характеристики:
- Встроена в Android (не нужна отдельная установка)
- Реляционная база данных (SQL)
- Хранится как файл на устройстве
- Легкая и быстрая
- Поддерживает ACID транзакции
// Использование SQLite через SQLiteOpenHelper
class DatabaseHelper(context: Context) : SQLiteOpenHelper(
context,
DATABASE_NAME,
null,
DATABASE_VERSION
) {
companion object {
const val DATABASE_NAME = "users.db"
const val DATABASE_VERSION = 1
}
override fun onCreate(db: SQLiteDatabase) {
val createTableSQL = """
CREATE TABLE users (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
email TEXT NOT NULL
)
""".trimIndent()
db.execSQL(createTableSQL)
}
override fun onUpgrade(
db: SQLiteDatabase,
oldVersion: Int,
newVersion: Int
) {
db.execSQL("DROP TABLE IF EXISTS users")
onCreate(db)
}
}
Место хранения SQLite
данные приложения:
/data/data/com.example.app/databases/users.db
Использование через Room (рекомендуется)
@Entity(tableName = "users")
data class User(
@PrimaryKey val id: Int,
val name: String,
val email: String
)
@Dao
interface UserDao {
@Insert
suspend fun insert(user: User)
@Query("SELECT * FROM users WHERE id = :userId")
suspend fun getUser(userId: Int): User
@Update
suspend fun update(user: User)
@Delete
suspend fun delete(user: User)
}
@Database(entities = [User::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
abstract fun userDao(): UserDao
companion object {
private var instance: AppDatabase? = null
fun getInstance(context: Context): AppDatabase {
return instance ?: synchronized(this) {
Room.databaseBuilder(
context,
AppDatabase::class.java,
"app_database.db"
).build().also { instance = it }
}
}
}
}
Прямое использование SQLiteDatabase
val db = databaseHelper.writableDatabase
// Вставка
val values = ContentValues().apply {
put("name", "John")
put("email", "john@example.com")
}
val rowId = db.insert("users", null, values)
// Чтение
val cursor = db.query(
"users",
arrayOf("id", "name", "email"),
"id = ?",
arrayOf("1"),
null,
null,
null
)
while (cursor.moveToNext()) {
val id = cursor.getInt(0)
val name = cursor.getString(1)
val email = cursor.getString(2)
}
cursor.close()
// Обновление
val updateValues = ContentValues().apply {
put("name", "Jane")
}
db.update("users", updateValues, "id = ?", arrayOf("1"))
// Удаление
db.delete("users", "id = ?", arrayOf("1"))
Транзакции
db.beginTransaction()
try {
// Несколько операций
db.insert("users", null, values1)
db.insert("users", null, values2)
db.insert("users", null, values3)
db.setTransactionSuccessful() // Подтвердить
} finally {
db.endTransaction()
}
// Или в корутине с Room
appDatabase.withTransaction {
userDao.insert(user1)
userDao.insert(user2)
userDao.insert(user3)
}
SharedPreferences - альтернатива для простых данных
// Для простых данных (не БД)
val prefs = context.getSharedPreferences("app_prefs", Context.MODE_PRIVATE)
// Сохранение
prefs.edit().apply {
putString("username", "John")
putInt("age", 30)
putBoolean("is_logged_in", true)
apply()
}
// Чтение
val username = prefs.getString("username", "default")
val age = prefs.getInt("age", 0)
val isLoggedIn = prefs.getBoolean("is_logged_in", false)
DataStore - новая альтернатива SharedPreferences
val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "settings")
class SettingsRepository(private val context: Context) {
suspend fun saveUsername(username: String) {
context.dataStore.edit { preferences ->
preferences[stringPreferencesKey("username")] = username
}
}
fun getUsername(): Flow<String> {
return context.dataStore.data.map { preferences ->
preferences[stringPreferencesKey("username")] ?: ""
}
}
}
Сравнение хранилищ
| Хранилище | Использование | Размер | Type-safe |
|---|---|---|---|
| SQLite | Сложные данные | Большой | Нет |
| Room | SQLite (recommended) | Большой | Да |
| SharedPreferences | Простые параметры | Маленький | Нет |
| DataStore | Простые параметры | Маленький | Да |
| Firebase Realtime | Cloud | Облако | Нет |
| Cloud Firestore | Cloud | Облако | Да |
Лучшие практики
✅ Делай так:
- Используй Room для SQLite
- Используй DataStore вместо SharedPreferences
- Кешируй часто используемые данные
- Используй транзакции для групповых операций
- Выполняй БД операции на IO потоке
❌ Избегай:
- Прямого использования SQLiteDatabase
- SharedPreferences для больших объемов
- БД операций на Main потоке
- Блокирующих операций БД
Вывод
В Android по умолчанию используется SQLite:
- Встроена и не требует установки
- Реляционная БД (SQL)
- Хранится в файле на устройстве
- Лучше всего использовать через Room ORM
- Для простых данных есть DataStore