подключение бд sqlite для авторизации в c

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

Для начала работы с SQLite в C необходимо подключить необходимую библиотеку. Для этого используется директива include . После этого создается объект типа sqlite3, который будет использоваться для работы с базой данных.

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

sqlite3 *db;
char *err_msg = 0;

int rc = sqlite3_open(users.db, &db);

if (rc != SQLITE_OK) {
fprintf(stderr, Cannot open database: %s\n, sqlite3_errmsg(db));
sqlite3_close(db);

return 1;
}

char *sql = CREATE TABLE Users( \
ID INT PRIMARY KEY NOT NULL, \
Username TEXT NOT NULL, \
Password TEXT NOT NULL);;

rc = sqlite3_exec(db, sql, 0, 0, &err_msg);

if (rc != SQLITE_OK ) {
fprintf(stderr, SQL error: %s\n, err_msg);

sqlite3_free(err_msg);
sqlite3_close(db);

return 1;
}

sqlite3_close(db);

Данный код создает базу данных users.db и таблицу Users с тремя столбцами: ID (идентификатор), Username (логин пользователя) и Password (пароль пользователя). После создания базы данных и таблицы необходимо реализовать функции для регистрации и авторизации пользователей.

Для регистрации пользователя можно использовать следующий пример кода:

int register_user(sqlite3 *db, char *username, char *password) {
char *sql;
sqlite3_stmt *stmt;
int rc;

sql = INSERT INTO Users (Username, Password) VALUES (?, ?);

rc = sqlite3_prepare_v2(db, sql, -1, &stmt, 0);

if (rc == SQLITE_OK) {
sqlite3_bind_text(stmt, 1, username, -1, SQLITE_STATIC);
sqlite3_bind_text(stmt, 2, password, -1, SQLITE_STATIC);
} else {
fprintf(stderr, Failed to execute statement: %s\n, sqlite3_errmsg(db));

return 1;
}

rc = sqlite3_step(stmt);

if (rc != SQLITE_DONE) {
fprintf(stderr, Failed to insert data: %s\n, sqlite3_errmsg(db));

return 1;
}

sqlite3_finalize(stmt);

return 0;
}

Функция register_user принимает указатель на объект базы данных db, логин пользователя и его пароль. Она подготавливает SQL запрос для добавления новой записи в таблицу Users, привязывает значения логина и пароля к запросу и выполняет его.

Для авторизации пользователя можно использовать следующий пример кода:

int login_user(sqlite3 *db, char *username, char *password) {
sqlite3_stmt *stmt;
char *sql;
int rc;

sql = SELECT * FROM Users WHERE Username = ? AND Password = ?;

rc = sqlite3_prepare_v2(db, sql, -1, &stmt, 0);

if (rc == SQLITE_OK) {
sqlite3_bind_text(stmt, 1, username, -1, SQLITE_STATIC);
sqlite3_bind_text(stmt, 2, password, -1, SQLITE_STATIC);
} else {
fprintf(stderr, Failed to execute statement: %s\n, sqlite3_errmsg(db));

return 1;
}

rc = sqlite3_step(stmt);

if (rc != SQLITE_ROW) {
fprintf(stderr, Failed to fetch data: %s\n, sqlite3_errmsg(db));

return 1;
}

sqlite3_finalize(stmt);

return 0;
}

Функция login_user принимает указатель на объект базы данных db, логин пользователя и его пароль. Она подготавливает SQL запрос для выборки данных о пользователе с указанным логином и паролем из таблицы Users и выполняет его. Если пользователь с указанным логином и паролем найден, функция завершается успешно, иначе возвращается ошибка.

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