Что такое SQLite и зачем она нужна?

  1. Главная
  2. Туториалы
  3. Базы данных
  4. SQLite

SQLite — это встроенная библиотека, которая реализует автономный, безсерверный, нулевой конфигурации, транзакционный механизм СУБД SQL.

 Это база данных, которая настроена на нуль, что означает, как и другие базы данных, которые вам не нужно настраивать в вашей системе.

SQLite не является автономным процессом, как другие базы данных, вы можете связать его статически или динамически в соответствии с вашим требованием с вашим приложением. SQLite напрямую обращается к своим файлам хранения.

Особенности SQLite

  • SQLite не требует отдельного процесса сервера или системы для работы (без сервера).
  • SQLite поставляется с нулевой конфигурацией, что означает отсутствие необходимости в настройке или администрировании.
  • Полная база данных SQLite хранится в одном кросс-платформенном диске.
  • SQLite очень маленький и легкий, менее 400KiB полностью сконфигурированный или менее 250KiB с дополнительными функциями, опущенными.
  • SQLite является автономным, что означает отсутствие внешних зависимостей.
  • SQLite-транзакции полностью совместимы с ACID, обеспечивая безопасный доступ к нескольким процессам или потокам.
  • SQLite поддерживает большинство функций языка запросов, найденных в стандарте SQL92 (SQL2).
  • SQLite написан на ANSI-C и предоставляет простой и простой в использовании API.
  • SQLite доступен в UNIX (Linux, Mac OS-X, Android, iOS) и Windows (Win32, WinCE, WinRT).

Ограничения SQLite

В SQLite имеется несколько неподдерживаемых функций SQL92:

Название Описание
RIGHT OUTER JOIN Внедрен только LEFT OUTER JOIN.
FULL OUTER JOIN Внедрен только LEFT OUTER JOIN.
ALTER TABLE Поддерживаются варианты RENAME TABLE и ADD COLUMN команды ALTER TABLE. DROP COLUMN, ALTER COLUMN, ADD CONSTRAINT не поддерживаются.
Trigger support Для каждого триггера ROW поддерживаются, но не для триггеров EACH STATEMENT.
VIEWs VIEWs в SQLite доступны только для чтения. Вы не можете выполнять оператор DELETE, INSERT или UPDATE в представлении.
GRANT и REVOKE Единственными правами доступа, которые могут быть применены, являются обычные разрешения доступа к файлу базовой операционной системы.

Команды SQLite

Стандартные команды SQLite для взаимодействия с реляционными базами данных аналогичны SQL. Это CREATE, SELECT, INSERT, UPDATE, DELETE и DROP. 

Название Описание
CREATE Создание новой таблицы, представление таблицы или другой объект в базе данных.
ALTER Изменяет существующий объект базы данных, такой как таблица.
DROP
Удаляет всю таблицу, представление таблицы или другого объекта в базе данных.
INSERT Создает запись
UPDATE Изменяет записи
DELETE Удаляет записи
SELECT Извлекает определенные записи из одной или нескольких таблиц

 

Блокнот с использованием SQLite— Ruby Rush

На прошлом уроке мы познакомились с понятием баз данных. В этом уроке мы подключим базу данных SQlite к нашей программе на ruby: блокноту.

План урока

  1. gem для работы с SQlite
  2. Подключаем БД к блокноту

Устройство СУБД

СУБД может состоять из двух приложений: одно (сервер) постоянно запущено в отдельном процессе и крутится в памяти процессора, а другое (клиент) соединяется с первым для отправки SQL-запросов. Такие СУБД называются клиент-серверными, к ним, например, относятся СУБД MySQL и PostgreSQL.

SQlite не является клиент-серверной СУБД. В случае с SQLite приложение для работы с данными запускаться по мере необходимости. В любом случае СУБД всегда предоставляет какой-то интерфейс для обращений к ней. Чтобы пользоваться обращениями в (практически) любом языке программирования к БД обычно есть подходящие библиотеки, где этот интерфейс реализован.

Постановка задачи, проектируем БД для блокнота

Мы хотим, чтобы наш дневник пользовался SQlite-базой для хранения всех записей. Программа должна сохранять новую запись в базе при добавлении и по запросу пользователя выводить последние записи определенного типа (Memo, Link, Task).

Каждая таблица в БД представляет какую-то сущность, например, содержит записи для каждого из объектов какого-то класса.

Для удобства все записи мы будем хранить в одной таблице posts. Как и у класса, поля в этой таблице играют ту же роль, это просто свойства этой сущности. Разумно назвать поля таблицы также, как и поля класса.

Но мы не хотим делать отдельную таблицу для каждого из дочерних классов: Memo, Link и Task. Тогда у этой таблицы должен быть исчерпывающий набор полей: чтобы каким бы ни была запись, мы бы могли её уложить в строку этой таблицы. Также у нас в таблице должно быть поле type, чтобы мы могли понять, что это за запись.

С помощью нашего SQlite менеджера создадим базу данных notepad.sqlite в папке нашего урока c:\rubytut2\lesson12 и в ней создайте таблицу для нашего блокнота. Внимательно следите за типами полей.

