SQLite запрос через С++ первые шаги

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

Считая, что все настроено — продолжим.

В конце первой статьи, я привел код, задача которого создать базу данных, создать внутри базы одну таблицу, наполнить таблицу одной строкой. Все это работает, но вернусь и кое что проясню. Будем считать, что это дополнение к части первой.

Во первых команды. Все они описаны конечно в доках на официальном сайте.

и так первое — подключение к базе, или ее создание. Заметьте, что если база не существует, она будет создана. Это освобождает нас от необходимости специального создания.

Подключение к базе данных SQLite

sqlite3 *db = 0;

sqlite3_open(«test_database.db», &db);

Напомню, если базы нет, она будет создана. Кроме того, в текущем исполнении, база будет создана в папке проекта.

//—- Кроме команды sqlite3_open(), существует возможность создания баз и саб-баз (база внутри базы),  используя язык запросов, собственно через которой мы и будем общаться в итоге с базой. Понимаю не ко времени, но на всякий случай, запрос будет выглядеть примерно вот так: CREATE DATABASE example;

Где CREATE DATABASE является командой, а example именем создаваемой базы. Мало того, при таком подходе, мы имеем возможность выноса базы в иное место:

CREATE DATABASE expamle WITH LOCATION = ‘/var/lib/postgresql/data’

ENCODING=‘utf-8’ 

Указали команду, дали имя, указали куда положить, уточнили кодировку.

Скорее всего, людей неискушённых совсем ввел в ступор. Давайте разбираться.

Первое и наверное главное — SQLite, как и любая современная база данных, общается с пользователем на языке запросов! Называется он SQL. Для тех кто слышит о нем впервые, отправляю срочно на просторы интернета.

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

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

SQLite запрос

CREATE TABLE и INSERT INTO (создать и вставить)

Разбирая предыдущий код, думаю стоит указать, где этот запрос прописан.

Вот эта строка:

const char* _SQLquery= «const char* _SQLquery= «CREATE TABLE IF NOT EXISTS test(a,b,c); INSERT INTO test VALUES(1,2,3);»;

В данном случае, объявлена переменная _SQLquery, которой присвоено некое значение заключенное в кавычки. Вот то, что находится внутри кавычек и есть наш первый запрос, который мы собрали и в последствии применили.

тут все просто:

CREATE TABLE — Команда «создать таблицу»

IF NOT EXISTS — Команда «проверить существует ли, если нет, то создаем»

test(a,b,c) — указали имя таблицы, имя полей (столбцов) в таблице.

«;» — точка с запятой в данном случае, указывает, что запрос завершен. Любая последовательность после знака, но внутри кавычек, будет считаться следующим запросом.

Далее следует второй запрос, заметьте, два запроса «пишутся» в одну переменную, весьма быстро, но в итоге мы откажемся от такой записи.

INSERT INTO — Команда добавления данных в таблицу

test — имя таблицы в которую добавляем данные

VALUES(1,2,3) — команда, указывающая значения, которые мы хотим вставить в таблицу.

Далее вновь «;» и кавычки закрываются. Все, на этом мы закончили составление запросов.

В дальнейших частях, придется отказаться от подобного «каскадного» составления запроса, да и параметры указываемые при создании таблицы будут явно расширены. Кроме того, команда INSERT INTO получит несколько иной вид. Но это после, а сейчас у нас есть запрос,  который надо применить.

sqlite3_exec(db, _SQLquery, 0, 0, &err) — функция, в которой мы наблюдаем две важные вещи: первое нашу db указатель на которую мы получили в команде open, и второе нашу переменную с набором запросов _SQLquery, которую только что разобрали.

После выполнения данной функции, ваша база данных получит новую таблицу с тремя столбиками, в которых будет одна строка в первом значение 1 во втором значение 2 и в третьем значение 3.

Последнее что нам осталось сделать, это закрыть соединение с базой данных:

sqlite3_close(db);

Все.

Весьма просто. Но как всегда хочу немного огорчить, данный код рабочий, но применим скорее как моно пример для демонстрации работы. Правильнее сделать иначе. О том как, уже в следующей статье.

Очередной плюсик

Вот мы создали базу, добавили данных. А теперь попробуйте повторить тоже самое но с файлами. Получится — не спорю. Но на сколько кросс-платформенно? А на сколько удобнее? А на сколько быстрее? Честно признаюсь, после построения каркаса, бд покажет себя с наилучшей стороны, порадует разработчика простотой использования по сравнению с использованием файловой системы.

План на третью часть

Статья не получилась второй частью, скорее дополнением к первой вводной. Но мы осознали главное — запросы, вот что рулит базой.

В следующей статье планирую:

Второй способ (более правильный) применения команды с запросом.

Разбор запроса «создание таблиц»

Второй способ (более правильный) создание таблицы с параметрами

Второй способ добавления данных

Запрос на выборку SELECT без параметров

Запрос на выборку с условием

Собственно говоря, в следующей статье, будет реализована программа, создающая базу данных пользователей, создающая в ней две таблицы Players и PlayersStats.

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

Часть1

Часть3

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Проверка * Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.