Что такое SQLite и каковы его основные характеристики?

«Что такое SQLite и каковы его основные характеристики?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

SQLite — это встраиваемая, автономная, безсерверная, транзакционная реляционная система управления базами данных (СУБД), реализованная в виде библиотеки на языке C.

Ключевые характеристики:

  • Без сервера (Serverless): SQLite не использует клиент-серверную модель. Библиотека напрямую работает с файлом БД на диске. Нет отдельного серверного процесса.
  • Встраиваемая (Embedded): Библиотека линкуется с приложением, становясь его частью. Это делает развертывание простым.
  • Один файл: Вся база данных (таблицы, индексы, данные) хранится в одном кроссплатформенном файле на диске.
  • Поддержка SQL: Поддерживает большую часть стандарта SQL-92, включая транзакции, представления, триггеры, внешние ключи.
  • Типизация: Использует динамическую типизацию (manifest typing). Тип значения привязан к самому значению, а не к столбцу. Столбцы могут хранить значения любого типа.

Типичные сценарии использования:

  1. Локальное хранилище для desktop/mobile приложений (браузеры, медиаплееры, мобильные ОС).
  2. Встроенная БД для IoT и устройств с ограниченными ресурсами.
  3. Формат файла для приложений (замена собственным бинарным форматам).
  4. База данных для тестирования и прототипирования благодаря простоте настройки.
  5. Кэш или промежуточное хранилище для веб-приложений.

Пример подключения в Java (через JDBC-драйвер org.xerial:sqlite-jdbc):

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

// URL указывает на файл БД. Если файла нет, он будет создан.
String url = "jdbc:sqlite:/path/to/database.db";
Connection conn = DriverManager.getConnection(url);

Statement stmt = conn.createStatement();
stmt.execute("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)");
stmt.execute("INSERT INTO users (name) VALUES ('Alice')");

conn.close();

Ограничения и когда НЕ использовать SQLite:

  • Высоконагруженные веб-сайты с большим количеством параллельных записей.
  • Системы, требующие сетевого доступа к БД (нет встроенного сетевого протокола).
  • Очень большие наборы данных (хотя поддерживает терабайты, архитектура оптимизирована для меньших объемов).
  • Ситуации, требующие сложных прав доступа пользователей (нет встроенной системы пользователей).