Установка gem-а sqlite3

Для того, чтобы добавить в наши программы методы работы с базами данных SQLite мы должны установить соответствующую библиотеку. Она называется sqlite3.

Откройте папку c:\dev в проводнике и запустите нашу улучшенную консоль разработчика msys.bat. В ней наберите команду для установки:

gem install sqlite3 --platform=ruby -- --with-sqlite3-include=/c:/sqlite3/ --with-sqlite3-lib=/c:/sqlite3/.libs/

Если всё прошло гладко, то нужно выполнить ещё одно действие: скопируйте библиотеку c:\sqlite\.libs\libsqlite3-0.dll

в папку c:\Ruby22\bin (или в ту папку, куда вы устанавливали Rubу).

Подключаем наш блокнот к базе данных

Сейчас мы напишем у класса Post метод save_to_db, который будет брать данные заметки и создавать в базе строку с этими данными. Для этого мы воспользуемся SQL-запросом INSERT такого вида:

INSERT INTO posts (type, body, created_at) VALUES ('Memo', 'Мне приснился странный сок', '2015.07.08, 10:00')

Также, напишем метод find, который будет либо искать конкретную запись (если ему передали ID этой записи), либо выводить последние 10 записей в нашем блокноте.

SELECT * FROM posts LIMIT 10;

Приступаем непосредственно к написанию кода на ruby. Внимательно читайте комментарии к коду, лишние комментарии (комментарии к предыдущим версиям были удалены для удобства):

post.rb:

# Во-первых, сразу подключим sqlite3
# Подключать библиотеки лучше всего в тех файлах/классах, который их используют
require 'sqlite3'
class Post
  # Статическое поле класса или class variable
  # аналогично статическим методам принадлежит всему классу в целом
  # и доступно незвисимо от созданных объектов
  @@SQLITE_DB_FILE = 'notepad.
sqlite' # Теперь нам нужно будет читать объекты из базы данных # поэтому удобнее всегда иметь под рукой связь между классом и его именем в виде строки def self.post_types {'Memo' => Memo, 'Task' => Task, 'Link' => Link} end # Параметром теперь является строковое имя нужного класса def self.create(type) return post_types[type].new end def initialize @created_at = Time.now # дата создания записи @text = nil # массив строк записи — пока пустой end def read_from_console end def to_strings end # Метод to_db_hash возвращает хэш вида {'имя_столбца' => 'значение'} # для сохранения в базу данных новой записи def to_db_hash # дочерние классы сами знают свое представление, но общие для всех классов поля # можно заполнить уже сейчас в базовом классе! { # self — ключевое слово, указывает на 'этот объект', # то есть конкретный экземпляр класса, где выполняется в данный момент этот код 'type' => self.class.name, 'created_at' => @created_at.
to_s } # todo: дочерние классы должны дополнять этот хэш массив своими полями end # Наконец, вот он метод, сохраняющий состояние объекта в базу данных def save_to_db db = SQLite3::Database.open(@@SQLITE_DB_FILE) # открываем "соединение" к базе SQLite db.results_as_hash = true # настройка соединения к базе, он результаты из базы преобразует в Руби хэши # запрос к базе на вставку новой записи в соответствии с хэшом, сформированным дочерним классом to_db_hash db.execute( "INSERT INTO posts (" + to_db_hash.keys.join(', ') + # все поля, перечисленные через запятую ") " + " VALUES ( " + ('?,'*to_db_hash.keys.size).chomp(',') + # строка из заданного числа _плейсхолдеров_ ?,?,?... ")", to_db_hash.values # массив значений хэша, которые будут вставлены в запрос вместо _плейсхолдеров_ ) insert_row_id = db.last_insert_row_id # закрываем соединение db.close # возвращаем идентификатор записи в базе return insert_row_id end # Получает на вход хэш массив данных и должен заполнить свои поля def load_data(data_hash) @created_at = Time.
parse(data_hash['created_at']) # todo: остальные специфичные поля должны заполнить дочерние классы end def save file = File.new(file_path, "w:UTF-8") for item in to_strings do file.puts(item) end file.close end def file_path current_path = File.dirname(__FILE__) file_name = @created_at.strftime("#{self.class.name}_%Y-%m-%d_%H-%M-%S.txt") return current_path + "/" + file_name end # Находит в базе запись по идентификатору или массив записей # из базы данных, который можно например показать в виде таблицы на экране def self.find(limit, type, id) db = SQLite3::Database.open(@@SQLITE_DB_FILE) # открываем "соединение" к базе SQLite if id.present? db.results_as_hash = true # настройка соединения к базе, он результаты из базы преобразует в Руби хэши # выполняем наш запрос, он возвращает массив результатов, в нашем случае из одного элемента result = db.execute("SELECT * FROM posts WHERE rowid = ?", id) # получаем единственный результат (если вернулся массив) result = result[0] if result. is_a? Array db.close if result.empty? puts "Такой id #{id} не найден в базе :(" return nil else # создаем с помощью нашего же метода create экземпляр поста, # тип поста мы взяли из массива результатов [:type] # номер этого типа в нашем массиве post_type нашли с помощью метода Array#find_index post = create(result['type']) # заполним этот пост содержимым post.load_data(result) # и вернем его return post end # эта ветвь выполняется если не передан идентификатор else db.results_as_hash = false # настройка соединения к базе, он результаты из базы НЕ преобразует в Руби хэши # формируем запрос в базу с нужными условиями query = "SELECT rowid, * FROM posts " query += "WHERE type = :type " unless type.nil? # если задан тип, надо добавить условие query += "ORDER by rowid DESC " # и наконец сортировка - самые свежие в начале query += "LIMIT :limit " unless limit. nil? # если задан лимит, надо добавить условие # готовим запрос в базу, как плов :) statement = db.prepare query statement.bind_param('type', type) unless type.nil? # загружаем в запрос тип вместо плейсхолдера, добавляем лук :) statement.bind_param('limit', limit) unless limit.nil? # загружаем лимит вместо плейсхолдера, добавляем морковь :) result = statement.execute! #(query) # выполняем statement.close db.close return result end end end # PS: метод self.find получился довольно громоздким и со множеством if — это не хороший стиль. # # Подумайте и попробуйте его сделать изящнее и проще. # Например разбив его на несколько других методов, или переработав его логику (например так, # чтобы он работал универсальным образом — всегда возвращал массив # объектов Post. просто в случае с id этот массив будет состоять из одного объекта) # # Кстати, подобным "правильным" образом работает похожий метод в Ruby on Rails

