#c #sqlite #c 11
#c #sqlite #c 11
Вопрос:
Это программа на C 11, которая подключается к базе данных Sqlite с использованием библиотеки SqliteModernCpp. Существует следующий класс, который представляет запись из этой базы данных (по крайней мере, файл заголовка):
#ifndef MOVIE_H
#define MOVIE_H
#include<string>
class movie
{
public:
movie(int id, std::string title, int year, int length);
int get_id() const;
void set_id(int id);
std::string get_title() const;
void set_title(std::string title);
int get_year() const;
void set_year(int year);
int get_length() const;
void set_length(int length);
private:
int id;
std::string title;
int year;
int length;
};
#endif // MOVIE_H
В основной функции программы запрашивается база данных для извлечения записи с помощью поля «id». Обратите внимание, что это поле в базе данных имеет значения PK, NN и AI, поэтому этим запросом будет извлечена только одна запись. В настоящее время он просто выводит данные на консоль, используя лямбда-выражение. Как вернуть объект типа movie
с помощью этого запроса?
int main()
{
// connect to the database
sqlite::database db("database.db");
// retrieve a record by ID
auto id = 1;
db << "SELECT * FROM movies WHERE rowid = " std::to_string(id) >> [amp;](int rowid, std::string title, int year, int length)
{
std::cout << title;
};
return 0;
}
Ответ №1:
Это кажется слишком простым, поскольку вы уже решили сложную часть (непроверенный код)
auto id = 1;
movie idmovie
db << "SELECT * FROM movies WHERE rowid = " std::to_string(id) >> [amp;](int rowid, std::string title, int year, int length)
{
idMovie = { rowid, title, year, length };
};
Возможно, вы сможете сократить это до
auto id = 1;
movie idmovie = db << "SELECT * FROM movies WHERE rowid = " std::to_string(id) >> [amp;](int rowid, std::string title, int year, int length) -> movie
{
return { rowid, title, year, length };
};
Но я не проверял ошибку в нем 🙂