Теперь давайте реализуем у каждого ребёнка методы to_db_hash и load_data:

link. rb:

  def to_db_hash
    # вызываем родительский метод ключевым словом super и к хэшу, который он вернул
    # присоединяем прицепом специфичные для этого класса поля методом Hash#merge
    return super.merge(
      {
        'text' => @text,
        'url' => @url
      }
    )
  end
  # загружаем свои поля из хэш массива
  def load_data(data_hash)
    super(data_hash) # сперва дергаем родительский метод для общих полей
    # теперь прописываем свое специфичное поле
    @url = data_hash['url']
  end

memo.rb:

  def to_db_hash
    # вызываем родительский метод ключевым словом super и к хэшу, который он вернул
    # присоединяем прицепом специфичные для этого класса поля методом Hash#merge
    return super.merge(
      {
        'text' => @text.join('\n\r') # массив строк делаем одной большой строкой, разделенной символами перевода строки
      }
    )
  end
  # загружаем свои поля из хэш массива
  def load_data(data_hash)
    super(data_hash) # сперва дергаем родительский метод для общих полей
    # теперь прописываем свое специфичное поле
    @text = data_hash['text']. split('\n\r')
  end

task.rb:

  def to_db_hash
    # вызываем родительский метод ключевым словом super и к хэшу, который он вернул
    # присоединяем прицепом специфичные для этого класса поля методом Hash#merge
    return super.merge(
      {
        'text' => @text,
        'due_date' => @due_date.to_s
      }
    )
  end
  # загружаем свои поля из хэш массива
  def load_data(data_hash)
    super(data_hash) # сперва дергаем родительский метод для общих полей
    # теперь прописываем свое специфичное поле
    @due_date = Date.parse(data_hash['due_date'])
  end

Перепишем основную программу для создания записи new_post.rb:

# Подключаем класс Post и его детей
require_relative 'post.rb'
require_relative 'memo.rb'
require_relative 'link.rb'
require_relative 'task.rb'
# Как обычно, при использовании классов программа выглядит очень лаконично
puts "Привет, я блокнот версия 2, записываю новые записи в базу SQLite :)"
# Теперь надо спросить у пользователя, что он хочет создать
puts "Что хотите записать сегодня?"
# массив возможных видов Записи (поста)
choices = Post. post_types.keys
choice = -1
until choice >= 0 && choice < choices.size # пока юзер не выбрал правильно
  # выводим заново массив возможных типов поста
  choices.each_with_index do |type, index|
    puts "\t#{index}. #{type}"
  end
  choice = gets.chomp.to_i
end
# выбор сделан, создаем запись с помощью стат. метода класса Post
entry = Post.create(choices[choice])
# Просим пользователя ввести пост (каким бы он ни был)
entry.read_from_console
# Сохраняем пост в базу данных
rowid = entry.save_to_db
puts "Запись сохранена в базе, id = #{rowid}"

Чтобы метод Post.find получил нужные параметры, ему их нужно передать, давайте по-взрослому будем прокидывать их из параметров командной строки. Снова следите за мыслью при написании основной программы в файле read.rb:

# Подключаем класс Post и его детей
require_relative 'post.rb'
require_relative 'memo.rb'
require_relative 'link.rb'
require_relative 'task.rb'
# будем обрабатывать параметры командной строки по-взрослому с помощью спец.  библиотеки руби
require 'optparse'
# Все наши опции будут записаны сюда
options = {}
# заведем нужные нам опции
OptionParser.new do |opt|
  opt.banner = 'Usage: read.rb [options]'
  opt.on('-h', 'Prints this help') do
    puts opt
    exit
  end
  opt.on('--type POST_TYPE', 'какой тип постов показывать (по умолчанию любой)') { |o| options[:type] = o } #
  opt.on('--id POST_ID', 'если задан id — показываем подробно только этот пост') { |o| options[:id] = o } #
  opt.on('--limit NUMBER', 'сколько последних постов показать (по умолчанию все)') { |o| options[:limit] = o } #
end.parse!
result = Post.find(options[:limit], options[:type], options[:id])
if result.is_a? Post # показываем конкретный пост
  puts "Запись #{result.class.name}, id = #{options[:id]}"
  # выведем весь пост на экран и закроемся
  result.to_strings.each do |line|
    puts line
  end
else # показываем таблицу результатов
  print "| id\t| @type\t|  @created_at\t\t\t|  @text \t\t\t| @url\t\t| @due_date \t "
  result.each do |row|
    puts
    # puts '_'*80
    row. each do |element|
      print "|  #{element.to_s.delete("\\n\\r")[0..40]}\t"
    end
  end
end
puts
# Фигурные скобки {...} после вызова метода в простых случаях аналогичны конструкции do ... end
# Они ограничивают блок кода который будет выполняться этим методом
#
# см. http://stackoverflow.com/questions/5587264/do-end-vs-curly-braces-for-blocks-in-ruby

Теперь можно создать пару записей и посмотреть в нашем SQlite Manager-е на результат:

Итак, мы разобрались с базами данных и научились использовать систему управления базами данных sqlite в нашем блокноте. Конечно, программа далека от идеала: нельзя, например, удалять записи, нельзя редактировать посты. Но для иллюстрации работы с базой данных этого достаточно.

Страница загрузки

SQLite Страница загрузки

SQLite

Маленький. Быстрый. Надежный.
Выберите любые три.

  • Дом
  • Меню
  • О компании
  • Документация
  • Скачать
  • Лицензия
  • Поддержка
  • Покупка
Исходный код
sqlite-amalgamation-3420000. zip
(2,52 МБ)
Исходный код C как объединение, версия 3.42.0.
(SHA3-256: 436747dc8090d015b9869b96f5837f745e852d2ce73fd77410ed76ee51107a1f)
sqlite-autoconf-3420000.tar.gz
(3,00 МБ)
Исходный код C как объединение. Также включает в себя сценарий «настройки». и make-файлы TEA для интерфейса TCL.
(SHA3-256: 643898e9fcc8f6069bcd47b0e6057221c1ed17bbee57da20d2752c79d91274e8)
Документация 9 0027
sqlite-doc-3420000.zip
(10,17 МБ)
Документация в виде пакета статических файлов HTML.
(SHA3-256: 6dc0f3bb68bd9a541bbe9c75ec4b2304ba0857e706a21af5fea072136d46995e)
Предварительно скомпилированные двоичные файлы для Android
sqlite-android-3420000. aar
(3,30 МБ)
Предварительно скомпилированная библиотека Android, содержащая ядро ​​SQLite вместе с соответствующими привязками Java, готовыми к установке на любой Android Студийный проект.
(SHA3-256: c906cf95bdc5b620740d081004f7683b238043cf2c0020286e43a1468363167a)
Предварительно скомпилированные двоичные файлы для Linux
sqlite-tools-linux-x86-3420000.zip
(2,18 МБ)
Набор инструментов командной строки для управления файлами базы данных SQLite, включая программу оболочки командной строки, программу sqldiff и программа sqlite3_analyzer.
(SHA3-256: a9dc5804cb61efc73a66aa61b034589216de9f7e53aa34a64dd2268d8e85bfdb)
Предварительно скомпилированные двоичные файлы для Mac OS X (x86)
sqlite-tools-osx- x86-3420000. zip
(1,56 МБ)
Набор инструментов командной строки для управления файлами базы данных SQLite, включая программу оболочки командной строки, программу sqldiff и программа sqlite3_analyzer.
(SHA3-256: 87a4dd36c3781a13181657cee85bf0e335554de3d89e7dbbe306c4a9b292f5d1)
Предварительно скомпилированные двоичные файлы для Windows
sqlite-dll-win32-x86-3420000.zip
(570,83 КиБ)
32-разрядная DLL (x86) для SQLite версии 3.42.0.
(SHA3-256: 5edbd7244c91cae59dedfea6cdea6f9683116b034a0d18495e2aeb4a9592c87a)
sqlite-dll- win64-x64-3420000.zip
(1,16 МБ)
64-разрядная DLL (x64) для SQLite версии 3.42.0.
(SHA3-256: 2425efa95556793a20761dfdab0d3b56a52e61716e8bb65e6a0a3590d41c97c0)
sqlite-tools-win32-x86-3420000. zip
(1,93 МБ)
Набор инструментов командной строки для управления файлами базы данных SQLite, включая программу оболочки командной строки, программу sqldiff.exe и программа sqlite3_analyzer.exe.
(SHA3-256: 93d10287cd1a20dce57bb671bcd620cc827c3a316660326338cff0478514e6ee)
Предварительно скомпилированный бин Овен для .NET
System.Data.SQLite Посетите System.Data.SQLite.org веб-сайт и особенно страницу загрузки для исходный код и двоичные файлы SQLite для .NET.
WebAssembly и JavaScript
sqlite-wasm-3420000.zip
(782,10 КиБ)
Предварительно скомпилированный пакет из sqlite3.wasm и его API-интерфейсы JavaScript, готовые к использованию в веб-приложениях.
(SHA3-256: 9c280e2865d7877768c15d9942993e57024ef39ede000ea846e8f8b70ce)
Альтернативные форматы исходного кода
sqlite-src-3420000.zip
(13 0,27 МБ)
Моментальный снимок полного (необработанного) исходного дерева для SQLite версии 3.42.0. Подробнее об использовании см. Как скомпилировать SQLite.
(SHA3-256: f28b48f90cad0ec3c726ef99dfc44d52110e3e8cb829a309d4ffa77fe4958994)
sqlite-предварительно обработанный -3420000.zip
(2,63 МБ)
Предварительно обработанные исходные коды C для SQLite версии 3.42.0.
(SHA3-256: 0be58ac254a3a84f402d020873d7c631593a5f4f59fb5b49f78f60f8a5db915e)

Названия и информация о продуктах сборки

Продукты сборки именуются с использованием одного из следующих шаблонов:

  1. sqlite- продукт версия . zip
  2. sqlite- продукт версия .tar.gz
  3. sqlite- продукт ОС процессор версия .zip
  4. sqlite- продукт дата .zip

Шаблоны (1) и (2) используются для продуктов с исходным кодом. Шаблон (1) есть используется для общих продуктов и шаблонов с исходным кодом (2) используется для исходного кода продукты, которые обычно полезны только на unix-подобных платформах. Шаблон (3) используется для предварительно скомпилированных двоичных файлов. Шаблон (4) используется для неофициальные предварительные «снимки» исходного кода.

Версия закодирована таким образом, что имена файлов сортируются в порядке увеличение номера версии при просмотре с помощью «ls». Для версии 3.X.Y кодировка имени файла 3XXYY00. Для ветки версии 3.X.Y.Z кодировка 3XXYZZ.

Дата в шаблоне (4) имеет вид: ГГГГММДДЧЧММ.

Для удобного извлечения загружаемых URL-адреса файлов и связанная с ними информация, встроенный HTML-комментарий в источнике этой страницы. Его первая строка (без начального тега) гласит:

Загрузка данных о продукте для чтения сценариев
Его последующие строки составляют таблицу CSV с таким заголовком столбца:
ПРОДУКТ, ВЕРСИЯ, ОТНОСИТЕЛЬНЫЙ URL, РАЗМЕР В БАЙТАХ, SHA3-HASH
Заголовок столбца и последующие строки данных не имеют начального пробела. Столбец ПРОДУКТ представляет собой постоянное значение («ПРОДУКТ») для удобного сопоставление регулярных выражений. Другие столбцы говорят сами за себя. Этот формат останется стабильным, за исключением возможных новых столбцов. добавляются справа от старых столбцов.

Репозитории исходного кода

Исходный код SQLite поддерживается в трех географически разнесенных самосинхронизирующийся Хранилища ископаемых, которые доступны для анонимного доступа только для чтения. Любой может просматривать содержимое репозитория и скачивать исторические версии отдельных файлов или ZIP-архивов исторических проверок. Вы также можете клонировать весь репозиторий.

Дополнительные сведения см. на странице Как скомпилировать SQLite. о том, как использовать необработанный исходный код SQLite. Обратите внимание, что последняя версия Tcl требуется для сборки из источников репозитория. Объединение файлов исходного кода (файлы sqlite3.c и sqlite3.h) создают продукты и не содержится в необработанном дереве исходного кода.

https://www.sqlite.org/cgi/src (Даллас)
https://www2.sqlite.org/cgi/src (Ньюарк)
https://www3.sqlite.org/cgi/src (Сан-Франциско) )

Зеркало GitHub находится по адресу

https://github.com/sqlite/sqlite/

Документация хранится в отдельном Хранилища ископаемых расположены по адресу:

https://www.sqlite.org/cgi/docsrc (Даллас)
https://www2.sqlite.org/cgi/docsrc (Ньюарк)
https://www3.sqlite.org/cgi/docsrc (Сан-Франциско) )

Документация по SQLite

Документация по SQLite

Маленький. Быстрый. Надежный.
Выберите любые три.

  • Дом
  • Меню
  • О компании
  • Документация
  • Скачать
  • Лицензия
  • Поддержка
  • Покупка

Документация

Поиск в документацииПоиск в журнале изменений

  • ▼ Списки и индексы документов
    • Алфавитный список всех документов
    • Индекс ключевых слов веб-сайта
    • Переставленный индекс заголовков
  • ► Обзор документов
    • О SQLite → Общий обзор того, что такое SQLite и почему вы можете быть заинтересован в его использовании.
    • Надлежащее использование для SQLite → В этом документе описываются ситуации, когда SQLite является подходящим механизм базы данных для использования по сравнению с ситуациями, когда клиент/сервер ядро базы данных может быть лучшим выбором.
    • Отличительные особенности → В этом документе перечислены и описаны некоторые функции SQLite, которые отличают его от других механизмов баз данных SQL.
    • Особенности SQLite → Этот документ представляет собой краткий список некоторых необычных функций SQLite. которые, как правило, вызывают недопонимание и путаницу. Список включает как преднамеренные новшества, так и «недочеты», сохраняемые только для обратной совместимости.
    • Как тестируется SQLite → Надежность и надежность SQLite достигается в значительной степени тщательным и тщательным тестированием. Этот документ идентифицирует множество тестов, которые происходят перед каждым выпуском SQLite.
    • Авторское право → SQLite находится в общественном достоянии. Этот документ описывает, что это означает и последствия для участников.
    • Часто задаваемые вопросы → В названии документа все сказано…
    • Книги о SQLite → Список самостоятельно написанных книг по SQLite.
  • ► Интерфейсы программирования
    • SQLite за 5 минут или меньше → Очень краткое введение в программирование с помощью SQLite.
    • Введение в API C/C++ → Этот документ знакомит с C/C++ API. Пользователи должны прочитать этот документ перед Справочным руководством по C/C++ API, ссылка на которое приведена ниже.
    • Как скомпилировать SQLite → Инструкции и советы по компиляции кода SQLite C и интеграции этот код с вашим собственным приложением.
    • Справочник по API C/C++ → В этом документе каждая функция API описывается отдельно.
    • Коды результатов и ошибок → Описание значений числовых кодов результатов возвращаемые различными интерфейсами C/C++.
    • Синтаксис SQL → В этом документе описывается язык SQL, понятный SQLite.
    • Команды прагмы → В этом документе описываются параметры настройки производительности SQLite и другие команды базы данных специального назначения.
    • Базовые функции SQL → Встроенные скалярные функции SQL общего назначения.
    • Агрегированные функции SQL → Встроенные агрегированные функции SQL общего назначения.
    • Дата и время Функции SQL → Функции SQL для управления датами и временем.
    • Оконные функции → Функции окна SQL.
    • Сгенерированные столбцы → Сохраненные и виртуальные столбцы в определениях таблиц.
    • Система.Данные.SQLite → Привязки C#/.NET для SQLite
    • Tcl API → Описание привязок интерфейса TCL для SQLite.
    • Типы данных → SQLite версии 3 вводит концепцию типизации манифеста, где тип значения связан с самим значением, а не со столбцом, который он хранится в. На этой странице более подробно описывается типизация данных для SQLite версии 3.
  • ► Расширения
    • Json1 — интеграция JSON → Функции SQL для создания, анализа и запроса содержимого JSON.
    • FTS5 — полнотекстовый поиск → Описание расширения полнотекстового поиска SQLite (FTS5).
    • FTS3 — полнотекстовый поиск → Описание расширения полнотекстового поиска SQLite (FTS3).
    • Модуль R-Tree → Описание расширения SQLite R-Tree. R-Tree — это специализированный структура данных, которая часто поддерживает быстрые многомерные запросы диапазона используется в геопространственных системах.
    • Сеансы → Расширение Sessions позволяет вносить изменения в базу данных SQLite. захвачен в компактный файл, который можно восстановить в оригинале базы данных (для реализации «отмены») или перенесены и применены к другому аналогичная база данных.
    • Загружаемые расширения во время выполнения → Общий обзор того, как работают загружаемые во время выполнения расширения, как они компилируются, и как разработчики могут создавать свои собственные загружаемые во время выполнения расширения для SQLite.
    • Привязки SQLite для Android → Информация о том, как развернуть собственную частную копию SQLite на Android, минуя встроенный SQLite, но используя ту же Java интерфейс.
    • Виртуальная таблица Dbstat → Виртуальная таблица DBSTAT сообщает о размерах и геометрии таблиц. хранение содержимого в базе данных SQLite и является основой для Утилита [sqlite3_analyzer].
    • Виртуальная таблица Csv → Виртуальная таблица CSV позволяет SQLite напрямую читать и запрашивать [https://www.ietf.org/rfc/rfc4180.txt|RFC 4180].
    • Каррей → CARRAY — это [функция с табличным значением], которая позволяет массивам языка C использоваться в запросах SQL.
    • generate_series → Описание generate_series() [функция с табличным значением].
    • Спеллфикс1 → Расширение Spellfix1 — это эксперимент по исправлению орфографии. для [полнотекстового поиска].
  • ► Особенности
    • 8+3 Имена файлов → Как заставить SQLite работать с файловыми системами, которые поддерживают только 8+3 имени файла.
    • Автоинкремент → Описание ключевого слова AUTOINCREMENT в SQLite, что оно делает, почему это иногда полезно, и почему его следует избегать, если нет строго необходимо.
    • API резервного копирования → [sqlite3_backup_init | интерфейс онлайн-резервного копирования] можно использовать для копировать содержимое из файла на диске в базу данных в памяти или наоборот наоборот, и он может сделать горячую резервную копию активной базы данных. Это приложение примечание дает примеры того, как.
    • Журнал ошибок и предупреждений → SQLite поддерживает дизайн «журнала ошибок и предупреждений» для сбора информации. о подозрительных и/или ошибочных событиях во время работы. Встроенные приложения рекомендуется включить журнал ошибок и предупреждений, чтобы помочь с отладкой прикладные проблемы, возникающие в полевых условиях. В этом документе объясняется, как сделать это.
    • Поддержка внешнего ключа → В этом документе описывается поддержка введенных ограничений внешнего ключа. в версии 3.6.19.
    • Индексы в выражениях → Примечания о том, как создавать индексы для выражений, а не просто отдельные столбцы.
    • Внутреннее и внешнее хранилище BLOB-объектов → Следует ли хранить большие BLOB-объекты непосредственно в базе данных или хранить их в файлах и просто записать имя файла в базу данных? Этот документ пытается пролить свет на этот вопрос.
    • Ограничения в SQLite → Этот документ описывает ограничения SQLite (максимальная длина строка или большой двоичный объект, максимальный размер базы данных, максимальное количество таблицы в базе данных и т. д.) и как эти ограничения могут быть изменены в время компиляции и время выполнения.
    • Ввод-вывод с отображением памяти → SQLite поддерживает ввод-вывод с отображением памяти. Узнайте, как включить сопоставление памяти ввода-вывода и о различных преимуществах и недостатках использования ввод-вывод с отображением памяти в этом документе.
    • Многопоточные программы и SQLite → SQLite безопасно использовать в многопоточных программах. Этот документ предоставляет подробную информацию и советы о том, как максимизировать производительность.
    • Обработка нулей → Различные механизмы баз данных SQL обрабатывают значения NULL по-разному. Стандарты SQL неоднозначны. Этот документ (около 2003 г.) описывает как SQLite обрабатывает NULL по сравнению с другими механизмами баз данных SQL.
    • Частичные индексы → Частичный индекс — это индекс, который охватывает только подмножество строк в стол. Узнайте, как использовать частичные индексы в SQLite из этого документа.
    • Режим общего кэша → Версия 3.3.0 и выше поддерживает возможность двух и более подключения к базе данных для совместного использования одной и той же страницы и кэша схемы. Эта функция полезна для некоторых специализированных приложений.
    • Разблокировать Уведомить → Функцию «разблокировать уведомление» можно использовать вместе с [режим общего кэша] для более эффективного управления конфликтами ресурсов (база данных столовые замки).
    • Имена файлов URI → Имена файлов базы данных могут быть указаны с помощью обычного имя файла или URI. Использование имен файлов URI предоставляет дополнительные возможности, как описано в этом документе.
    • БЕЗ ROWID Таблицы → Оптимизация БЕЗ ROWID — это вариант, который иногда может привести к в небольших и более быстрых базах данных.
    • Режим журнала упреждающей записи (WAL) → Управление транзакциями с помощью журнала с упреждающей записью обеспечивает больше параллелизма и часто быстрее, чем транзакции отката по умолчанию. Этот документ объясняет, как использовать режим WAL для повышения производительности.
  • ► Инструменты
    • Оболочка командной строки (sqlite3.exe) → Примечания по использованию интерфейса командной строки sqlite3.exe, который может использоваться для создания, изменения и запроса произвольного SQLite файлы базы данных.
    • Анализатор базы данных SQLite (sqlite3_analyzer.exe) → Эта автономная программа читает базу данных SQLite и выводит файл показ пространства, используемого каждой таблицей, индексом и другой статистикой. Построен с использованием [виртуальной таблицы dbstat].
    • РБУ → Служебная программа «Resumable Bulk Update» позволяет вносить пакетные изменения применяться к удаленной базе данных, работающей на встроенном оборудовании в способ, который можно возобновить и не прерывать текущую операцию.
    • Разница базы данных SQLite (sqldiff.exe) → Эта автономная программа сравнивает два файла базы данных SQLite и выводит SQL, необходимый для преобразования одного в другое.
    • Хэш базы данных (dbhash.exe) → Эта программа демонстрирует, как вычислить хэш над содержимым базы данных SQLite.
    • Ископаемое → Система контроля версий Fossil — это распределенная система контроля версий, разработанная специально для для поддержки разработки SQLite. Fossil использует SQLite в качестве хранилища.
    • Архиватор SQLite (sqlar.exe) → ZIP-подобная программа архивации, которая использует SQLite для хранения.
  • ► Защита интересов
    • SQLite как формат файла приложения → В этой статье рекомендуется использовать SQLite в качестве формата файла приложения. вместо XML или JSON или «кучи файлов».
    • Известные пользователи → На этой странице перечислены некоторые из многих тысяч устройств. и прикладные программы, использующие SQLite.
    • На 35% быстрее, чем файловая система → В этой статье указывается, что чтение больших двоичных объектов из базы данных SQLite часто быстрее, чем чтение одних и тех же больших двоичных объектов из отдельных файлов в файловая система.
  • ► Техническая и проектная документация
    • Как может произойти повреждение базы данных → SQLite обладает высокой устойчивостью к повреждению базы данных. Но приложение, Ошибки операционной системы и оборудования могут по-прежнему приводить к повреждению файлов базы данных. В этой статье описываются многие способы, которыми файлы базы данных SQLite может испортиться.
    • Временные файлы, используемые SQLite → SQLite потенциально может использовать много разных временных файлов, когда обработка определенных операторов SQL. В этом документе описывается многие виды временных файлов, которые SQLite использует и предлагает предложения чтобы избежать их в системах, где создание временного файла является дорогая операция.
    • Базы данных в памяти → SQLite обычно хранит содержимое в файле на диске. Однако он также может использоваться в качестве механизма базы данных в памяти. В этом документе объясняется, как.
    • Как SQLite реализует атомарную фиксацию → Описание логики в SQLite, реализующей транзакции с атомарной фиксацией, даже перед лицом власти неудачи.
    • Динамическое выделение памяти в SQLite → SQLite имеет сложную подсистему распределения памяти, которую можно сконфигурированы и настроены в соответствии с требованиями использования памяти приложение, устойчивое к нехватке памяти и без утечек. В этом документе приведены подробности.
    • Настройка и перенос SQLite → В этом документе объясняется, как настроить сборку SQLite и как портировать SQLite на новые платформы.
    • Блокировка и параллелизм
      В SQLite версии 3 → Описание того, как увеличивается новый код блокировки в версии 3 параллелизм и уменьшает проблему голодания писателя.
    • Изоляция в SQLite → Когда мы говорим, что транзакции SQLite «сериализуемы», что именно это значит? Как и когда изменения становятся видимыми в одно и то же подключение к базе данных и к другим подключениям к базе данных?
    • Обзор оптимизатора → Краткий обзор различных оптимизаций запросов, которые пытается генератор кода SQLite.
    • Планировщик запросов нового поколения → Дополнительная информация о планировщике запросов SQLite и, в частности, изменение дизайна планировщика запросов, произошедшее для версии 3. 8.0.
    • Архитектура → Обзор архитектуры библиотеки SQLite, полезный для тех, кто хочет взломать код.
    • Коды операций VDBE → Этот документ представляет собой автоматически сгенерированное описание различных коды операций, которые понимает VDBE. Программисты могут использовать этот документ как ссылка для лучшего понимания вывода списков EXPLAIN из SQLite.
    • Виртуальная файловая система → Объект «VFS» — это интерфейс между ядром SQLite и базовая операционная система. Узнайте больше о том, как объект VFS работает и как создавать новые объекты VFS из этой статьи.
    • Виртуальные столы → В этой статье описывается механизм виртуальных таблиц и API в SQLite, а также то, как его можно использовать для добавления новых возможностей в основную библиотеку SQLite.
    • Формат файла SQLite → Описание формата, используемого для файлов базы данных и журналов SQLite, и другие детали, необходимые для создания программного обеспечения для чтения и записи SQLite базы данных без использования SQLite.
    • Параметры компиляции → Этот документ описывает параметры времени компиляции, которые могут быть установлены на изменить поведение библиотеки по умолчанию или исключить дополнительные функции чтобы уменьшить размер двоичного файла.
    • Привязки Android для SQLite → Описание того, как скомпилировать собственный SQLite для Android (в обход встроенного в Android SQLite) вместе с код и make-файлы.
    • Советы по отладке → Список приемов и методов, используемых для отслеживания, изучения и понимания работу основной библиотеки SQLite.
  • ► Обновление SQLite, обратная совместимость
    • Переход с SQLite 3.5 на 3.6 → Документ, описывающий различия между SQLite версии 3.5.9. и 3.6.0.
    • Переход с SQLite 3.4 на 3.5 → Документ, описывающий различия между SQLite версии 3.4.2. и 3.5.0.
    • История выпусков → Хронология выпусков SQLite, начиная с версии 1.0.0.
    • Обратная совместимость → В этом документе подробно описаны все несовместимые изменения в SQLite. формат файла, появившийся начиная с версии 1.0.0.
    • Частные отделения → Этот документ предлагает процедуры для ведения частного филиала или ветку SQLite и синхронизируя эту ветку или ветку с общедоступное исходное дерево SQLite.
  • ► Устаревшие документы
    • Асинхронный режим ввода-вывода → На этой странице описывается расширение асинхронного ввода-вывода, разработанное вместе с SQLite. Использование асинхронного ввода-вывода может сделать SQLite более отзывчивым. путем делегирования записи в базу данных фоновому потоку. Примечание: это расширение устарело. [Режим WAL] рекомендуется в качестве замены.
    • Версия 2 API C/C++ → Описание привязок интерфейса C/C++ для SQLite по версии. 2,8
    • Типы данных версии 2 → Описание того, как SQLite версии 2 обрабатывает типы данных SQL. Краткое резюме: все является строкой.
    • VDBE Учебник → VDBE — это подсистема в SQLite, которая выполняет фактическую работу выполнение операторов SQL.